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

ran*_*its 7 ruby rest ruby-on-rails activeresource

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

student_name:Bob Smith
student_name:Jane Smith
student_name:Chris Smith

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

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

zom*_*bat 21

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

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

student_name=Bob+Smith&student_name=Jane+Smith&student_name=Chris+Smith
Run Code Online (Sandbox Code Playgroud)

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

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

student_name[]=Bob+Smith&student_name[]=Jane+Smith&student_name[]=Chris+Smith
Run Code Online (Sandbox Code Playgroud)

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

因为您正在使用Rails,所以方括号语法将成为可能.如果你认为你可以切换服务器端架构或想发布你的代码,你可以看看更多不可知的方法,如编码JSON-字符串被发送,这就增加了开销,但如果这是你希望的情况可能是有用的必须处理.

这里JQuery Ajax参数的上下文中有一篇很棒的帖子.

  • +1.除非你有[],否则rails params解析器将覆盖该值. (2认同)