我正在构建一个API,其中大多数端点接受并返回多个资源。我在确定是否使用POST或PUT请求时遇到问题。
在我的情况下,始终使用标识符的UUID在API之外创建和标识资源。由于资源已经存在并且已经被识别,因此PUT请求似乎是合适的。但是,在URI中包含每个资源的UUID是不切实际的(UUID很长,单个请求中可能有很多资源)。
POST请求似乎也是合适的,因为即使资源已经使用ID标识,它仍然不存在于我们的数据库中。此外,对于POST请求,不期望在URI中具有ID。
在这种情况下使用哪个正确的HTTP动词?
PUT /resources/1,2,3 ---> Impractical due to the number of resources per request
PUT /resources ---------> More practical but lacks IDs in the URI
POST /resources ---------> Possibly inaccurate verb since resource is already identified
答案 0 :(得分:4)
我认为你的三个选择是:
使用PUT /resources/1
,然后PUT /resources/2
,然后PUT /resources 3
。这是“按设计”的方法。它确实会导致3次调用而不是1次,但是您可以利用PUT
的优势。
使用POST /resources
,POST
的正文包含上传到服务器的所有资源的所有详细信息,包括ID。服务器可以从正文中的id创建资源。您失去了PUT
的好处,但节省了有线流量。
使用PATCH /resources
,PATCH
的正文包含要创建的资源的所有详细信息。这真的只有在你使用JSON时才有效,因为XML的补丁语义充其量是最好的。语义在RFC 6902。
通常不建议对多个ID执行请求。如果你打电话给PUT /resources
,从语义上讲,你说你正在用你刚发送的身体替换/resources
的内容,这不是你想要的。
我会建议第一种方法,除非你有充分的理由避免它(测试并有性能问题)。在这种情况下,我会认真考虑PATCH
而不是POST
。