在 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 操作?
例如,我们可能希望客户通过以下任何一种方式给图书添加地址
- 按书名
- 按书籍颜色
- 按图书 ISBN
- 按书名和颜色
如何在不创建多个端点的情况下执行此操作?
我会区分标识符和过滤器。 ISBN 和 ISSN 是标识符,因为它们是唯一的。一切非唯一的都是过滤器。标识符应有自己的端点。这就是 ReST URL 的作用:唯一标识资源。
/books/isbn/{id}
/books/issn/{id}
这两本书都保证 return 一本成功的书。其余字段可以组合成第三个端点。
/books?name=foo&color=blue&author=you
这个 return 是一个集合。
就 PATCHing 而言,所有这三个都可以调用相同的服务方法来完成。第三个端点将迭代其结果以重复调用 PATCHing 逻辑。
这确实意味着如果添加主键,端点数量会增加。我觉得还是ReSTful.
我们的 API 设计中有一个资源集合,可以通过多种方式解决。例如说这些是书。
姓名 | ISBN | ISSN | 颜色 |
---|---|---|---|
富 | 1 | 2 | 蓝色 |
酒吧 | 4 | 5 | 黑色 |
巴兹 | 7 | 8 | 棕色 |
书籍可以通过 ISBN、ISSN 进行唯一寻址,名称和颜色也是非唯一索引。我们如何建模一个 REST API 允许对可以多种方式指定的书籍 collection/items 进行 PATCH 操作?
例如,我们可能希望客户通过以下任何一种方式给图书添加地址
- 按书名
- 按书籍颜色
- 按图书 ISBN
- 按书名和颜色
如何在不创建多个端点的情况下执行此操作?
我会区分标识符和过滤器。 ISBN 和 ISSN 是标识符,因为它们是唯一的。一切非唯一的都是过滤器。标识符应有自己的端点。这就是 ReST URL 的作用:唯一标识资源。
/books/isbn/{id}
/books/issn/{id}
这两本书都保证 return 一本成功的书。其余字段可以组合成第三个端点。
/books?name=foo&color=blue&author=you
这个 return 是一个集合。
就 PATCHing 而言,所有这三个都可以调用相同的服务方法来完成。第三个端点将迭代其结果以重复调用 PATCHing 逻辑。
这确实意味着如果添加主键,端点数量会增加。我觉得还是ReSTful.