7

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

学生姓名:鲍勃·史密斯
学生姓名:简·史密斯
学生姓名:克里斯·史密斯

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

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

4

2 回答 2

21

有两种方法可以处理这个问题,这将取决于您的客户端架构如何去做,因为 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 参数的上下文中,有一篇很棒的帖子。

于 2010-04-10T20:52:03.777 回答
0

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

于 2010-04-10T20:27:07.643 回答