【问题标题】:How to pass a very long array of objects within a query string?如何在查询字符串中传递很长的对象数组?
【发布时间】:2017-11-03 06:54:21
【问题描述】:

有一个带有一些资源的 RESTful API。我需要 GET 一些带有参数的资源,这些参数在 JSON 表示中如下所示:

{
  "id": int,
  "params":
  [
    {
      "param1": "string",
      "param2": "string"
    },
    {
      "param1": "string",
      "param2": "string"
    }
  ]
}

我有两种可能的方式在查询字符串中发送这个对象:

  • id=1&params[0].param1=test&params[0].param2=test&params[1].param1=test&params[1].param2=test
  • id=10000&params[0][param1]=test&params[0][param2]=test&params[1][param1]=test&params[1][param2]=test

问题是params数组可以有很多项,查询字符串可能很长,超过2000个字符。

通过 GET 在请求正文中发送参数是个坏主意。

如何以适当的 RESTful 方式发送此类参数?我可以使用其他 HTTP 方法吗?或者只是更改服务器上的查询长度?

【问题讨论】:

    标签: rest url get restful-architecture restful-url


    【解决方案1】:

    使用 POST 方法获取一些数据,因为参数对于 GET 方法来说太长了ISN'T是个坏主意。

    您可以在 JSON 中的请求正文中添加搜索选项,例如

    {
      "id": int,
      "params":
      [
        {
          "param1": "string",
          "param2": "string"
        },
        {
          "param1": "string",
          "param2": "string"
        }
      ]
    }
    

    【讨论】:

    • 我知道我可以在正文中发送参数。但是将它们添加到 GET 动词是一个坏主意stackoverflow.com/questions/978061/http-get-with-request-body。 POST 是用来创建资源的,所以我想知道用它来获取信息是否是 RESTful 的。
    • POST 主要(而非严格)用于创建资源。如果你想绝对使用 GET 方法,标题可以是一个解决方案,但不比 POST 解决方案更合适。
    • 能否请您发送一些链接来确认您的声明?我读过SO discussionHTTP specificationW3 article。你知道,从技术上讲,我可能使用 POST。我只想找到确认它是好的,但找不到这样的信息。这就是我在这里问的原因:)
    【解决方案2】:

    如果您想要一个幂等请求 URI(即响应始终相同),则使用 GET,否则使用 POST。

    更多详情可以在这里找到答案s:- Why should I POST data rather than GET?

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 1970-01-01
      • 2014-04-11
      • 2016-02-23
      • 2017-10-31
      • 2021-02-04
      • 1970-01-01
      • 2020-11-23
      相关资源
      最近更新 更多