我在处理系统的 REST API 时提出了以下映射,用户可以在该系统中创建和管理不同类型的资源。
// READ OPERATIONS
GET /objects => read collection meta
GET /objects/[id] => read single element
GET /objects/?[query] => read a number of elements
GET /objects/?all => read all elements
// CREATE / UPDATE OPERATIONS
PUT /objects => possibly create the collection and update its meta
PUT /objects/[id] => possibly create and update a single element
PUT /objects/?all => update the entire content of the collection
POST /objects => create new objects or update existing objects
PATCH /objects => partially update the collection meta
PATCH /objects/[id] => partially update a single element
PATCH /objects/?all => partially update all the elements
PATCH /objects/?[query] => partially update a number of elements
// DELETE OPERATIONS
DELETE /objects => delete the collection
DELETE /objects/[id] => delete a single element
DELETE /objects/?all => empty the collection
DELETE /objects/?[query] => delete a number of elements
以下是有关系统的更多信息:
- 每个资源可以是简单的资源,也可以是类似集合的资源;
- 每个资源,不管是否是集合,都有自己的属性需要访问和操作;
- API 必须支持批量(不是批处理)操作。
我还研究了以下替代方案:
- 用于
/collection
访问集合的元素集并/collection?meta
访问集合自己的数据; - 使用全新的资源来访问集合自己的数据,例如
/collections/path/to/collection
.
我不喜欢替代 n。1)因为在我看来,它在语义上很差。相比之下,当我提到一个盒子时,我实际上指的是盒子本身,而不是它的内容。
我不喜欢替代 n。2) 因为一个资源最终将自己的数据暴露给另一个资源,复制 url 并使“我应该使用哪个 url”的问题不像我希望的那样微不足道。
因此,我的问题:
- 我为 REST API 提出的映射是否有效、正确?是否尊重 REST 原则?我不是在问它是否是最好的映射。我在问它的有效性。
- 如果不是,哪一种替代方案更好,为什么?
请原谅我的英语,我不是该语言的母语人士。