2016-05-26 13 views
0

複雑なネストされたリソースに対してREST APIを提供する必要があります。残りのAPIのネスト化されたリソースは、配列がフラット化されていますか?

応答でデータ重複を強制するため、実際にはインライン埋め込みが嫌いです(複数の車に1つのエンジンが搭載されていても応答で重複する必要があります) )。

GET /cars 
{ 
    "cars": { 
    "id": 1, 
    "name": "Batmobile", 
    "spoiler": 192, // nested 
    "engine": 18 // nested 
    }, 
    "engines": { 
    "id": 18, 
    "turbine": 671 // nested 
    ... 
    }, 
    "spoilers": { 
    "id": 192, 
    ... 
    }, 
    "turbines": { 
    "id": 671, 
    ... 
    } 
} 

ので、私は、形式次の使用したい:データは、データが容易angular2データストアと

Hovewerに統合されている、私はできませんでした

  • 正規化さ

    • そのような形式を実装する任意の標準やREST APIプロバイダを見つけることができます。すべての標準では通常、インライン埋め込みが使用されます。

      このようなプロトコルを実装しないといけない点はありますか?

    +0

    達成したいサンプルを提供していますか? –

    答えて

    1

    あなたの投稿を私が理解してから、それ以外の場合は自然にネストされたドキュメントのドキュメントになります。

    フラットングがどのように読みやすさを向上させるかわかりません。さらに、それは非正義であり、APIの理解を妨げることになります。

    サンプルでは、​​GET /carsを要求していますが、車とすべての関連リソースを第1レベルのアイテムとして取得しています。個々のリソースにどのようにアクセスして更新しますか?

    ネスティングおよび/または異なるエンドポイントに資源を破壊することは、いくつかの理由のために必要である:

    1. クライアントは通常、1回のリクエストですべての車とそのすべての部品を必要としません。通常、車から始まり、次に車の詳細、次にその部品をナビゲートします。
    2. 特定のセマンティクスを持つ別々のURIにリソースを分けておくと、これらのリソースをCRUD操作に合わせることができます。これはあなたの平らな表現では本当に難しいでしょう。その独立した表現で、それぞれがあなたのAPIを管理し、変更が含まれているとあなたはRESTのAPIを構築しようとしている場合
    3. 結合減らすのに役立ちます、別のURIに
    4. 異なるリソースは、あなたがお勧め平坦化表現は、周りのものをいじりなってしまいます。

    私がお勧めしたい:

    1. あなたがリンク(HALでライン)と関連リソースをレンダリングすること:あなたが異なったURIに個別の各リソースを保つ

      GET /cars [ { "name": "Batmobile", "links": [ { "rel" : "self", "href": "https://api.superauto.com/cars/1" }, { "rel" : "spoiler", "href" : "https://api.superauto.com/spoilers/192" }, { "rel": "engine", "href": "https://api.superauto.com/engines/18" } ] } ]

    2. あなたはRESTに固執しますful APIデザイン。チェックREST API TutorialRestful best practices

    (少なくともJVM生態系における:ジャワ、Groovyの、スカラ座、Kotlin)ライブラリがあるHALをサポートしています。この表現がすべてのニーズに適合しない場合は、リクエストごとにリソースを埋め込むことをサポートするライブラリを使用することもできます。そのため、関連リソースを埋め込んでいるデフォルトのレスポンスを上書きできます。

    -1

    normalizrは、angle2データストアに簡単に統合できるようになりました。

    関連する問題