我目前在设计api时面临以下情况,我很好奇什么是最好的选择。我们的路线有多个层次,例如:
GET group/:id
GET group/type/这里的问题发生在某人在例如group/type上执行GET请求时,../type被作为id来处理。如果考虑到GET on组/仅指单个组,这确实是有意义的。然后,类型的正确路由将是组/:id/ type。
但是,一个组可以有多个类型,我们需要一个简单地查询所有组类型的路径。实现这一点的restful方式是什么?应该做一个获取/grouptypes路由或者一些讨厌的正则表达式来测试/group/gibberish是子路由还是 id?我不想要一些实现解决方案的讨厌的方法,我只是问如果我们设计一个restful,什么是最好的设计选择。
我将此标记为Express.js问题,因为我们确实在快递中实现了这个api。不过,我认为上述行为正是在这类架构下的路由机制所期望的。
发布于 2020-06-25 11:58:05
我假设您的路由代码类似于这个示例,或者非常类似于:
...
router.get('/group/:id', middleware, controller, ...);
router.get('/group/type', middleware, controller, ...);
...所以你唯一需要做的就是互相交换这些行:
...
router.get('/group/type', middleware, controller, ...);
router.get('/group/:id', middleware, controller, ...);
...原因是速递公司在注册路线之间使用第一条匹配路线。考虑到这个事实,我们很容易理解,因为对/group/type路由的请求匹配这两个方案-第一个注册将被使用。
从REST的角度来看,,拥有/group/:id来获取特定组的信息是完全好的。另外,有一些特定的路由,比如/group/total或/group/stats,或者其他什么来获取与所有组相关的一般数据也是完全可以的。我不知道您的/group/type路由的实际功能是什么,但是如果它是用于获取所有组类型的统计数据的端点,那就好了。
https://stackoverflow.com/questions/62574670
复制相似问题