REST - 使用单个 POST 创建嵌套资源

标签 rest restful-url

以 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 single POST request to /notices/{notice}/photos/{photo}



这个我不同意。我建议发布到集合资源的 URL,/notices .您将通知及其照片作为单一表示(请求正文)提供。然后后端将为通知和任何组成照片创建资源。

关于REST - 使用单个 POST 创建嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275257/

相关文章:

Java Spring Boot 使用剩余 api 映射到模型

rest - REST-API V2返回没有详细信息的服务器错误

c# - 在 WCF Rest 中捕获 WebFaultException 的详细信息

转换、计算的RESTful设计

database - RESTful URI 是否应该公开数据库主键?

angularjs - AngularJS 和 PHP 的服务器不同?

javascript - 为什么 xmlHttpRequest.Open 仅在我输入字符串时才起作用?

Neo4j:使用 RESTful 调用获取图中的所有节点

http - 嵌套模型的类似于 Restful 的 CRUD 操作 url 模式

rest - 名称或 ID 作为 restful api 的 url