REST api资源依赖性

时间:2014-10-27 16:36:21

标签: php rest symfony

我有这个IP地址的数据管理面板,属于组织并且由用户负责。

现在我有路由/api/ip/api/ip/{id}来获取所有或特定的IP。一种资源的格式为:

{
    "ip": "200.0.0.0",
    "mask": 32,
    "broadcast": "200.0.0.1"
}

现在,当我选择IP时,我想在一个页面中显示IP信息,以及它所属的组织信息和负责它的用户信息。

在需要/api/ip/{id}时,返回以下数据格式是个好主意:

{
    "ip": "200.0.0.0",
    "mask": 32,
    "broadcast": "200.0.0.1",
    "organization": { /* organization data */ },
    "users": { /* users information */ }
}

这样我可以在一个请求中获得所需的所有信息,但它仍然是RESTful API吗?

或者我应该制作另外两条api路线,例如/api/ip/{id}/organization/api/ip/{id}/users 并在3个单独的请求中获取我需要的所有数据?

如果没有,那么这样做的适当方法是什么?

2 个答案:

答案 0 :(得分:0)

我会使用Hateoas做最后一个,它允许您在资源之间进行链接。有一个非常好的捆绑称为BazingaHateoasBundle。结果将是:

/api/ip/127.0.0.1

{
    "ip": "200.0.0.0",
    "mask": 32,
    "broadcast": "200.0.0.1",
    "_links": {
        "organization": "/api/ip/127.0.0.1/organization",
        "users": "/api/ip/127.0.0.1/users"
    }
}

答案 1 :(得分:0)

拥有嵌套资源是完全可以的。您可以按照显示的方式展开它们,也可以通过添加链接(使用正确的链接关系或RDF元数据)来折叠它们。我建议您使用标准或至少记录的超媒体类型,例如JSON-LD + Hydra,或HAL + JSON。