带有复合键的GET请求的良好URL语法

时间:2019-02-18 12:28:24

标签: rest url

让我们在REST API中获取以下资源:

GET `http://api/v1/user/users/{id}`

通常情况下,我会这样使用:

GET `http://api/v1/user/users/aabc`

aabc是用户ID。

但是,有时候我不得不设计REST API的方式是将一些额外的信息与ID一起传递。例如:

GET `http://api/v1/user/users/customer:1`

customer:1表示我正在使用客户域中的ID查找用户,该ID为1。

我现在遇到的情况是标识符是多个密钥(复合密钥)。例如:

GET `http://api/v1/user/users/customer:1;type:agent`

我的问题:在上面的URL中,customer:1type:agent之间的分隔符应该用作什么?

根据https://www.ietf.org/rfc/rfc3986.txt,我认为不允许使用分号。

2 个答案:

答案 0 :(得分:1)

您应该:

使用参数: GET http://api/v1/user/users?customer=1

或使用新的URL: GET http://api/v1/user/users/customer/1

但是使用this之类的标准

(“一般情况下,路径倾向于被缓存,而参数往往不被缓存。”)

答案 1 :(得分:0)

我建议不要尝试创建一次通过多个键一次访问记录的通用结构,而是建议视情况而定。

以您的示例为例,一种解释方法是您有多个客户,而每个客户可能都有多个用户帐户。一个自然的层次结构是:

/customer/x/user/y

通常可以做出这样一个优雅的决定,该决定不仅可以解决问题,而且可以以某种方式记录您的数据模型,从而使人们可以通过一对多关系轻松看到用户属于客户。