2017-05-23 5 views
0

私は安らかなapisと概念的な質問があります。私のデータモデルでは、私は国と企業を持っています。安らかなAPI:readonly/writeonlyのフィールド

apiのユーザーは国オブジェクトを作成できません。各国のデータベースには一定のエントリがあります。彼らはフィールドとして国を持つ企業オブジェクトを作成します。会社を表示するときに、クライアント側では

{ 
    'name': 'company name', 
    'country': 5, // country id 
    ... 
} 

、我々はまた、その国を表示したい:会社を作成するときに、APIは、JSONは次のように期待しています。これに対する1つのアプローチは、会社のリソースを取得した後、別のgetリクエストを発行して、国オブジェクトを取得することです。しかし、このアプローチは、特に複数の企業をリストするページでは、パフォーマンス上問題があります。

別のアプローチは、同様に、GET要求に別のフィールドで国の詳細情報を含めることであろう。

{ 
    'name': 'company name', 
    'country': 5, // country id 
    'country_details': { 
     'name': 'USA', 
     'phone_code': 1, 
     'id': 5 
    } 
    ... 
} 

私はデータ表現は、ポストのために異なっているとして、これはどちらか正しいアプローチであると考え、要求を得ることはありません同じリソースに対してこの場合の提案はありますか?

答えて

1

...同じリソースに対する投稿要求と取得要求では、データ表現が異なります。 PUT一方

ターゲットリソース処理POSTメソッドリクエスト要求に囲ま 表現...

RFC 7231から

POST

PUTメソッドは、状態要求メッセージのペイロードに囲まれた表現 によって定義された状態で作成または置換された である必要があります。与えられた 表現の成功したPUTは、同じ ターゲットリソース上での後続のGETが、 が200(OK)応答で送信される同等の表現をもたらすことを示唆する。

そして:

POST及びPUT方法の基本的な違いは、囲まれた表現のための別の意図によって強調 あります。 POST要求内のターゲットリソースは、リソースの独自のセマンティクス に従って囲まれた表現を処理することを目的としていますが、PUT要求内の囲まれた表現は、ターゲットリソースの状態を置き換えるものとして と定義されています。

異なるのでPOSTGET体は問題ではありませんが、それはPUTGETのためになります。私はPOSTGETに同じURLを使用しないことで区別を明確にします。とにかくGETには企業識別子が含まれていますが、POSTには該当しません。

例えば、企業が国のURLに掲載されるために多分それは理にかなって、この方法は、私たちが体内に国IDを含める必要はありません。

POST: /usa/company 

BODY: { 'name': 'company name' } 

RESPONSE: 200 with Content-Location header: /companies/1 

ことのその後のGETContent-Location

GET: /companies/1 

RESPONSE: { 'name': 'company name', 'country': 'USA' } 
関連する問題