REST [api]構造とOOモデルを比較すると、次のような類似点があります。
どちらも:
データ指向ですか
- REST =リソース
- OO =オブジェクト
データを取り巻く操作
- REST =リソースをVERBS(Get、Postなど)で囲みます
- OO =カプセル化によってオブジェクトの周りの操作を促進する
ただし、適切なOOプラクティスは、たとえばファサードパターンを適用しようとするときにREST APIに常に依存しているわけではありません。RESTでは、すべてのリクエストを処理する1つのコントローラーがなく、内部オブジェクトの複雑さを隠しません。
それどころか、RESTは、少なくとも2つの形式で、リソースとその他のすべての関係のリソース公開を促進します。
リソース階層関係を介して(id 43の連絡先はアドレス453で構成されます):
/api/contacts/43/addresses/453
REST json応答のリンクを介して:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
OOに戻ると、ファサードの設計パターンLow Coupling
は、objectAとその「objectBクライアント」の間、およびHigh Cohesion
このobjectAとその内部オブジェクト構成(objectC、objectD)を尊重します。とをObjectAのインターフェースは、これは、許可に制限の影響に現像剤をObjectBのObjectAに(内部変化ObjectCに及びobjectD長いほど)、ObjectAにする API(操作)が依然として尊重されます。
RESTでは、データ(リソース)、関係(リンク)、および動作(動詞)がさまざまな要素に展開され、Webで利用できます。
RESTで遊んでいると、クライアントとサーバーの間のコード変更に常に影響があります。それHigh Coupling
は、Backbone.js
リクエストとLow Cohesion
リソースの間で行っているためです。
RESTリンクによって促進されるBackbone.js javascript application
「RESTリソースおよび機能」のディスカバリーに対処する方法を理解できませんでした。WWWはマルチサーバーによって提供されることを意図しており、OO要素はその中の多くのホストによって処理されるように展開する必要があることを理解していますが、アドレスとの連絡先を示すページを「保存」するような単純なシナリオでは、私は結局:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
これにより、ブラウザーアプリケーションで保存アクションのアトミックトランザクションの責任を移動することになりました(2つのリソースを個別にアドレス指定できるため)。
これを念頭に置いて、開発を簡略化できない場合(Facadeデザインパターンは適用不可)、クライアントをより複雑にする場合(トランザクションアトミック保存の処理)、RESTfulであることの利点はどこにありますか?
PUT /api/contacts/43
内部オブジェクトへの更新をカスケードすることの問題は何ですか?私はこのように設計された多くのAPIを持っていました(マスターURLは「全体」を読み取り/作成/更新し、サブURLは断片を更新します)。(パフォーマンス上の理由から)変更が必要ない場合は、アドレスを更新しないようにしてください。