Restful设计支持bulkcreate吗?
我有一个api让用户添加一本书Restful设计支持bulkcreate吗?,rest,restful-architecture,Rest,Restful Architecture,我有一个api让用户添加一本书http://127.0.0.1/book 如果用户希望一次创建100本书怎么办 我找到了一些讨论 LiorH说: Although bulk operations (e.g. batch create) are essential in many systems, they are not formally addressed by the RESTful architecture style. 这是一个宁静的设计建议吗 我喜欢一次发布一个项目 但我的搭档希
http://127.0.0.1/book
如果用户希望一次创建100本书怎么办 我找到了一些讨论
LiorH
说:
Although bulk operations (e.g. batch create) are essential in many systems,
they are not formally addressed by the RESTful architecture style.
这是一个宁静的设计建议吗
我喜欢一次发布一个项目但我的搭档希望一次创建所有内容
我认为,如果其中一些格式有效,而另一些格式无效,那么一次创建全部将出现问题
我想确保REST讨论的是交换您关心的事物的表示。如果您关心书籍集,那么为其创建一个表示,并允许客户端发布它们 这些服务中最棘手的部分总是响应,因为通常的模式是在
POST
ing一个资源之后,您的响应是或重定向到新创建的资源的URI
但是,没有什么能阻止您使用URI列表进行响应,这意味着POST
ing一组书籍的结果就是一组已创建的资源
然而,这里有一个很大的警告,那就是失败语义。如果只创作了一些书,会发生什么?有没有可能只有一些书被创建,然后客户必须处理这些?这就是事情变得相当棘手的地方,这就是为什么很多人试图避免这样做的原因。从根本上说,它没有什么问题,但它使API变得复杂了很多,性能提升可能比人们想象的要小
你为什么不能一次创作一本书呢?我建议让API尽可能简单,除非你有令人信服的理由让它变得更复杂。REST讨论了交换你关心的事物的表示。如果您关心书籍集,那么为其创建一个表示,并允许客户端发布它们 这些服务中最棘手的部分总是响应,因为通常的模式是在
POST
ing一个资源之后,您的响应是或重定向到新创建的资源的URI
但是,没有什么能阻止您使用URI列表进行响应,这意味着POST
ing一组书籍的结果就是一组已创建的资源
然而,这里有一个很大的警告,那就是失败语义。如果只创作了一些书,会发生什么?有没有可能只有一些书被创建,然后客户必须处理这些?这就是事情变得相当棘手的地方,这就是为什么很多人试图避免这样做的原因。从根本上说,它没有什么问题,但它使API变得复杂了很多,性能提升可能比人们想象的要小
你为什么不能一次创作一本书呢?我建议让API尽可能简单,除非你有令人信服的理由让它更复杂。我喜欢文章中描述的方法。我将根据您的背景总结主要观点。尽管如此,我还是建议阅读全文:
要求
通常,使用POST
方法将单个元素添加到集合中。因此,我们可以有一个资源,它可以为其方法同时接受单个元素和元素集合。根据输入有效负载,处理检测是否必须进行单个或批量添加
事实上,在资源路径(如/books/bulk
)中使用操作名称的另一个资源并不是真正的RESTful,因此这不是正确的方法
创建单个元素时,我们可以有如下内容:
POST /books
Content-Type: application/json
{
"title": "The Lord of the Rings - The Fellowship of the Ring",
"author": "J. R. R. Tolkien",
(...)
}
以及在批量操作的情况下:
POST /books
Content-Type: application/json
[
{
"title": "The Lord of the Rings - The Fellowship of the Ring",
"author": "J. R. R. Tolkien",
(...)
},
{
"title": "The Lord of the Rings - The Two Towers",
"author": "J. R. R. Tolkien",
(...)
},
(...)
]
回应
创建单个元素时,响应非常简单,通常包含两个内容:
- 状态代码
(已创建)201
- 标题
包含新创建元素的URL位置
位置
标题接受一个值,可以在响应中定义一次。
也就是说,由于POST
方法的语义取决于RESTful服务设计器,因此我们可以利用头链接
来提供此提示,如下所述:
201 Created
Link: <http://example.com/api/book/{id}>, <http://example.com/api/book/{id}>
在插入错误的情况下:
500 Internal Server Error
Content-type: application/json
[
{
"index": 1,
"messages": [
"The book can't be added because of the error #22 (description)"
]
},
(...)
]
对于非事务处理,响应的状态代码将始终为200
,如果有错误,将在响应负载中描述,如下所示:
200 OK
Content-type: application/json
[
{
"index": 1,
"status": "error",
"messages": [
"The book can't be added because of the error #22 (description)"
]
},
{
"index": 2,
"status": "success",
"auto-generated-id": "43"
},
(...)
]
正如文章中所描述的那样,我喜欢这家公司的做法。我将根据您的背景总结主要观点。尽管如此,我还是建议阅读全文:
要求
通常,使用POST
方法将单个元素添加到集合中。因此,我们可以有一个资源,它可以为其方法同时接受单个元素和元素集合。根据输入有效负载,处理检测是否必须进行单个或批量添加
事实上,在资源路径(如/books/bulk
)中使用操作名称的另一个资源并不是真正的RESTful,因此这不是正确的方法
创建单个元素时,我们可以有如下内容:
POST /books
Content-Type: application/json
{
"title": "The Lord of the Rings - The Fellowship of the Ring",
"author": "J. R. R. Tolkien",
(...)
}
以及在批量操作的情况下:
POST /books
Content-Type: application/json
[
{
"title": "The Lord of the Rings - The Fellowship of the Ring",
"author": "J. R. R. Tolkien",
(...)
},
{
"title": "The Lord of the Rings - The Two Towers",
"author": "J. R. R. Tolkien",
(...)
},
(...)
]
回应
创建单个元素时,响应非常简单,通常包含两个内容:
- 状态代码
(已创建)201
- 标题
包含新创建元素的URL位置
位置
标题接受一个值,可以在响应中定义一次。
也就是说,由于POST
方法的语义取决于RESTful服务设计器,因此我们可以利用头链接
来提供此提示,如下所述:
201 Created
Link: <http://example.com/api/book/{id}>, <http://example.com/api/book/{id}>
在插入错误的情况下:
500 Internal Server Error
Content-type: application/json
[
{
"index": 1,
"messages": [
"The book can't be added because of the error #22 (description)"
]
},
(...)
]
对于非事务处理,状态代码为o