如何使用长URL进行RESTful?
REST架构表示资源状态也应该获得一个URL。
我正在制作一个非常大的查询的小应用程序。 我想为每个查询生成URL,但查询通常大于URL字符限制。 我尝试使用URL缩写,但即使对他们来说,我的URL也太大了。
网上有很多人建议使用POST,但这不是幂等的。 我真的不想限制我的查询长度,URL应该能够识别无限量的资源。
是否有一种REST风格的方式来解决非常大的URL不涉及POST请求?
要以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
或者服务器可以在一段时间后自动删除查询。
卢茨霍恩已经很好地回答了它。 但客户端可能不希望进行三种API调用 - 一种是创建查询响应,另一种是获取它,第三种是删除它。
如果您确定查询长度将保持小于8 KB(这是大多数Web服务器获取查询长度的限制),请继续使用GET请求。 此外,如果您对缓存不感兴趣,请使用post,如果您很清楚后果,那么偶尔忽略REST没有任何问题。
链接地址: http://www.djcxy.com/p/42171.html