首页 > 解决方案 > 在 REST API 设计中以多种方式处理集合项

问题描述

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

姓名 国际标准书号 ISSN 颜色
1 2 蓝色的
酒吧 4 5 黑色的
巴兹 7 8 棕色的

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

例如,我们可能希望客户以下列任何一种方式来称呼账簿

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

如何在不创建多个端点的情况下做到这一点?

标签: apiresthttpdesign-patternspatch

解决方案


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

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

这两本书都保证会返回一本关于成功的书。剩余的字段可以组合成第三个端点。

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

这个返回一个集合。

在 PATCHing 方面,所有这三个都可以调用相同的服务方法来做到这一点。第三个端点将迭代其结果以重复调用 PATCHing 逻辑。

这确实意味着如果您添加主键,端点的数量会增加。我认为这仍然是 ReSTful。


推荐阅读