RFC 6902明确地定义了很多东西。除了两个相关的事情:
- 如何修补连接到资源的表?
- 当连接有多行时?
例如。
GET /news/123
[
{"title": "Hello", "contents": "World", "categories": [1, 2, 3]}
]
结果来自这些数据库表和列:
title = news.title
contents = news.contents
categories = newscategories_mapping WHERE newscategories_mapping.newsID = news.id
所以,如果我发送一个补丁:
PATCH /news/123
[
{"op": "replace", "path": "/title", "value": "New Title"}
]
这非常简单。但是当我想更新同一资源的类别时呢?IE。“加入”表。
PATCH /news/123
[
{"op": "replace", "path": "/categories", "value": [4, 5]}
]
另外,请注意两件事:
- 不包括任何现有值。
- 金额小于原始值(2 个值而不是 3 个)
假设补丁之前的原始值在newscategories_mapping.id
20、21 和 22 中。
问题1:新/categories
值是否应该4
替换id=20,值5
替换id=21?还是应该删除 id=20, id=21 和 id=22 并且新值得到新的 ID id=23 和 id=24?
问题 2:即使没有明确要求,是否应该删除 id=22 ?
问题 3:或者根本不应该执行上述操作,而是应该有一个单独的端点来修补每个类别?所以,例如。PATCH /news/123/categories/20
和PATCH /news/123/categories/21
?