我们在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,我认为不允许使用分号。
我不建议尝试创建一个通过多个密钥同时访问记录的通用结构,而是建议尝试在更多情况下考虑这个问题。
举个例子,解释它的一种方法是你有多个客户,每个客户可能有多个用户帐户。对此的自然层次结构将是:
/customer/x/user/y
通常可以做出这样的优雅决策,不仅可以解决问题,还可以通过一对多的关系轻松地看到用户属于客户的方式记录您的数据模型。
你应该:
使用参数:GET http://api/v1/user/users?customer=1
或者使用新的URL:GET http://api/v1/user/users/customer/1
但是使用像this这样的标准
(“路径倾向于缓存,参数往往不是,作为一般规则。”)