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/