在WebAPI响应中嵌入其他API资源

时间:2015-09-09 01:51:03

标签: c# asp.net-web-api2 asp.net-web-api

在我目前的WebAPI设计中,我计划允许客户端(API使用者)选择应包含哪些链接资源。

我的方案是:

GET /api/member/1

返回:

{
    "memberId": 1,
    "headshot": {
        "href": "http://localhost/api/member/1/photo/1",
        "id": 1
    },
    "photos": {
        "href": "http://localhost/api/member/1/photo"
    }
    ... more ...
}

因此默认响应包含指向所需资源的“链接”。在这种情况下,爆头通常是经常需要的常见字段,并且听起来很复杂,必须分别请求爆头细节。

我想做的是:

GET /api/member/1?embedded=headshot

返回:

{
    "memberId": 1,
    "headshot": {
        "href": "http://localhost/api/member/1/photo/1",
        "id": 1,
        "large": "http://localhost/images/large/1.jpg",
        "thumb": "http://localhost/images/thumb/2.jpg",
        ... more ...
    },
    "photos": {
        "href": "http://localhost/api/member/1/photo"
    }
    ... more ...
}

问题:

WebAPI 2.2中最好/推荐的方法是操纵响应以“添加”“嵌入”资源所需的其他字段。

这种方法有哪些重大缺陷?

1 个答案:

答案 0 :(得分:0)

这是API实现者非常常见的性能改进,通常称为侧面加载。我猜你还没有按照特定的" json api"标准,但你可以从http://jsonapi.org等方面获得灵感。

作为API使用者,我不会惊讶于能够使用查询参数指定要包含的相关资源。