以 RESTful 的方式思考,使用 POST 在单个调用中创建资源及其子资源是否正确?
在我的应用程序中,我有资源 /notices/{notice}
和子资源/notices/{notice}/photos/{photo}
. A {photo}
没有 {notice}
就不能存在,但是一个 {notice}
不一定有照片。通常,我必须先进行 POST 以创建通知,然后再进行 POST 以添加照片。
现在我想允许创建带有直接附加照片的通知,从而创建 /notices/{notice}
和 /notices/{notice}/photos/{photo}
使用对/notices/{notice}/photos/{photo} 的单个 POST 请求,以及描述两种资源的多部分内容(JSON 表示通知,二进制表示照片)。我想我只会为子资源返回 Location header 。
本质上,我希望这可以防止 Android 客户端向服务器发送两个 POST 请求以上传带有照片的通知。
这样对吗?或者它是否违反了 REST 原则?我应该考虑将它们分开并提出两个不同的要求吗?或者将照片视为与通知分开的实体是否错误?我应该只保留 /notices/{notice}
作为资源,使用 PUT 添加照片?
哪个是最好的解决方案?
最佳答案
是的,在创建父资源的同时创建子资源没有任何问题。甚至可以使用 PUT
而不是 POST
这样做,因为父 URL 下的所有内容都属于/属于您正在上传的资源。
编辑:
Now I want to allow the creation of a notice with a photo directly attached, enabling the creation of
/notices/{notice}
and/notices/{notice}/photos/{photo}
with a singlePOST
request to/notices/{notice}/photos/{photo}
这个我不同意。我建议发布到集合资源的 URL,
/notices
.您将通知及其照片作为单一表示(请求正文)提供。然后后端将为通知和任何组成照片创建资源。
关于REST - 使用单个 POST 创建嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275257/