5

考えてみると、リソース指向であるという REST パラダイムは、オブジェクト指向 (可能な限り HTTP を活用し、機能が制限されている) に帰結するのではないでしょうか?

必ずしもそれが悪いことだと言っているわけではありませんが、それらが本質的に同じで非常に似ている場合、REST とそのようなアーキテクチャが伴う意味を理解するのがはるかに簡単になります。

更新:より具体的な詳細は次のとおりです。

  1. REST リソースは public クラスに相当します。プライベート クラス/リソースは公開されません。
  2. リソースの状態は、クラスのパブリック メソッドまたはフィールドと同等です。プライベート メソッド/フィールド/状態は単に公開されていません (これは、存在しないという意味ではありません)。
  3. 確かに REST はリクエスト間でクライアント固有の状態を保持しませんが、すべてのクライアント間でリソースの状態を保持します。クラスが状態を持つのと同じように、リソースにも状態があります。
  4. サーバー オブジェクトがデータベース アドレス、テーブル名、および主キーによってグローバルに一意に識別されるのと同じように、REST リソースは URI によってグローバルに一意に識別されます。確かに、これを表す URI は (まだ) ありませんが、簡単に作成できます。
4

8 に答える 8

22

REST は、どちらも世界をメッセージ (メソッド) を受け入れるエンティティとしてモデル化するという点で OO に似ていますが、それ以上は異なります。

オブジェクト指向は、状態の操作に必要なさまざまなメソッドを使用して、状態と不透明度のカプセル化を強調します。REST は、状態 (の表現) の転送と透明性に関するものです。REST で使用されるメソッドの数は制限されており、すべてのリソースで均一です。OOP のそれに最も近いのはToString()、HTTP GET とほぼ同等のメソッドです。

オブジェクト指向はステートフルです。オブジェクトを参照し、オブジェクトがまだスコープ内にあるセッション内で状態を維持しながら、オブジェクトのメソッドを呼び出すことができます。REST はステートレスです。リソースに対して実行したいことはすべて 1 つのメッセージで指定され、そのメッセージに関して知っておく必要があることはすべて 1 つの応答で返されます。

オブジェクト指向では、普遍的なオブジェクト ID の概念はありません。オブジェクトは、特定の時点でのメモリ アドレス、フレームワーク固有の UUID、またはデータベース キーから ID を取得します。REST では、すべてのリソースは URI で識別され、インスタンス化または破棄する必要はありません。サーバーが404 Not Foundまたは410 Goneで応答しない限り、リソースは常にクラウドに存在します。 URI。

REST には、安全性(例: GET メッセージは状態を変更しない) と冪等性(例: 複数回送信された PUT 要求は 1 回だけの場合と同じ効果がある) の保証があります。特定のオブジェクト指向テクノロジのガイドラインの中には、特定の構成要素が状態に与える影響について述べているものがありますが、オブジェクト指向については、安全性と冪等性について述べているものは何もありません。

于 2008-09-30T14:13:32.250 に答える
2

概念がオブジェクトの観点から表現できるということと、その概念がオブジェクト指向と同じであるということには違いがあると思います。

OO は、REST の概念を説明する方法を提供します。これは、REST 自体が OO を実装するという意味ではありません。

于 2008-09-30T14:33:06.603 に答える
1

オブジェクトは状態と機能を一緒にバンドルします。リソース指向とは、state(data)を明示的にモデル化し、関数をユニバーサルセマンティクス(HTTPの場合はGET / PUT / POST / DELETE)を使用して事前定義された動詞に制限し、残りの処理をクライアントに任せることです。

オブジェクト指向の世界では、これらの概念に相当するものはありません。

于 2008-10-06T23:29:15.907 に答える
1

あなたが正しいです。Dan Connolly は1997 年にそれについての記事を書きました。Fielding の論文でもそれについて述べています。

于 2008-09-30T12:49:49.863 に答える
0

はい、RESTはオブジェクトの転送に関するものです。しかし、それはオブジェクト全体ではありません。オブジェクトの現在の状態だけです。暗黙の前提は、RESTの両側のクラス定義が潜在的に類似しているということです。それ以外の場合、オブジェクトの状態は強制的に新しいオブジェクトになります。

RESTは、オブジェクトのライフの4つのイベント、作成(POST)、取得(GET)、更新(PUT)、および削除のみを考慮します。これらは重要なイベントですが、この4つしかありません。

オブジェクトは、他の多くのオブジェクトとともに他の多くのイベントに参加できます。この動作の残りはすべて、RESTアプローチの範囲外です。

密接な関係があります-RESTはオブジェクトを移動します-しかし、それらが同じであると言うと、オブジェクトはメソッドのない受動的なビットのコレクションになります。

于 2008-09-30T13:00:20.990 に答える
0

オブジェクトが DTO ( Data Transfer Objects ) である場合のみ - 永続性以外の動作を実際に行うことはできないためです。

于 2008-09-30T12:47:05.827 に答える
0

はい、オブジェクト指向との類似点は正しいです。

問題は、ほとんどの Web サービス (REST、RESTful、SOAP など) はオブジェクトの形式で情報を渡すことができるため、それが違いではないということです。SOAP は、より多くのメソッドを持つより少ないサービスにつながる傾向があります。REST は、より多くのサービス (リソース タイプごとに 1 つ) につながる傾向があり、それぞれにいくつかの呼び出しがあります。

于 2008-09-30T12:49:46.507 に答える
0

REST はオブジェクトだけでなく、プロパティにも関係します :: 新しい電話番号を指定した /users/john/phone_number へのポスト リクエストは、新しいオブジェクトを追加するのではなく、ユーザー オブジェクト 'john' のプロパティを設定します

これはオブジェクトの状態全体ではなく、状態のごく一部の変化にすぎません。

1対1の試合ではないことは確かです。

于 2008-09-30T14:08:21.763 に答える