我正在使用一个宁静的api,并且需要更新资源(即具有10个字段的客户详细记录)。
在“添加”请求中,我发送了具有完整记录的“发布”请求。 在更新请求中,我发送了一个包含10个字段的完整记录的PUT请求。 在验证请求中,我发送的PUT请求只有两个字段,即recordId和versionNo。 在删除请求时,我发送一个带有HttpOptions中两个字段的DELETE请求。
我有几个问题:
尽管它是一个宁静的api,但将由角度应用程序使用,但它是特定的应用程序,所以我应该返回数据以响应POST / PUT请求。
如果要进行验证(或其他仅将recordId和versionNo发送到服务器以更改某些字段的操作),还是应该使用PUT。
为了保持一致,我应该在删除请求的正文中发送数据,因为我需要recordId和versionNo来删除记录。
答案 0 :(得分:1)
RESTful API 必须始终使用HTTP代码回答客户端请求:
成功和错误响应是定义如何正确使用API的重要组成部分。
请参阅this指南以解决您所有与RESTful相关的问题。
来自Wikipedia:
PUT和PATCH方法之间的主要区别在于,PUT方法使用请求URI提供所请求资源的修改版本,以替换资源的原始版本,而PATCH方法提供一组指令来修改资源。资源。如果PATCH文档大于通过PUT方法发送的资源的新版本的大小,则首选PUT方法。
也:
当只需要对资源进行少量更改时,与PATCH方法相比,使用PUT方法会消耗更多带宽。但是,使用PATCH方法时,通常涉及从服务器获取资源,比较原始文件和新文件,创建并发送差异文件。在服务器端,服务器必须读取diff文件并进行修改。与PUT方法相比,这涉及很多开销。[11]另一方面,PUT方法要求在PUT之前执行GET,并且很难确保在GET和PUT请求之间不修改资源。
所以我将使用 PATCH 来验证资源。
通常,对于 Delete 请求,客户端会指定资源的id
并将其作为路径变量传递给URL:
curl -X DELETE http://example.com/resource/{id}
但是您也可以根据请求传递正文。 MDN Mozilla Web DOCS指出了这种可能性:
请求包含正文-可能
成功的回应有可能-五月
答案 1 :(得分:1)
如果要进行验证,我应该使用PATCH(或其他任何操作, recordId和versionNo发送到服务器以更改某些字段)或 可以使用PUT。
在RESTful API设计中,PUT请求通常用于添加或替换整个资源,而PATCH应该仅用于更新现有资源。一个PUT请求被称为“幂等”-无论您发送多少次PUT响应,您都应该获得相同的结果。修补程序不是幂等的。
示例:
PATCH / Cars / vauxhall-astra / engine->此请求将仅用于更新我现有的vauxhall astra的引擎
PUT / Cars / renault-clio->此请求将创建一个新的Renault Clio,或者如果已经存在,则使用我的请求中指定的数据替换整个Clio。这样一来,无论我之前是否存在Clio,都可以保证它存在。
尽管它是一个宁静的api,但将由角度应用程序使用,但它是特定的应用程序,所以我应该返回数据以响应POST / PUT请求。
完全由您决定,从POST / PUT返回数据就可以了-尤其是如果它省去了您必须进行额外的GET api请求的时间,尤其如此。只需确保您只从响应中返回所需的数据即可。
为了保持一致,我应该在删除请求的正文中发送数据,因为我需要recordId和versionNo来删除记录。
这完全取决于您。无论您使用查询参数(例如DELETE cars?id = 123)还是请求正文都只是您的偏好,REST中没有任何规则可用于此。
答案 2 :(得分:0)
即使其他人已经在我之前详细回答了这个问题,但我仍然在发布此信息只是为了在所有这些HTTP方法之间提供一个方便的简短区别
1.HTTP Post:用于创建项目
2.HTTP Put:用于更新项目
3.HTTP修补程序:用于部分更新项目
4.HTTP Delete:用于删除项目