无状态RESTFUL API的GET或POST

时间:2019-07-12 12:18:56

标签: rest api http django-rest-framework

我正在编写无状态API。您发送给它,它处理该文档,然后返回处理后的文档。我正在努力了解RESTFUL规则如何应用。我不是在服务器上检索数据,创建数据或更新数据。服务器上没有数据。在这种情况下,我需要使用什么作为http方法?为什么?

3 个答案:

答案 0 :(得分:2)

好消息-你是对的,这很令人困惑。

服务器上的任何内容都不会响应请求。这表明请求为safe。因此,GET是这里的自然选择...但是-GET不支持消息有效载荷

  

GET请求消息中的有效负载没有定义的语义;在GET请求上发送有效内容正文可能会导致某些现有实现拒绝该请求。

HEAD,另一种普遍使用的安全方法,也存在相同的问题(并且无论如何在任何情况下都不适合返回文档)。

此时要做的直接的事情就是使用POST。重要的是要意识到POST不会保证请求是不安全的,只是不能保证它是安全的-通用组件不会知道请求是安全的,因此赢得了不能利用它。

另一种可能性是浏览method registry,以查看是否有人已经指定了具有所需语义的方法。候选者包括来自WebDAV规范的SEARCH和REPORT。我对这些规范的理解是,它们实际上没有适合您情况的语义。

答案 1 :(得分:1)

很多方法可以做您想要的。但这是一个小指导。

  1. 我将创建一个接收文档的端点: / receive_document 使用“ POST”方法。由于您是将文档“发送”到服务器

  2. 我将创建一个用于处理已处理文档的端点: / processed_document 使用“ GET”方法。既然要从服务器检索/查看文档?

答案 2 :(得分:1)

您要解决的问题主要与文档大小以及返回响应之前的处理时间有关。

从理论上讲,为了使用一种轻松的方法,您需要一个终结点,例如yourhost.com/api/document-manager(可以是php脚本,也可以用作后端)。

好的,因此您不必更改每种操作类型的终结点名称,只需更改HTTP方法即可,我将尝试举一个例子:

POST:用于上传文档,上传完成后返回200 OK。

GET:返回已处理的文档,如果文档尚未准备好,或者如果尚未上载,则返回不同的HTTP代码。 204在文档不可用的情况下,没有内容或412失败的先决条件是很好的选择。我不确定412,好像在请求中传递标头时返回了它,它告诉服务器要返回哪个资源。对于您的情况,我认为用户可以一次处理一个文档。但是要制作更可靠的api,也许您可​​以将一个ID令牌返回给用户,并返回到POST响应中,然后将该令牌转发给GET请求,这样服务器就可以准确知道用户正在请求哪个文件。 / p>

PUT:更新已通过POST创建的资源时,应使用此方法

DELETE:删除资源,然后返回204或404

选项:响应包含此端点上允许的方法。您可以使用它来了解例如当前资源上已登录用户的特权。

HEAD:与GET调用相同,但不应返回响应主体。这是您知道何时处理文档的另一种不错的选择。您可以使用POST上传,然后完成上传,使用HEAD方法开始对相同端点的某种轮询,最后当它返回“ found”时,轮询将停止,并进行最后的GET调用,这将开始下载已处理的文档。

HTTP方法是一种管理HTTP通信的简洁方法,如果使用得当的话,其他开发者很容易理解。而且不要忘记,您不必为端点发明很多不同的名称,一个就足够了。

希望这对您有所帮助...但是网上有很多指南。 再见!

相关问题