win*_*ngy 17 rest web-services http web
在我的API服务器中,我定义了此路由:
POST /categories
要创建一个类别,您可以:
POST /categories {"name": "Books"}
我想如果你想创建多个类别,那么你可以这样做:
POST /categories [{"name": "Books"}, {"name": "Games"}]
我只是想确认这是Restful HTTP API的一个好习惯.
或者应该有一个
POST /bulk
允许他们一次做任何操作(创建,阅读,更新和删除)?
Jus*_*ony 21
在真正的REST中,您可能应该在多个单独的调用中POST它.原因是每一个都会产生新的表示.你怎么能期望得到这个呢?
每个帖子都应返回结果资源位置:
POST -> New Resource Location
POST -> New Resource Location
...
但是,如果您需要批量,则创建批量.尽可能保持教条,但如果没有,实用主义就能完成工作.如果你太依赖教条主义,那么你永远不会做任何事情.
这是一个建议使用HTTP Pipelining来提高效率的方法
Don*_*ows 12
有一个批量操作,你POST,激活(它是非幂等的,所以POST是正确的动词)没有什么特别的错误,但有一些警告:
您正在制作多个资源,因此您需要使用多个网址进行回复.这意味着您无法使用重定向模式:您必须以某种形式发回URL列表.
您有一个问题,即批量操作通常不是很容易被发现.可发现性是RESTfulness最重要的事情之一,因为它意味着有人可以在没有服务器作者的大量帮助的情况下找到如何编写客户端.
在进行批量操作时处理部分故障仍然存在问题.这也是任何其他范例的问题(当我使用SOAP的扩展时,我看到人们把它们绑在一起)所以这并不奇怪,但除非你能保证所有的创作都能奏效,否则你就是必须弄清楚当你制作一个资源而不能制作第二个资源时会发生什么.(另外,如果批量请求需要完成第三个请求,您会继续尝试吗?)
最简单的方法是每个请求支持一个创建; 这是一个更容易实现的模式,并且可以更好地理解.
用POST一次创建多个资源没有错(只是不要用PUT尝试)。它不是“ un-REST-ful”,特别是如果您为批量操作本身创建表示形式。建议您在创建单个资源的同时创建索引资源,并为其返回“ 303 See Other”。然后,该索引表示将包含指向所有已创建资源的链接(如果其中任何一个失败,则可能包含错误信息)。
POST /categories/uploads/
[{"name": "Books"}, {"name": "Games"}]
    303 See Other
    Location: /categories/uploads/321/
(实际上,考虑到这一点,201可能比303更好)
GET /categories/uploads/321/
    200 OK
    Content-Type: application/json
    [{"name": "Books", "link": "/categories/Books/"},
     {"name": "Games", "error": "The 'Games' category already exists."}]
| 归档时间: | 
 | 
| 查看次数: | 16460 次 | 
| 最近记录: |