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


RESTful API architecture conventions: How should parameters be passed

我有一些关于允许参数传递给我编程的RESTful API的最佳方式的问题。

例如,我想检索关于用户的信息:方法为GET的API调用将为:/api/users/
id应该在url /api/users/5中传递还是作为实际的GET数据/api/users/?id=5 传递

根据我所读到的内容和我自己的结论,我倾向于选择选项一(在url中传递参数),因为它看起来更直观,也非常干净。

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

我对你的意见很感兴趣:
去这里哪种方式更好?为什么
如果您更喜欢选项2:参数的结构应该如何?

两者都适用

CCD_ 5返回ID为5的用户。CCD_ 6返回年龄为20岁的用户组。CCD_ 7返回用户5的帖子组。

通常,ID是一种特殊情况,因为它标识资源。你不会通过ID来搜索用户——你只会得到你想要的用户。

请记住,对于REST,包括查询字符串在内的整个URI是资源的原子标识符。只要URI总是标识相同的资源,并且是由服务提供的,而不是由客户端构建的,就没有什么好或坏的了。

从这个意义上说,/api/users/5并不比/api/users?id=5更RESTful,但它们指的是不同的东西。当您考虑URI语义时,使用用于查询资源集合的参数,/api/users/5标识单个用户资源,而/api/users?id=5标识具有单个元素结果的按id过滤的用户集合。