2012-06-11 5 views
6

REST GETクエリの投影の指定はRESTの原則に違反していますか、それとも良い方法ですか?
は、新しいを定義するために、完全に大丈夫だ人は、大きなモデルであり、私の現在の要件のために、私は唯一の(私はUIのグリッドを作成していますと言う)指定されたフィールドの値を必要とするため、これはあるかもしれない、/person?fields=fname,lname, addressようREST GETクエリの投影の指定

+0

これは非常に良い習慣です。あらゆる要求に対して巨大なオブジェクトを送り返すよりもはるかに優れています。 –

答えて

3

をAPIを考えてみましょう現在のリソースが必要なものをサポートしていない場合は、リソースそれがまさにRESTの仕組みです。

あなたのケースでは、/person?fields=fname,lname, addressのURI定義は完全に有効です。

URI構造は重要ではないことに注意してください。URIテンプレートと変数を記述するクライアントへのリンクを提供する必要があります。ですから、このようなリンクの何か(架空のハイパーメディアJSON形式)を返す必要があります。/metaはそれぞれの種類とラベルを記述する場所で

{ 
    "_links": { 
     "/meta/person/list": { 
      "href": "/person{?fields}", 
      "vars": { 
       "fields": { 
        "required": false, 
        "composition": [ 
         "fname": { 
          "meta": "/meta/person/fname" 
         }, 
         "lname": { 
          "meta": "/meta/person/lname" 
         }, 
         "address": { 
          "meta": "/meta/person/address", 
          "alternatives": { 
           "href": "/locations", 
           "meta": "/meta/locations" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

をparamsは:

GET /メタ/人/ fnameの

{ 
    "type": "string", 
    "label": "First name", 
    "_links": { 
     "self": { 
      "href": "/meta/person/fname" 
     } 
    } 
} 

c。クライアントとの最初の動きは、メタ全体または少なくとも最も頻繁に使用される部分を取得する必要があります。リンクを処理することで、クライアントはメタ記述とこの特別なハイパーメディアJSON形式のみを理解できなければなりません。 URI構造は完全に無関係です。リンクが何であるかを理解するためにメタのみを使用する必要があります。

現時点では、JSONレスポンスのリンクを記述する方法についての標準はありません。 Hydra + Json-LDHALHyperSchemaなどのハイパーメディア形式がありますが、afaik。それらのどれもまだ標準ではありません。 (おそらく、HydraのRDFのvocabは最も近いものですが、まだ準備ができていません.Json-LDは既にRDFを表現するための標準的な方法です)。

これで、 というURIとその意味は、この種のサービス/クライアントはRESTのuniform interface/HATEOASという制約に違反しているため、RESTクライアントではありません。 Ofc。今日はppl。トピックについてのJon Snowだけを知っている場合でも、すべてをREST、RESTful、APIとして呼び出します。 Btw。 RESTの方法でWebアプリケーションを実装したくない場合は、悲劇はありません。これは要件にのみ依存します。たとえば、アプリケーションに多数のユーザーやサードパーティの開発者がいない場合、どのパスを選択するかは問題になりません。

関連する問題