我们的REST接口的一个要求是每个资源都可以通过唯一字段标识(除了主要标识符)。原因是我们希望能够处理批量导入数据 - 在这种情况下,客户端无法知道系统生成的主要标识符。
这意味着我们必须能够通过唯一字段引用我们的资源。使用主键我们的读取请求如下所示:
GET example.com/rest/customers/1
并获取与该客户相关的订单
GET example.com/rest/customers/1/orders
现在,假设客户中的两个字段唯一地标识它,名称(“foo”)和businessId(“bar”)。鉴于此,我想出了以下URI来获取该客户的订单:
GET example.com/someotherpath/customers/foo,bar/orders
但我不喜欢我有不同的路径来确定这是通过唯一字段访问的资源。您将如何使用唯一字段而不是主键以RESTful方式构造上述查询?
此外,订单如下:
{
<SNIP>
"orderId" : "42"
"_links": {
"customer": {
"href" : "rest/customers/1"
"key": [ "foo", "bar" ]
}
},
}
在与界面通信时允许客户端互换地指定href OR 键的任何问题?
答案 0 :(得分:1)
对于第一位,我不会这样做。如果客户具有唯一ID(并且他们应该),我将不允许最终用户指定碰巧也唯一标识客户的N个其他字段。这对用户来说是混乱的(哪个领域先行?)并且在后端对你来说也很麻烦。
对于第二位,问题是:当他们指定两者时会发生什么?哪个优先?他们会记得吗?你想要支持两者吗?如果你能逃脱它,通常只允许一种方式去做任何特定的事情。