rest - 如何使用长 URL 实现 RESTful?

标签 rest url get

REST 架构表示资源状态也应该获取 URL。

我正在制作一个带有非常大查询的小型应用程序。我想为每个查询生成 URL,但查询通常大于 URL 字符限制。我尝试使用 URL 缩短器,但即使对于它们来说,我的 URL 也太大了。

网上很多人建议使用POST,但这不是幂等的。我真的不想限制我的查询长度,URL 应该能够识别无限量的资源。

是否有一种 RESTful 方法可以解决不涉及 POST 请求的非常大的 URL?

最佳答案

要以RESFtul 方式对此进行建模,请将查询视为资源。它们可以被创建、检索并最终删除。

客户端向 queries 资源发出 POST 请求,并在请求正文中包含查询详细信息。

POST /queries
Content-Type: application/json

{
  "condition1":
  {
    "on": "field1",
    "comparison": "equals",
    "value": 42
  },
  "condition2":
  {
    "on": "field2",
    "comparison": "like",
    "value": "foo%"
  }
}

这将创建一个新的查询资源。服务器将响应:

201 Created
Location: /queries/D560EC80-1006-11E5-80F6-75919330F945

路径段D560EC80-1006-11E5-80F6-75919330F945将是服务器为此特定查询生成的ID。

然后客户端请求此查询资源的状态。

GET /queries/D560EC80-1006-11E5-80F6-75919330F945

服务器返回查询结果。

200 OK
Content-Type: application/json

{
  "id": "D560EC80-1006-11E5-80F6-75919330F945",
  "querydetails":
  {
    "condition1":
    {
      "on": "field1",
      "comparison": "equals",
      "value": 42
    },
    "condition2":
    {
      "on": "field2",
      "comparison": "like",
      "value": "foo%"
    }
  },
  "result":
  {
    "length": 12,
    "results":
    [
      {
        // details about the first hit
      },
      // more hits
    ]
  }
}

稍后,客户端可以删除该查询。

DELETE /queries/D560EC80-1006-11E5-80F6-75919330F945

或者服务器可以在一段时间后自动删除查询。

关于rest - 如何使用长 URL 实现 RESTful?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30767665/

相关文章:

java - 轻松生成休息服务的解决方案?

html - 背景图像存在但不可见

url - Grails-重定向后隐藏URL参数

c++ - std::istream::获得效率

php - 如何将 GET 和 POST 数据传递给 php 可执行文件?

c# - 如何将多个请求 DTO 映射到单个路由

Java JSON - 覆盖 @JsonIgnore 进行测试

azure - 如何在响应中将两个变量合并为一个?

php - 使用正则表达式在 PHP 中匹配 URL 模式

json - Angular Http Get 不要在启动时设置值