【问题标题】:What is a possible format for complex POST parameters in a RESTful API?RESTful API 中复杂 POST 参数的可能格式是什么?
【发布时间】:2012-01-01 15:54:35
【问题描述】:

我正在使用node.js + express 开发一个应用程序,其中包含一个允许用户订阅项目列表的结构。每个列表订阅涉及选项,例如每个项目的最低分数和列表中的前 N ​​个项目,并且订阅可以组织成与整个订阅列表模式中的特定排名相关的数字分组。多个订阅可以在一个排名中,允许并列,而其他订阅的排名可能更高或更低。

我当前的问题是,我正在提供一个界面来管理这些列表订阅及其选项,虽然我能想到一些 UI 可能性,但我对将结果提交回我的最佳格式感到有些困惑服务器。

表示为 JSON,这是我将使用的:

[
    [
        {"list_id":1,"min_score":0,"limit":500}
    ],
    [
        {"list_id":12,"min_score":5,"limit":-1},
        {"list_id":16,"min_score":5,"limit":-1}
    ],
    [
        {"list_id":2,"min_score":0,"limit":-1}
    ]
]

我很想简单地对该 JSON 进行编码并将其作为单个参数发布,但这听起来有点 hack-ish。我试图让我的 API 尽可能开放和一致,以允许其他客户端使用。

【问题讨论】:

    标签: javascript json rest node.js express


    【解决方案1】:

    @mythz 的 JSON 方法是首选。如果无法使用 JSON,请使用与 jQuery 相同的格式:

    How to pass a Javascript Array via JQuery Post so that all its contents are accessible via the PHP $_POST array?

    这是一个事实上的标准,因此最好使用它而不是推出自己的标准。

    【讨论】:

      【解决方案2】:

      将其作为 ContentType: application/json 发布到指定的 url 是理想的方法。

      与您当前将 json 文本值分配到单个表单数据变量的方法相比,该变量被编码并作为 ContentType: application/x-www-form-urlencoded 发送。

      基本上,在 jQuery 中你想要做的是:

      $.ajax({
        type: 'POST',
        url: url,
        data: json,
        success: success,
        dataType: "json"
      });
      

      【讨论】:

        【解决方案3】:

        你可以试试

        /group/list-id=1&limit=500/group/list-id=12&min-score=5/list-id=16&min-score=5/group/list-id=2
        

        【讨论】:

        • 这当然是假设默认的 min_score 为 0,limit 为 -1,并且这是实际处理程序路径之后的路径部分。
        • 哇,我想我从来没有见过这样格式化的 URL 参数。这是一个有趣的概念,我会考虑的。谢谢。
        • 答案不包含选择这种特定格式的理由。
        【解决方案4】:

        我更喜欢查看 XML 和 JSON 格式的内容,以下是我的建议:

        <?xml version="1.0"?>
        <groups>
          <group>
            <rank>1</rank>
            <lists>
              <list>
                <id>1234</id>
                <minScore>0</minScore>
                <limit>500</limit>
              </list>
            </lists>
          </group>
          <group>
            <rank>2</rank>
            <lists>
              <list>
                <id>12345</id>
                <minScore>5</minScore>
                <limit>-1</limit>
              </list>
              <list>
                <id>123456</id>
                <minScore>5</minScore>
                <limit>-1</limit>
              </list>
            </lists>
          </group>
          <group>
            <rank>3</rank>
            <lists>
              <list>
                <id>123456</id>
                <minScore>50</minScore>
                <limit>567</limit>
              </list>
            </lists>
          </group>
        </groups>
        

        【讨论】:

        • 我知道这对于将数据传递给其他客户端来说是一种很好的格式,但是 XML 不能很好地用作 POST 参数,因为我会再次将整个结构编码为单个字符串并将其作为单个参数值发布。
        • 我不是建议你使用 xml。我使用过许多 API,它们以 xml 或 json 格式提供数据。我更容易提供一个使用 XML 而不是 JSON 的示例。本质上,我建议您有一组组,每个组都有排名信息并包含一个列表数组,其中包含一组或多组列表数据。
        猜你喜欢
        • 2017-05-31
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2015-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多