【问题标题】:Multiple key/value pairs in HTTP POST where key is the same nameHTTP POST 中的多个键/值对,其中键名相同
【发布时间】:2010-04-10 20:01:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby rest activeresource


    【解决方案1】:

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

    【讨论】:

    • +1。 rails 参数解析器将覆盖该值,除非您有 [] 存在。
    【解决方案2】:

    以 XML 或 JSON 格式发送您的数据,然后解析您需要的任何内容。

    【讨论】:

    • 我应该在上面说明我需要支持 urlencoded 键/值对,因为典型的浏览器会处理它。我将编辑我的问题以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多