質問
考えてみると、リソース指向であることのRESTパラダイムは、オブジェクト指向(機能が制限され、HTTPを可能な限り活用する)に要約されていませんか?
必ずしも悪いことだと言っているわけではありませんが、それらが本質的に同じに非常に似ていると、RESTとそのようなアーキテクチャに伴う意味を理解しやすくなります。
更新:より具体的な詳細は次のとおりです:
- RESTリソースは、パブリッククラスと同等です。プライベートクラス/リソースは公開されません。
- リソースの状態は、クラスのパブリックメソッドまたはフィールドと同等です。プライベートメソッド/フィールド/状態は、単に公開されていません(これが存在しないという意味ではありません)。
- RESTはリクエスト間でクライアント固有の状態を保持しないことは確かですが、すべてのクライアント間でリソースの状態を保持します 。リソースの状態は状態で、クラスの状態と同じです。
- RESTリソースは、サーバーオブジェクトがデータベースアドレス、テーブル名、およびプライマリキーによってグローバルに一意に識別されるのと同じ方法で、URIによってグローバルに一意に識別されます。これを表す(まだ)URIはありませんが、簡単に構築できます。
解決
RESTは、メッセージ(メソッドなど)を受け入れるエンティティとして世界をモデル化するという点でOOと似ていますが、それ以外は異なります。
オブジェクト指向では、状態の操作に必要なさまざまな方法を使用して、状態と不透明度のカプセル化が強調されます。 RESTは、状態(およびその表現)と透明性の転送に関するものです。 RESTで使用されるメソッドの数は、すべてのすべてのリソースで制限され、統一されています。 OOPのそれに最も近いのは ToString()
メソッドで、これはHTTP GETとほぼ同じです。
オブジェクトの向きはステートフルです。オブジェクトを参照し、オブジェクトがまだスコープ内にあるセッション内で状態を維持しながら、オブジェクトのメソッドを呼び出すことができます。 RESTはステートレスです。リソースで行うことはすべて1つのメッセージで指定され、そのメッセージに関して知っておく必要があることはすべて1つの応答で返されます。
オブジェクト指向では、ユニバーサルオブジェクトアイデンティティの概念はありません-オブジェクトは、特定の瞬間にメモリアドレス、フレームワーク固有のUUID、またはデータベースキーからアイデンティティを取得します。 RESTでは、すべてのリソースはURIで識別されます。インスタンス化または破棄する必要はありません。サーバーが 404見つかりませんで応答しない限り、常にクラウドに存在します。または 410 Gone 、そのURIのリソースがないことがわかっている場合。
RESTには、安全性(たとえば、GETメッセージは状態を変更しません)およびべき等性(たとえば、複数回送信されたPUT要求は、一度)。特定のオブジェクト指向技術のガイドラインには、特定の構成要素が状態にどのように影響するかについて言及するものがありますが、実際にはオブジェクトの向きについては安全性とべき等性については何も言いません。
他のヒント
概念はオブジェクトの観点から表現できると言うことと、概念はオブジェクト指向と同じ であると言うことには違いがあると思います。
OOは、RESTの概念を記述する方法を提供します。それは、REST自体がオブジェクト指向を実装するという意味ではありません。
あなたは正しい。 Dan Connollyは、1997年に記事を執筆しました。 フィールディング論文もそれについて述べています。
>オブジェクトは状態と機能をまとめてバンドルします。リソース指向とは、明示的に状態(データ)をモデル化し、汎用セマンティクス(HTTP、GET / PUT / POST / DELETEの場合)で定義済みの動詞に機能を制限し、残りの処理をクライアントに任せることです。
オブジェクト指向の世界には、これらの概念に相当するものはありません。
オブジェクトがDTOの場合のみ(データ転送オブジェクト)-できないため永続性以外の動作が実際にあります。
はい、オブジェクトの向きと同じです。
問題は、ほとんどのWebサービス(REST、RESTful、SOAPなど)がオブジェクトの形式で情報を渡すことができることです。そのため、違いはありません。 SOAPは、より多くのメソッドでより少ないサービスにつながる傾向があります。 RESTは、それぞれ数回の呼び出しでより多くのサービス(リソースタイプごとに1つ)につながる傾向があります。
はい、RESTはオブジェクトの転送に関するものです。しかし、それはオブジェクト全体ではありません。オブジェクトの現在の状態のみ。暗黙の前提は、RESTの両側のクラス定義が潜在的に類似していることです。そうでない場合、オブジェクトの状態は新しいオブジェクトに強制されます。
RESTは、オブジェクトのライフ、作成(POST)、取得(GET)、更新(PUT)、および削除の4つのイベントのみを考慮します。重要なイベントですが、これらは4つだけです。
オブジェクトは、他の多くのオブジェクトとともに、他の多くのイベントに参加できます。この動作の残りのすべては、完全にRESTアプローチの範囲外です。
密接な関係があります-RESTはオブジェクトを移動します-しかし、それらが同じであると言うと、オブジェクトはメソッドのない受動的なビットのコレクションになります。
RESTはオブジェクトだけでなく、プロパティについても:::新しい電話番号での/ users / john / phone_numberへのポストリクエストは新しいオブジェクトを追加せず、ユーザーオブジェクト 'john'のプロパティを設定します
これはオブジェクトの状態全体ではなく、状態の小さな部分への変更にすぎません。
確かに1対1の一致ではありません。