我正在开发一个接受来自远程客户端的数据的 API,其中一些 HTTP POST 中的键几乎用作数组。在英语中,这意味着我的服务器上有一个名为“类”的资源。从这个意义上讲,类(class)是学生上课和老师类的类型。当用户提交 HTTP POST 为他们的应用程序创建新类(class)时,许多键值对如下所示:
学生姓名:鲍勃·史密斯
学生姓名:简·史密斯
学生姓名:克里斯·史密斯
如果我的服务器是 Ruby on Rails,那么在客户端(假设客户端是 cURL 或 ActiveResource,等等)处理这个问题的最佳方法是什么?在服务器端处理这个问题的合适方法是什么应用程序?需要一种方法来允许多个键具有相同的名称并且没有任何命名空间冲突或数据丢失。
我的要求必须是 POST 数据是 urlencoded 键/值对。
最佳答案
有两种方法可以处理这个问题,这将取决于您的客户端架构,您如何处理它,因为 HTTP 标准不会让情况变得一成不变。
传统上,HTTP 请求只会对重复的值使用相同的键,并将其留给客户端架构来了解发生了什么。例如,您可能有一个包含以下值的发布请求:
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 parameters here 的上下文中有一篇关于所有这些的很棒的帖子.
关于ruby-on-rails - HTTP POST 中的多个键/值对,其中键是相同的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2614762/