宁静的资源关联



我是RESTful的新手,我正在尝试开发一个尽可能灵活的API但我对资源关联有点困惑。

根据许多教程,常见的 RESTful 资源关联如下所示:

/dogs
/dogs/{id}
/owners/{owid}/dogs

但是,诸如以下的关联呢:

/owners/{owid}/dogs/{id}

它是相关的还是无用的(因为 id 应该是唯一的,所以不需要指定所有者)?

改为进行以下设置。

/dogs
/dogs/{dogid}
/people
/people/{personid}
GET /people/7
{
    "dogs": [
        "/dogs/3",
        "/dogs/5"
    ]
}
GET /dogs/3
{
    "owners": [
        "/people/7",
        "/people/2"
    ]
}

请注意,这不再将您与"每只狗只有一个主人"和"每个人都拥有狗"(由于在您的原始设计中被称为"主人")的概念联系起来。

通常,将 URI 嵌套为文件夹结构是一种不好的做法。它会把你与你可能不想要的永久概念关系联系起来。

当狗在主人的范围内具有标识符时,例如主人为他的狗使用的昵称,这是相关的。

但是您也可以将 a/全局标识符用于{id},并在执行此特定路径时具有优势,服务器将确保此特定狗实际上由{owid}拥有。

在任何情况下,具有指向同一资源的多个路径并不违反 REST 规则。最好在响应中返回单个规范 URL。

我发现 http://blog.2partsmagic.com/restful-uri-design/很好的RESTful设计。

最新更新