2013-08-14 9 views
19

Webサービス内にユーザー、投稿などのリソースを持つRESTful APIがあります。投稿のリスト(GET /投稿)をリクエストすると、各投稿のデータの一部分(件名、著者名)のみを減らした投稿の配列を検索したい。具体的な投稿(GET/posts/42)をリクエストすると、大きな投稿のボディ、お気に入り数に関する追加情報、コメント数など、投稿オブジェクトのフィールドの完全なリストを取得したいと考えています。 私はそれがこの問題を解決する多くの方法が存在すると思います。私の心の中で、最も明白な3は以下のとおりです。RESTful APIリクエストでリソースのフィールドリストを指定する方法

  1. は、明示的に(すべての要求 上のフィールドのLITSを指定/ポストfileds =件名、AUTHOR_NAMEと /ポスト/ 42フィールド=件名、本文、createaAt、AUTHOR_NAMEため、? comments_count、likes_countなど)。
  2. フィールドリストを明示的に指定するのは、デフォルトの フィールドリストと異なる場合のみです。
  3. 除外するフィールドリストを指定する必要があるフィールドがデフォルトと異なる場合、 (またはinlcuded)から(to)のデフォルトフィールドが設定されます。

私は何を顧客に提供するのか、明確で有用なAPIです。どの方法で選ぶべきですか?

答えて

16

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

したがって、コンシューマがリソースURL(/ posts/42)を要求すると、デフォルトのフィールドが表示されます。これは、過去に私のためによく働いたAUTHOR_NAME

、/ポスト/ 42 /フィールド主題と他のいくつかのよくAPIを知っている方法です:?

は、その後、消費者のようなクエリ文字列の値を定義することにより、デフォルトの応答を変更することができます仕事、例えばFacebook

編集:これを見ると、/ posts/42?fields = subject、author_name、/ post/42はリソースではないフィールドになります。

+0

私は同意します。これは、エントリに低い障壁を提供するので、開発者は探索して簡単にデフォルトのフィールドを見ることができますが、必要に応じて必要なものを正確に求める柔軟性を提供します。 – theon

+0

私はオプション(2)もやっていますが、 'fields = *'はすべてのフィールドを取得できるようにしています(特に、そのセットが何であるかを知りたい、 –

5

これもまた研究していて、フィールドの欲しいものと一緒に安らかなAPIをリクエストする代わりに、FacebookのGraphQLを指摘していました。まだ初期の段階ですが、非常に有望です。

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

EDIT:URLから再生 :

A 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 
    } 
    } 
} 
関連する問題