ユーザー、投稿などの何らかのリソースを備えたWebサービス内にRESTful APIがあります。投稿のリスト(GET/posts)のリクエストを行うとき、各投稿のデータの一部(つまり、件名、著者名)のみを含む投稿の配列を取得したいです。具体的な投稿をリクエストするとき(GET/posts/42)、大きな投稿本文、いいね数、コメント数など、投稿オブジェクトフィールドの完全なリストを取得したい。この問題を解決する方法はたくさんあると思います。私の考えでは、最も明白な3つは次のとおりです。
顧客のために明確で有用なAPIを構築します。どちらを選ぶべきですか?
私はオプション2の私見に行きます。
そのため、コンシューマがリソースURL(/posts/42
)デフォルトのフィールドを受け取ります。
次に、消費者はクエリ文字列で次のような値を定義することでデフォルトの応答を変更できます。
/posts/42/fields?subject,author_name
これは過去に私のためにうまく機能し、他のいくつかのよく知られているAPIがどのように機能するかです。 Facebook
編集:これを振り返って、リクエストを次のように変更します:
/posts/42?fields=subject,author_name
/post/42
はリソースであり、フィールドではありません。
これについても研究を続けており、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
}
}
}