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

标签 ruby-on-rails ruby rest activeresource

我正在开发一个接受来自远程客户端的数据的 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/

相关文章:

node.js - 无法使用 Wordpress REST API (Node JS) 上传图像文件

php - 可以一起使用 Zend_Http_Client() 和 Zend_Rest_Client()

Ruby - 当我打印出字符串时如何保留\n

ruby-on-rails - 通过 Ruby on Rails 中的关联实现多态 has_many

html - 使用 Rails 显示数据库中的图像

ruby-on-rails - 如果 config.cache_classes = true,Rails 找不到模块

ruby - 在 Bluehost 上使用 Phusion Passenger 进行 Rails 部署

ruby-on-rails - 我应该允许 activerecord-import 运行多长时间?

java - 当多个用户使用相同的 API 时,Java 中的相同变量是否会更新?

ruby-on-rails - 如何将 Rails #update_attribute 与数组字段一起使用?