api - 在 REST API 设计中以多种方式处理集合项
问题描述
我们的 API 设计中有一个资源集合,可以通过多种方式解决。例如说这些是书。
姓名 | 国际标准书号 | ISSN | 颜色 |
---|---|---|---|
富 | 1 | 2 | 蓝色的 |
酒吧 | 4 | 5 | 黑色的 |
巴兹 | 7 | 8 | 棕色的 |
这些书籍可以通过 ISBN、ISSN 进行唯一寻址,并且名称和颜色也是非唯一索引。我们如何建模一个 REST API,允许对可以以多种方式指定的书籍集合/项目进行 PATCH 操作?
例如,我们可能希望客户以下列任何一种方式来称呼账簿
- 按书名
- 按书籍颜色
- 按书 ISBN
- 按书名和颜色
如何在不创建多个端点的情况下做到这一点?
解决方案
我会区分标识符和过滤器。ISBN 和 ISSN 是标识符,因为它们是唯一的。所有非唯一的东西都是过滤器。标识符应该有自己的端点。这就是 ReST URL 的作用:唯一标识资源。
/books/isbn/{id}
/books/issn/{id}
这两本书都保证会返回一本关于成功的书。剩余的字段可以组合成第三个端点。
/books?name=foo&color=blue&author=you
这个返回一个集合。
在 PATCHing 方面,所有这三个都可以调用相同的服务方法来做到这一点。第三个端点将迭代其结果以重复调用 PATCHing 逻辑。
这确实意味着如果您添加主键,端点的数量会增加。我认为这仍然是 ReSTful。
推荐阅读
- jquery - Jquery在点击事件后显示输入文本字段
- jquery - Three.js 通过 dat.gui 组合框防止 Raycast
- java - How to convert List
> into Flux - >?
- sql-server - 不同的“SELECT”语句基于值 SQL Server
- cpu-architecture - 在 MESI 缓存一致性协议中,如果需要从内存中获取数据,缓存行的状态究竟何时发生变化?
- java - 是否可以创建一个文件来存储所有 Javadoc 信息?
- node.js - npm run 指向不同的 .env 文件
- gmail - gmail watch 一段时间后没有得到更改
- android - 如何在 API 级别的 CheckBox/RadioButton 之前添加填充
- c# - 如何将 IStream(C++) 转换为 System::IO::Stream(c#),反之亦然