具有请求正文

时间:2016-12-07 14:08:32

标签: rest api http endpoint httpverbs

我们正在公开一个返回大数据集的端点。有一个后台进程,每小时运行一次并生成数据。每次运行后数据都会有所不同。

请求者可以要求提供完整的数据集或子集。子集是通过一组参数确定的,但参数太长而不适合最大长度为2,083个字符的uri。 https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=uri%20max%20length

参数可以很容易地在请求体中发送,但哪个是正确的HTTP动词?

GET 将是理想的,但使用正文对GET请求没有语义含义' HTTP GET with request body

PUT 不合适,因为没有ID,也没有更新或替换数据。

POST 是不合适的,因为没有替换新资源,更重要的是服务器没有生成和Id。 http://www.restapitutorial.com/lessons/httpmethods.html

GET(阅读)似乎是最合适的,但我们如何才能包含复杂的参数集来确定响应?

非常感谢

约翰

3 个答案:

答案 0 :(得分:1)

POST是正确的方法。 POST应该用于任何未通过HTTP标准化的操作,这是您的情况,因为没有标准用于使用正文的GET操作。您链接的引用只是直接将HTTP方法映射到CRUD,这是一种REST反模式。

答案 1 :(得分:0)

你是对的,应避免与身体GET。您可以尝试其他采用请求体的安全方法(例如REPORT或SEARCH),或者您确实可以使用POST。我认为没有理由说后者是错的;你引用的只是一个意见,而不是规范。

答案 2 :(得分:0)

假设针对该大数据集的查询不是完全随机的,您应该考虑将存储的查询添加到您的API。这样,客户端可以使用POST DELETE PUT添加,删除,更新查询(通过请求正文)。也许你可以称它们为“报告”。

这种GET请求只需要一个引用作为这些查询/报告的查询参数,您不必每次请求都发送所有详细信息。

但是,只有来自客户的所有请求都不是唯一的。