在REST API中,有哪些用于发送和立即检索响应数据的方法。
在REST API中,有哪些用于发送和立即检索响应数据的方法。
我正试图为我们的一个客户构建一个小型的REST API,他希望有这样一种API。这是我第一次研究这个主题。
我们的大多数服务都需要很长时间来完全处理客户订单。为此,客户可以通过POST xml数据来创建资源,并通过GET相应的资源来检索结果(大部分时间是后来)。这是相当简单明了的。
现在,我们想创建另一个服务,这个服务通常几乎立即评估结果,而我真的不知道如何按照最佳实践来实现它。
由于请求可以立即处理,我想避免使用两个请求来创建和检索资源。这似乎是不必要和繁琐的。
另一方面,针对这个问题似乎不存在一个单一的适用的HTTP请求方法,因为POST请求不应该返回除响应码以外的任何东西,而GET请求应该独立于其主体(尽管现在似乎可以在GET请求中发送主体数据,但这似乎是不良实践,不应该影响响应。换句话说,服务器只能使用包含在URL中的信息)。
此外,我不能将数据作为查询参数发送到GET-URL中,因为数据包含非常敏感的信息 - 在我的国家,我们对这个问题有非常严格的法律规定,我学会了非常小心。
对于实现这种响应式工具,最佳实践是什么?
也许REST API本来就是个错误的选择吗?
谢谢。
问题的出现原因是:在进行POST请求时,通常只会返回一个响应码,而不会返回任何响应数据。然而,对于创建新资源的POST请求,应该返回HTTP 201状态码,并包含一个指向新资源URL的Location头部。此外,POST响应可以包含创建的对象的表示形式。因此,POST方法是解决这个问题的关键。
解决方法是:使用POST方法创建新资源,并在响应中返回新创建对象的表示形式。如果服务在创建后需要修改对象,可以根据实际情况处理。如果修改时间非常短暂,可以等待对象被修改后再返回可使用的对象。否则,可以返回具有不完整字段的对象。这两种方法都是符合RESTful规范的。
关于资源的创建,可以返回一个GET请求的URL,可以是相对URL或绝对URL。在.NET Core中,可以使用以下模式来处理POST方法:
var uri = Url.Link("GetDocumentById", new { id = result.Id }); return Created(uri, result);
以上是解决这个问题的方法,如果对你有帮助,请将其标记为已接受的答案。