在RESTful API请求中指定资源字段列表的方法

时间:2013-08-14 15:12:59

标签: api rest restful-architecture

我在网络服务中拥有RESTful API,其中包含某些资源,如用户,帖子等。当我提出帖子列表(GET /帖子)的请求时,我想要检索每个帖子(即主题,作者姓名)的减少部分数据的帖子数组。当我提出具体帖子的请求(GET / posts / 42)时,我想检索帖子对象字段的完整列表,包括大帖子体,关于喜欢计数,评论计数的其他信息。 我想存在很多解决这个问题的方法。在我看来,最明显的3个是:

  1. 在每个请求上明确指定字段lits (/ posts?fileds = subject,author_name和for /帖/ 42?字段=主题,正文,createaAt,AUTHOR_NAME,comments_count,likes_count,等等...)。
  2. 仅当字段列表与默认值不同时才明确指定字段列表 字段列表。
  3. 指定应排除的字段列表 如果所需字段设置与默认字段不同,则设置(或包含)默认字段(到)。
  4. 我为客户构建清晰实用的API。我应该选择哪种方式?

2 个答案:

答案 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
    }
  }
}