我有这个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个单独的请求中获取我需要的所有数据?
如果没有,那么这样做的适当方法是什么?
答案 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。