HTTP POST中的多个键/值对,其中键是相同的名称

我正在开发一个接受远程客户端数据的API,其中一些HTTP POST中的密钥几乎可以作为一个数组。 在英语中,这意味着我的服务器上有一个名为“class”的资源。 在这个意义上的一个类是学生所在的类型和教师教育的类型。当用户提交HTTP POST为他们的应用程序创建一个新类时,许多键值对看起来像:

student_name:鲍勃史密斯
student_name:简史密斯
student_name:克里斯史密斯

什么是在客户端处理这个问题的最佳方法(假设客户端是cURL或ActiveResource,无论如何……)如果我的服务器是Ruby on Rails应用程序,那么在服务器端处理这个问题的方法是什么? 需要一种方法来允许具有相同名称且没有任何命名空间冲突或数据丢失的多个密钥。

我的要求必须是POST数据是urlencoded键/值对。

有两种方法可以解决这个问题,它将取决于您的客户端架构如何进行,因为HTTP标准不会使情况变得干脆。

传统上,HTTP请求只是对重复值使用相同的密钥,并将其留给客户端体系结构来实现正在发生的事情。 例如,您可以使用以下值发布post请求:

student_name=Bob+Smith&student_name=Jane+Smith&student_name=Chris+Smith 

当接收体系结构得到该字符串时,它必须意识到student_name有多个密钥并相应地采取行动。 它通常是这样实现的,如果你有一个键,就会创建一个标量值,如果你有相同键的倍数,那么这些值就会被放入一个数组中。

然而,现代客户端体系结构(如PHP和Rails)使用不同的语法。 您想要作为数组读入的任何键都会附加方括号,如下所示:

 student_name[]=Bob+Smith&student_name[]=Jane+Smith&student_name[]=Chris+Smith 

接收体系结构将创建一个名为“student_name”的数组结构,不带括号。 方括号语法解决了无法仅使用单个值发送数组的问题,无法使用“传统”方法处理。

因为您正在使用Rails,所以方括号语法将成为可能。 如果您认为可能会切换服务器端体系结构或想要分发代码,那么您可以查看更多不可知的方法,例如对正在发送的字符串进行JSON编码,这会增加开销,但如果是您希望的情况可能会有用。必须处理。

在这里JQuery Ajax参数的上下文中有一篇很棒的post。

将您的数据作为XML或JSON发送,并解析您需要的任何内容。