daf*_*tal 3 rest http http-put
我正在设计REST API,我想知道处理资源更新的推荐方法是什么.更具体地说,我将允许通过PUT资源进行更新,但我应该在PUT请求正文中允许什么?
例如,获取资源http://example.org/api/v1/dogs/packs/p1.GET此资源上的A 将提供以下内容:
Request:
GET http://example.org/api/v1/dogs/packs/p1
Accept: application/xml
Response:
<pack>
<owner>David</owner>
<dogs>
<dog>
<name>Woofer</name>
<breed>Basset Hound</breed>
</dog>
<dog>
<name>Mr. Bones</name>
<breed>Basset Hound</breed>
</dog>
</dogs>
</pack>
Run Code Online (Sandbox Code Playgroud)
假设我想要添加一只狗(Sniffers the Basset Hound),我会支持:
Request:
PUT http://example.org/api/v1/dogs/packs/p1
<dog>
<name>Sniffers</name>
<breed>Basset Hound</breed>
</dog>
Response:
HTTP/1.1 200 OK
Run Code Online (Sandbox Code Playgroud)
要么
Request:
PUT http://example.org/api/v1/dogs/packs/p1
<pack>
<owner>David</owner>
<dogs>
<dog>
<name>Woofer</name>
<breed>Basset Hound</breed>
</dog>
<dog>
<name>Mr. Bones</name>
<breed>Basset Hound</breed>
</dog>
<dog>
<name>Sniffers</name>
<breed>Basset Hound</breed>
</dog>
</dogs>
</pack>
Response:
HTTP/1.1 200 OK
Run Code Online (Sandbox Code Playgroud)
或两者?如果建议通过结构的子部分支持更新,我将如何处理删除(例如狗死亡时)?通过查询参数?
是的,始终发送资源的完整表示.否则,你会(根据普通定义和PUT的用法)用这只狗替换包装.
但是,您可能需要考虑以下事项:
<dog id="1">到包.请记住,REST要求您正确识别资源.包不是真正的狗的下属资源,每只狗应该有某种独特的标识符.然后,当访问/ packs/p1/1234时,您可能想要重定向到/ dogs/1234.或者,您也可以不提供该URL,尽管接受将下级资源POST到相应的包.
我越是想到它,POST方法就越有意义.也许你甚至可以为所有狗提供/ pack/p1/dogs/resource,与包装分开.然后,您可以将所有者信息等内容输入/ pack/p1,通过/ packs/p1/dogs /获取所有狗的列表(其中应包含每个狗的URL列表,例如/ packs/p1/dogs/1234,见HATEOAS),通过POST到/ packs/p1/dogs /添加一只新狗,并通过DELETEing/packs/p1/dogs/1235删除一只狗.每只狗都可以是完整的代表,甚至可能是重定向到/ dogs/1234等,或者在这个背包中的狗的不同表现形式,但是再次带有"完整"狗的链接.取决于你要如何表示在一包有一只狗,当然这也将影响到什么,你居然POST到/包/ P1 /狗/.满狗感觉不对,应该只是我上面显示的ID,可能还有关于与包的关系的其他数据.
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |