rest - RESTful 端点过长可以吗?
问题描述
我的服务有 3 种模型类,它们是User
, Project
, Simulation
.
问题是Project
s 由 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 协议?哪个更好?
解决方案
这取决于您levels
在项目中的意思。在 REST 中,每个资源(例如数据库表的模型,一个entity
)应该是一个路径变量。这将被定义为/resource/{resourceId}
。如果你有一个子资源,比如 aUser
有 a Project
,那么你就会有/user/{userId}/project/{projectId}
.
如果级别是 a 的属性Project
,那么您可能需要使用查询参数。您必须更多地阐明什么级别以及您到底想要完成什么。
推荐阅读
- react-native - 如何在函数中使用 Redux 状态?
- java - JAVA GRPC 服务器端流不断增加 max-inbound-message-size
- android - firebase a/b 实验中的用户数量少
- javascript - 用 Tampermonkey 在每一页上连续替换一个单词
- c - 导入时对 POSIX 函数的未定义引用
- ruby - 安装 ruby-2.3.3 后无法安装 gems - openssl
- java - 为什么即使没有步骤过滤器,在eclipse中使用“step into”时也不显示对构造函数的调用
- ssl - 为什么 Artifactory 的 SSL 配置不起作用?
- batch-file - 使用 Inkscape 从批处理文件转换 Svg 到 png 许多文件
- c - c中的数组管理