我对我应该允许将参数传递给我编程的RESTful API的最佳方法有一些疑问。
E.g。我想检索有关用户的信息:使用方法GET的API调用将是:/api/users/
是否应将ID传递到网址/api/users/5
或实际GET数据/api/users/?id=5
从我自己阅读并得出的结论来看,我倾向于选择一个(通过url中的参数),因为它看起来更直观,更干净。
然而,对于更复杂的查询来说,这个选项会很困难。示例:按年龄或上次登录日期获取用户甚至嵌套查询(获取用户5的所有帖子)。对于这些用例,将数据作为请求参数传递会更加方便,因为它们包含可以轻松识别的键值对(/api/users/?age=20
)
我对你的意见感兴趣:
这是更好的方式去哪里,为什么?
如果您更喜欢选项2:如何理想地构建参数?
答案 0 :(得分:2)
两者都适用
GET /api/users/5
返回ID为5的用户。
GET /api/users/?age=20
返回年龄为20岁的用户组。
GET /api/posts/?user_id=5
按用户5返回帖子组。
通常,ID是一种特殊情况,因为它标识了资源。您不会通过ID搜索用户 - 您只需获得所需的用户。
答案 1 :(得分:0)
请记住,对于REST,整个URI(包括查询字符串)是资源的原子标识符。没有更好或更糟的,只要URI始终标识相同的资源并且由服务提供,而不是由客户端构建。
从这个意义上说,/api/users/5
并不比/api/users?id=5
更多或更少RESTful,但它们指的是不同的东西。当您考虑URI语义时,使用参数查询资源集合,/api/users/5
标识单个用户资源,而/api/users?id=5
标识由id过滤的用户集合,其中包含单个元素结果。< / p>