在 REST API 设计中以多种方式处理集合项

Addressing collection items in multiple ways in REST API design

我们的 API 设计中有一个资源集合,可以通过多种方式解决。例如说这些是书。

姓名 ISBN ISSN 颜色
1 2 蓝色
酒吧 4 5 黑色
巴兹 7 8 棕色

书籍可以通过 ISBN、ISSN 进行唯一寻址,名称和颜色也是非唯一索引。我们如何建模一个 REST API 允许对可以多种方式指定的书籍 collection/items 进行 PATCH 操作?

例如,我们可能希望客户通过以下任何一种方式给图书添加地址

  1. 按书名
  2. 按书籍颜色
  3. 按图书 ISBN
  4. 按书名和颜色

如何在不创建多个端点的情况下执行此操作?

我会区分标识符和过滤器。 ISBN 和 ISSN 是标识符,因为它们是唯一的。一切非唯一的都是过滤器。标识符应有自己的端点。这就是 ReST URL 的作用:唯一标识资源。

/books/isbn/{id}
/books/issn/{id}

这两本书都保证 return 一本成功的书。其余字段可以组合成第三个端点。

/books?name=foo&color=blue&author=you

这个 return 是一个集合。

就 PATCHing 而言,所有这三个都可以调用相同的服务方法来完成。第三个端点将迭代其结果以重复调用 PATCHing 逻辑。

这确实意味着如果添加主键,端点数量会增加。我觉得还是ReSTful.