RESTful端点太长可以吗?

时间:2019-04-08 01:20:26

标签: rest spring-boot design-patterns controller restful-url

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

问题是Project包含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

我想知道由于URL太长了,我是否对RESTful协议进行了错误的设计。

使用查询参数代替路径变量是否更好?
任何建议将不胜感激。

+另一个想法

我正在考虑进行更改以使其更短,这是我的主意。
由于每个结果只有一个父对象,因此我只想给出一个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协议?哪个更好的主意?

1 个答案:

答案 0 :(得分:0)

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

如果级别是Project的属性,则您可能要使用查询参数。您必须澄清什么级别以及您到底想达到什么目的。