REST架构表示资源状态也应该获取URL。
我正在制作一个包含大量查询的小应用程序。我想为每个查询生成URL,但查询通常大于URL字符限制。我尝试使用URL缩短器,但我的URL对于他们来说太大了。
网上有很多人建议使用POST,但这不是幂等的。我真的不想限制我的查询长度,URL应该能够识别无限量的资源。
是否有一种RESTful方法来处理不涉及POST请求的非常大的URL?
答案 0 :(得分:3)
要以RESFtul方式对此进行建模,请将查询视为资源。它们可以被创建,检索并最终删除。
客户端向POST
资源发出queries
个请求,其中包含请求正文中的查询详细信息。
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
或者服务器可以在一段时间后自动删除查询。
答案 1 :(得分:0)
如果您确定查询长度仍然小于8 KB(这是大多数Web服务器获取查询长度的限制),请继续使用GET请求。 此外,如果你对缓存不感兴趣,请使用post,如果你很清楚后果,忽略REST就没有错。