【发布时间】:2015-08-20 10:28:29
【问题描述】:
我正在尝试确定一种 RESTful 方式来随意包含和排除特定请求的子资源。
例如,这可能是原始请求:
获取部门/321
200 (Ok)
{
"id": "321",
"name": "Sales",
"building": "The Foundary"
"subdepartments": [
{
"id": "123",
"name": "Training"
},
{
"id": "224",
"name": "Book Sales"
}
...
]
}
可能有很多子部门。 GET departments 资源也将包括每个部门和每个部门的子部门。大量数据。
这可以通过创建两个单独的资源来解决:
获取部门/321
200 (Ok)
{
"id": "3",
"name": "Sales",
"building": "The Foundary"
}
获取部门/321/子部门
200 (Ok)
[
{
"id": "123",
"name": "Training"
},
{
"id": "224",
"name": "Book Sales"
}
...
]
但在某些情况下,客户端软件可能不希望发出多个请求(很可能出于性能考虑)。也许通过提供include 过滤器:
获取部门/321?include=subdepartments
200 (Ok)
{
"id": "321",
"name": "Sales",
"building": "The Foundary"
"subdepartments": [
{
"id": "123",
"name": "Training"
},
{
"id": "224",
"name": "Book Sales"
}
...
]
}
或排除过滤器:
获取部门/321?exclude=subdepartments
200 (Ok)
{
"id": "321",
"name": "Sales",
"building": "The Foundary"
}
虽然我们可能需要包含指向子资源的链接(如果它被排除在外)?
获取部门/321?exclude=subdepartments
200 (Ok)
{
"id": "321",
"name": "Sales",
"building": "The Foundary"
"subdepartments": {
"href" : "api.com/departments/321/subresources"
}
}
是否有可接受的 RESTful 方式来执行上述(包括或排除子资源)?
【问题讨论】:
-
你的提议在我看来不错。我认为 RESTful 不应该用得太严格。如果你的世界不适合 REST,那么 REST 应该被弯曲——而不是世界。
标签: rest asp.net-web-api2 asp.net-web-api restful-architecture