RESTful API体系结构约定:如何传递参数

时间:2013-08-31 00:20:24

标签: php api rest

我对我应该允许将参数传递给我编程的RESTful API的最佳方法有一些疑问。

E.g。我想检索有关用户的信息:使用方法GET的API调用将是:/api/users/
是否应将ID传递到网址/api/users/5或实际GET数据/api/users/?id=5

从我自己阅读并得出的结论来看,我倾向于选择一个(通过url中的参数),因为它看起来更直观,更干净。

然而,对于更复杂的查询来说,这个选项会很困难。示例:按年龄或上次登录日期获取用户甚至嵌套查询(获取用户5的所有帖子)。对于这些用例,将数据作为请求参数传递会更加方便,因为它们包含可以轻松识别的键值对(/api/users/?age=20

我对你的意见感兴趣:
这是更好的方式去哪里,为什么? 如果您更喜欢选项2:如何理想地构建参数?

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>