我和朋友讨论RESTful API,他问为什么它为集合和项目(/dogs
和/dogs/1234
)使用两个基本URL而不是像其他所有查询参数一样的单个URL( /dogs
和/dogs?id=1234
)。
经过进一步的讨论,我意识到我无法提出一个不是基于美学原因的论证(意味着URL看起来更像/ dogs / 1234而不是/ dogs?id = 1234)。
您可以有一个基本URL来处理资源的集合和单个项目,并且看起来很奇怪,有一个特殊情况,您使用非查询参数(/ 1234而不是?id = 1234)引用资源。
这引出了我的问题,是否有一个特定的,非审慎的理由为资源使用两个基本URL而不是RESTful API中的一个?
答案 0 :(得分:1)
URI设计只是REST API中非常小的一部分,尽管你会认为只要花费大量时间来讨论它,它就是REST-ful的唯一内容。身份验证,内容类型,响应代码,方法类型(GET,POST,PUT,DELETE,OPTIONS),发现能力和缓存策略都是需要考虑的重要事项。
但是,在考虑查询字符串是否合适时,首先要确定它们是否能够准确地表示资源的状态而不进行更改。可以使用该URI(可能总是)在该位置识别相同的资源(您的狗)吗?那条狗会以某种方式改变,因为你选择了一个带ID的查询字符串,而不是代表路径中的ID吗?不,它不会,这就是为什么在这种情况下查询字符串就好了。事实上,其中任何一个都可以。