指定资源的方式';RESTful API请求中的字段列表

指定资源的方式';RESTful API请求中的字段列表,rest,restapi,Rest,Restapi,我在web服务中有一个RESTful API,其中包含用户、帖子等资源。当我请求一个帖子列表(GET/posts)时,我只想检索一个帖子数组,每个帖子的数据有限(即主题、作者姓名)。当我请求一个具体的帖子(GET/posts/42)时,我想检索帖子对象字段的完整列表,包括大帖子正文、关于喜欢数、评论数的其他信息。 我想有很多方法可以解决这个问题。 在我看来,最明显的三点是: 在每个请求上显式指定字段列表 (/posts?fields=主题、作者姓名和 /posts/42?字段=主题、正文、cre

我在web服务中有一个RESTful API,其中包含用户、帖子等资源。当我请求一个帖子列表(GET/posts)时,我只想检索一个帖子数组,每个帖子的数据有限(即主题、作者姓名)。当我请求一个具体的帖子(GET/posts/42)时,我想检索帖子对象字段的完整列表,包括大帖子正文、关于喜欢数、评论数的其他信息。 我想有很多方法可以解决这个问题。
在我看来,最明显的三点是:

  • 在每个请求上显式指定字段列表 (
    /posts?fields=主题、作者姓名和
    
    /posts/42?字段=主题、正文、createAt、作者姓名、评论数、喜欢数等
  • 仅当字段列表与默认字段列表不同时,才显式指定字段列表
  • 指定应从(到)中排除(或包括)的字段列表 如果所需字段集与默认字段集不同,则设置默认字段

  • 我想为我的客户建立一个清晰而有用的API。我应该选择哪条路?

    我会选择选项2 IMHO

    因此,如果消费者只是请求资源url(
    /posts/42
    ),他们会收到默认字段

    然后,使用者可以通过在查询字符串中定义如下值来更改默认响应:

    /posts/42/fields?主题、作者姓名

    这在过去对我很有效,这也是一些其他众所周知的API的工作原理,例如

    编辑:回顾这一点,我将请求更改为:

    /posts/42?fields=主题、作者姓名


    /post/42
    是资源,而不是字段。

    也一直在做这方面的研究,并被指向Facebook的GraphQL,作为请求包含所需字段的restful api的替代方案。它仍处于非常早期的阶段,但似乎很有希望

    编辑: 从URL复制:

    GraphQL查询是由服务器解释的字符串,返回指定格式的数据。以下是一个查询示例:

    (注意:此语法与以前的GraphQL示例略有不同。我们最近对该语言进行了改进。)

    下面是对这个问题的回答


    我同意。它提供了一个较低的进入门槛,因此开发人员可以探索并轻松查看默认字段,但如果需要,仍然可以灵活地要求确切的内容。我也有选项(2),但我允许
    fields=*
    获取所有字段,以便查询完整的字段集(特别是对于想要知道或反复检查该集合是什么的开发人员)。
    {
      user(id: 3500401) {
        id,
        name,
        isViewerFriend,
        profilePicture(size: 50)  {
          uri,
          width,
          height
        }
      }
    }
    
    {
      "user" : {
        "id": 3500401,
        "name": "Jing Chen",
        "isViewerFriend": true,
        "profilePicture": {
          "uri": "http://someurl.cdn/pic.jpg",
          "width": 50,
          "height": 50
        }
      }
    }