可以使用太长的RESTful端点吗?

问题描述 投票:0回答:1

我的服务有3种模型类,分别是UserProjectSimulation

问题是Projects由6个级别组成。

User> Proejct(lv1)> Project(lv2)> Project(lv3)> Project(lv4)> Project(lv5)> Project(lv6)> Simulation

我根据层次结构制作了一个RESTful端点URL, 最后的结果看起来像这样。

http://MY_SERVER.com/rest/project/team-members/{userId}/divisions/{divisionId}/products/{productId}/bgatypes/{bgaTypeId}/devices/{deviceId}/ballcounts/{ballCountId}/pkgsizes/{pkgSizeId}/simulations

我想知道我是否在做RESTful协议的错误设计,因为URL变得太长了。

使用查询参数而不是路径变量更好吗? 任何建议都会感激不尽。

+另一个想法

我想改变以缩短它,这是我的想法。 由于每个结果只有一个父项,我想查询它们只给出一个参数parentId,所以它看起来像这样。

http://MY_SERVER.com/rest/project/team-members
http://MY_SERVER.com/rest/project/divisions?userId=user1
http://MY_SERVER.com/rest/project/products?divisionId=division32
http://MY_SERVER.com/rest/project/bgatypes?productId=product402
http://MY_SERVER.com/rest/project/devices?bgaTypeId=bgatype777
http://MY_SERVER.com/rest/project/ballcounts?deviceId=device139
http://MY_SERVER.com/rest/project/pkgsizes?ballCountId=ballcount587
http://MY_SERVER.com/rest/project/simulations?pkgSizeId=pkgsize591

这是针对RESTful协议吗?哪个更好主意?

rest spring-boot design-patterns controller restful-url
1个回答
0
投票

这取决于你的项目中levels的意思。在REST中,每个资源(例如数据库表的模型,entity)应该是路径变量。这将被定义为/resource/{resourceId}。如果你有一个子资源,比如UserProject,那么你就有/user/{userId}/project/{projectId}

如果级别是Project的属性,那么您可能希望使用查询参数。你必须澄清更多关于什么级别以及你正在努力实现的目标。

© www.soinside.com 2019 - 2024. All rights reserved.