让我们在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:1
和type:agent
之间的分隔符应该用作什么?
根据https://www.ietf.org/rfc/rfc3986.txt,我认为不允许使用分号。
答案 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
通常可以做出这样一个优雅的决定,该决定不仅可以解决问题,而且可以以某种方式记录您的数据模型,从而使人们可以通过一对多关系轻松看到用户属于客户。