使用唯一字段引用资源的RESTFul方式

使用唯一字段引用资源的RESTFul方式,rest,restful-url,hypermedia,Rest,Restful Url,Hypermedia,REST接口的一个要求是,每个资源都可以通过唯一的字段(除了主标识符之外)进行标识。这样做的原因是,我们希望能够处理批量导入数据——在这种情况下,客户端无法知道系统生成的主标识符 这意味着我们必须能够通过独特的字段引用我们的资源。使用主键,我们的读取请求如下所示: GET example.com/rest/customers/1 { <SNIP> "orderId" : "42" "_links": { "customer": {

REST接口的一个要求是,每个资源都可以通过唯一的字段(除了主标识符之外)进行标识。这样做的原因是,我们希望能够处理批量导入数据——在这种情况下,客户端无法知道系统生成的主标识符

这意味着我们必须能够通过独特的字段引用我们的资源。使用主键,我们的读取请求如下所示:

GET example.com/rest/customers/1
{
    <SNIP>
    "orderId" : "42"
    "_links": {
        "customer": {
            "href" : "rest/customers/1"
            "key": [ "foo", "bar" ]
        }
    },
}
并获得与该客户相关的订单

GET example.com/rest/customers/1/orders
现在,让我们假设customer中的两个字段唯一地标识它,name(“foo”)和businessId(“bar”)。有鉴于此,我提出了以下URI来获取该客户的订单:

GET example.com/someotherpath/customers/foo,bar/orders
但我不喜欢我有一个不同的路径来标识这是一个通过唯一字段访问的资源。如何使用唯一字段而不是主键以RESTful方式构造上述查询

此外,订单如下所示:

GET example.com/rest/customers/1
{
    <SNIP>
    "orderId" : "42"
    "_links": {
        "customer": {
            "href" : "rest/customers/1"
            "key": [ "foo", "bar" ]
        }
    },
}
{
“订单ID”:“42”
“_链接”:{
“客户”:{
“href”:“rest/customers/1”
“键”:[“foo”,“bar”]
}
},
}

允许客户端在与接口通信时交替指定href键有任何问题吗?

对于第一位,我不会这样做。如果一个客户有一个唯一的id(他们应该这样做),我不会允许最终用户指定N个碰巧也唯一标识该客户的其他字段。这对用户来说很麻烦(哪个字段先到?),对后端的用户来说也很麻烦


对于第二位,问题是:当它们同时指定两者时会发生什么?哪个优先?他们会记得吗?你想两者都支持吗?一般来说,如果你能侥幸逃脱,最好只允许一种方法来做任何特定的事情。

仅供参考,接口的RESTfull与访问资源表示的路径无关。多条路径指向同一资源是完全可以接受的。