关于 RESTful 风格接口一些小疑问

发布于 2022-09-07 22:42:40 字数 1081 浏览 26 评论 0

写接口时候参考了restful风格,阮一峰 RESTful API 设计指南
有如下例子

GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

但实际应用上,并没有这么简单,比如有接口:

列出所有所有动物:path/zoos/all/animals/all 还是 /animals,
按接口目的来看,我只关心动物 /animals好像更合适,但与 /zoos/ID/animals 功能有重合,后台要维护两个路由

列出有大熊猫动物园:path 怎么写,

列出所有海洋动物园所有动物:path 怎么写,

实际接口中筛选条件通常会很多,而且并不会像 国>省>市>区>路这样一级一级地缩小范围,

这种情况下,传统方式写接口似乎就非常简单,

getZoos?city=广州&anamal_type=大熊猫
getZoos?zoo_type=海洋馆
getAnimals?anamal_type=海洋生物

接口初期,功能简单,用restful非常优雅,但是功能复杂起来了,觉得好像不太适用,而且接口版本也没达到经升级的程度,就会有两种写法并存,好尴尬!

你们是怎么做的!

有没有功能复杂一点的restful例子?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦行七里 2022-09-14 22:42:40

你也没必要非要在 /zoos/ID/animals/ID 这样写啊
不能有动词 不代表不让你用 参数啊
也可以用一些参数进行过滤

POST /getZoos  
POST /saveZoos 
POST /removeZoos
get /zoos  
POST /zoos 
DELETE /zoos

例如,从账户1向账户2汇款500元 下面这样写肯定不行

POST /accounts/1/transfer/500/to/2

可以这样

POST /transaction
  from=1&to=2&amount=500.00
旧街凉风 2022-09-14 22:42:40

我会这么设计

列出所有所有动物:/zoos/animals
列出有大熊猫动物园:/zoos?animal=panda
列出所有海洋动物园所有动物:/zoos/animals?zootype=sea

列出没有大熊猫动物园:/zoos?animal=!panda
列出有大熊猫和老虎的动物园:/zoos?animal=panda,tiger
列出有大熊猫或老虎的动物园:/zoos?animal=panda|tiger
列出没有大熊猫但是有老虎的动物园:/zoos?animal=!panda,tiger

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文