web-dev-qa-db-ja.com

RESTful APIリクエストでリソースのフィールドリストを指定する方法

ユーザー、投稿などの何らかのリソースを備えたWebサービス内にRESTful APIがあります。投稿のリスト(GET/posts)のリクエストを行うとき、各投稿のデータの一部(つまり、件名、著者名)のみを含む投稿の配列を取得したいです。具体的な投稿をリクエストするとき(GET/posts/42)、大きな投稿本文、いいね数、コメント数など、投稿オブジェクトフィールドの完全なリストを取得したい。この問題を解決する方法はたくさんあると思います。私の考えでは、最も明白な3つは次のとおりです。

  1. すべてのリクエストでフィールドlitsを明示的に指定します(/ posts?fileds = subject、author_nameおよび/ posts/42?fields = subject、body、createaAt、author_name、comments_count、likes_count、etc ...など)。
  2. デフォルトのフィールドリストと異なる場合にのみ、フィールドリストを明示的に指定します。
  3. 必要なフィールドセットがデフォルトと異なる場合、デフォルトのフィールドセットから除外(または除外)するフィールドリストを指定します。

顧客のために明確で有用なAPIを構築します。どちらを選ぶべきですか?

30
Ivan Velichko

私はオプション2の私見に行きます。

そのため、コンシューマがリソースURL(/posts/42)デフォルトのフィールドを受け取ります。

次に、消費者はクエリ文字列で次のような値を定義することでデフォルトの応答を変更できます。

/posts/42/fields?subject,author_name

これは過去に私のためにうまく機能し、他のいくつかのよく知られているAPIがどのように機能するかです。 Facebook

編集:これを振り返って、リクエストを次のように変更します:

/posts/42?fields=subject,author_name

/post/42はリソースであり、フィールドではありません。

31
Dan Rowlands

これについても研究を続けており、FacebookのGraphQLが、必要なフィールドで安らかなAPIをリクエストする代わりの方法として指摘されています。まだ初期段階ですが、非常に有望なようです。

https://facebook.github.io/react/blog/2015/05/01/graphql-introduction.html

編集:URLから再現:

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
    }
  }
}
8
ascrookes