我在网络服务中拥有RESTful API,其中包含某些资源,如用户,帖子等。当我提出帖子列表(GET /帖子)的请求时,我想要检索每个帖子(即主题,作者姓名)的减少部分数据的帖子数组。当我提出具体帖子的请求(GET / posts / 42)时,我想检索帖子对象字段的完整列表,包括大帖子体,关于喜欢计数,评论计数的其他信息。 我想存在很多解决这个问题的方法。在我看来,最明显的3个是:
我为客户构建清晰实用的API。我应该选择哪种方式?
答案 0 :(得分:28)
我会选择2恕我直言。
因此,如果消费者只是请求资源网址(/posts/42
),则会收到默认字段。
然后,消费者可以通过在查询字符串中定义值来改变默认响应,如:
/posts/42/fields?subject,author_name
这在过去对我来说效果很好,并且是其他一些众所周知的API如何工作,例如Facebook
编辑:回过头来看,我将请求更改为:
/posts/42?fields=subject,author_name
/post/42
是资源,而不是字段。
答案 1 :(得分:8)
也一直在研究这个问题,并指出Facebook的GraphQL作为一个替代方案,可以通过所需字段请求一个安静的api。它仍处于早期阶段,但看起来很有希望。
https://facebook.github.io/react/blog/2015/05/01/graphql-introduction.html
编辑: 从网址转载:
GraphQL查询是由服务器解释的字符串,它返回指定格式的数据。以下是一个示例查询:
{
user(id: 3500401) {
id,
name,
isViewerFriend,
profilePicture(size: 50) {
uri,
width,
height
}
}
}
(注意:此语法与之前的GraphQL示例略有不同。我们最近一直在改进语言。)
以下是对该查询的回复。
{
"user" : {
"id": 3500401,
"name": "Jing Chen",
"isViewerFriend": true,
"profilePicture": {
"uri": "http://someurl.cdn/pic.jpg",
"width": 50,
"height": 50
}
}
}