我认为您可以使用POST或PATCH方法来处理此问题,因为它们通常是为此设计的。
我认为,在这种情况下,POST
并且PATCH
是非常相似的,因为你并不真的需要介绍操作的每个元素做。我要说的是,这取决于要发送的表示形式。
的情况PUT
不太清楚。实际上,使用方法时PUT
,应提供整个列表。实际上,请求中提供的表示将代替列表资源。
关于资源路径,您可以有两个选择。
在这种情况下,您需要在请求中提供的表示形式中明确提供文档链接和活页夹。
这是为此的示例路线/docs
。
这种方法的内容可能是针对以下方法POST
:
[
{ "doc_number": 1, "binder": 4, (other fields in the case of creation) },
{ "doc_number": 2, "binder": 4, (other fields in the case of creation) },
{ "doc_number": 3, "binder": 5, (other fields in the case of creation) },
(...)
]
另外,您还可以考虑利用子路由来描述文档和活页夹之间的链接。现在无需在请求内容中指定有关文档和活页夹之间关联的提示。
这是为此的示例路线/binder/{binderId}/docs
。在这种情况下,发送带有方法的文档列表,POST
或者在创建文档后将PATCH
文档附加到具有标识符的资料夹(binderId
如果不存在)。
这种方法的内容可能是针对以下方法POST
:
[
{ "doc_number": 1, (other fields in the case of creation) },
{ "doc_number": 2, (other fields in the case of creation) },
{ "doc_number": 3, (other fields in the case of creation) },
(...)
]
关于响应,由您决定响应的级别和返回的错误。我看到两个级别:状态级别(全局级别)和有效负载级别(更薄的级别)。您还可以定义与您的请求相对应的所有插入/更新是否必须是原子的。
在这种情况下,您可以利用HTTP状态。如果一切顺利,您将获得一个状态200
。如果不是,400
则为其他状态,例如提供的数据不正确(例如,绑定器ID无效)或其他状态。
在这种情况下,200
将返回状态,并由响应表示来描述已完成的操作以及错误最终在何处发生。ElasticSearch在其REST API中具有一个端点,用于批量更新。这可以为您提供一些有关此级别的想法:http : //www.elasticsearch.org/guide/en/elasticsearch/guide/current/bulk.html。
您还可以实现异步处理来处理提供的数据。在这种情况下,HTTP状态返回将为202
。客户端需要提取其他资源以查看会发生什么。
在结束之前,我还想注意到OData规范通过名为Navigation links的功能解决了有关实体之间关系的问题。也许你可以看看这个;-)
以下链接也可以为您提供帮助:https : //templth.wordpress.com/2014/12/15/designing-a-web-api/。
希望对您有帮助,蒂埃里
GET /docs
并检索特定活页夹中的所有文档GET /docs?binder_id=x
。要删除的资源的一个子集我会打电话DELETE /docs?binder_id=x
或者我应该叫DELETE /docs
一个{"binder_id": x}
请求体?您是否会使用PATCH /docs?binder_id=x
批量更新或正PATCH /docs
对通过?