web-dev-qa-db-ja.com

RESTリソースとは?

RESTリソースとは何ですか?リソースはリソース名やリソース表現とどのように関連していますか?

この件に関する記事をいくつか読みましたが、それらは抽象的すぎて、以前よりも混乱しました。

次のURLはリソースですか?もしそうなら、そのリソースの名前は何であり、その表現は何ですか?

http://api.example.com/users.json?length=2&offset=5

URLのGET応答は次のようになります。

[
   {
      id: 6,
      name: "John"
   },
   {
      id: 7,
      name: "Jane"
   }
]
38
Emanuil Rusev

リソースとは?

リソースとは、それ自体が物として参照されるほど重要なものです。ユーザーが「ハイパーテキストリンクの作成、アサーションの作成または反論、リプレゼンテーションの取得またはキャッシュ、参照によるそのすべてまたは一部のインクルード、注釈付け、または他の操作の実行を希望する場合」 」、それをリソースにする必要があります。

通常、リソースはコンピューターに保存できるもので、ビットストリームとして表現できます。ドキュメント、データベース内の行、またはアルゴリズムの実行結果です。リソースは、Appleのような物理的なオブジェクト、または勇気のような抽象的な概念かもしれませんが、そのようなリソースの表現は失望するに違いありません。いくつかの可能なリソースは次のとおりです。

  • ソフトウェアリリースのバージョン1.0.3
  • ソフトウェアリリースの最新バージョン
  • 2006年10月24日の最初のウェブログエントリ
  • アーカンソー州リトルロックのロードマップ
  • クラゲに関するいくつかの情報
  • クラゲに関するリソースのディレクトリ
  • 1024の後の次の素数
  • 1024の後の次の5つの素数
  • Q42004の販売数
  • 2人の知り合い、アリスとボブの関係
  • バグデータベース内の未解決のバグのリスト

テキストはO'Reillyの本「 RESTful Web Services 」からのものです。

24
Emanuil Rusev

RESTリソースに関する記事が抽象的である理由は、REST resource is abstract。という概念のためです。基本的には何でもですから、あなたの例では、リソースはより大きなリストのオフセット5から始まる2人のユーザーのリストになります。リソースの実装方法は気にしない詳細ですあなたが実装を書いている人でない限り。

次のURLはリソースですか?

URLはリソースではなく、リソースを識別するラベルであり、必要に応じてリソースの名前です。

JSONは、リソースの表現です。

36
JeremyP

URLは決してリソースでも名前でも表現でもありません。

URLはリソースの場所を示しているだけで、このURLでGET、POST、PUT、DELETEなどを呼び出してリソースを呼び出すことができます。

返されたデータはリソースであり、データの形式はその表現です。

与えられたGETパラメータを持つURLがJSONリソースを出力できるとしましょう-これはこのリソースのJSON表現です。 GETの他のフラグを使用すると、XMLの同じデータで応答できます。これは、まったく同じリソースの別の表現になります。

編集:OPへのコメントと私の答えのために、私は別の説明を追加しています。

また、リソース名は「スクリプト名」と見なされます。この場合、users.jsonこのリソース名はリソース表現自体を自己記述していますが、このリソースを呼び出すときはJSONであることが期待されますが、たとえばusers.xml XMLのデータが期待されます。

  1. GETでoffsetパラメーターを変更すると、応答に異なるデータセットが含まれます。これは新しいリソースですか、それともその表現ですか?
  2. GETの応答で返される列を定義するとき、それは異なるリソースまたは異なる表現ですか?
  1. さて、ここで問題と答えは明らかです-私たちはまだ同じURLを呼び出し、サーバーは同じ形式のデータで応答します(それでもJSONです)、データにはまだユーザーに関する情報が含まれています-情報自体が新しいオフセットパラメータ。したがって、以前と同じ表現と同じリソース名を持つ同じリソースであるであることは明らかです。
  2. 2番目の問題は少しわかりにくいかもしれません。同じリソースを呼び出していますが、リソースには同じデータが含まれていますが(定義済みの列セットのみ)、データが同じ表現であるにもかかわらず、異なるリソースのように見えます。しかし、上の段落のポイントのために、異なるリソースや異なる表現でもありません。データセットに含まれる情報は少なくなりますが、要求側(このデータセットのフィルタリング)はこれを考慮し、適切に動作する必要があります。再び:同じリソース名と同じリソース表現を持つ同じリソースです
13
shadyyx

RESTリソースとは何ですか?リソースはリソース名やリソース表現とどのように関連していますか?

RESTは、HTTP動詞(GET、POST、PUT、DELETEなど)を適切に使用する以上の意味はありません。

次のURLはリソースですか?

すべてのURLは、リソースの場所をコンピューターに伝える文字列です。 (したがって、名前:Uniform Resource Locator)。

12
Quentin

REST

この建築様式は、Roy T. Fieldingの論文の​​ chapter 5 で定義されています。

RESTは、クライアントとサーバー間のステートレス通信の上にある表現によるリソースの状態操作に関するものです。これは、プロトコルに依存しないアーキテクチャスタイルですが、実際には、一般的にHTTPプロトコルの上に実装されます。

資源

resource自体は抽象化であり、著者の言葉では、リソースは名前を付けることができる任意の情報です。アプリケーションのドメインエンティティ(例:個人、ユーザー、請求書、請求書のコレクションなど)はリソースになります。フィールディングの論文からの次の引用を参照してください。

5.2.1.1リソースとリソース識別子

REST)の情報の主要な抽象化は、resourceです。名前を付けることができる情報は、リソース(文書または画像、一時的なサービス(「ロサンゼルスの今日の天気」など)、他のリソースのコレクション、非仮想オブジェクト(人など)など。言い換えれば、著者のハイパーテキスト参照の対象となる可能性のある概念は、リソースの定義に収まるリソースは、特定の時点でのマッピングに対応するエンティティではなく、エンティティのセットへの概念的なマッピングです。

より正確には、リソース[〜#〜] r [〜#〜]は時間的に変化するメンバーシップ関数ですMR(t)。これは、時間tで、エンティティのセット、または同等の値にマッピングされます。セット内の値は、リソース表現および/またはリソース識別子です。 [...]

リソース表現

JSONドキュメントはリソース表現であり、リソースの状態を表すことができます。サーバーは、同じリソースに対して異なる表現を提供できます。たとえば、XMLおよびJSONドキュメントを使用します。クライアントはcontent negotiationを使用して、同じリソースの異なる表現を要求できます。

フィールディングの論文の引用:

5.2.1.2表現

RESTコンポーネントは、リプレゼンテーションを使用してリソースの現在の状態または目的の状態をキャプチャし、コンポーネント間でそのリプレゼンテーションを転送することにより、リソースに対してアクションを実行します。表現は、一連のバイトと、それらのバイトを記述する表現メタデータです。他の一般的に使用されているが、表現にあまり正確ではない名前には、ドキュメント、ファイル、HTTPメッセージエンティティ、インスタンス、またはバリアントが含まれます。

表現は、データ、データを説明するメタデータ、および場合によってはメタデータを説明するメタデータで構成されます(通常はメッセージの整合性を検証するため)。メタデータは名前と値のペアの形式で、名前は値の構造とセマンティクスを定義する標準に対応しています。応答メッセージには、表現メタデータとリソースメタデータの両方が含まれる場合があります。これは、提供された表現に固有ではないリソースに関する情報です。 [...]

HTTPを介して、要求および応答ヘッダーを使用して、表現に関するメタデータを交換できます。

リソース識別子

サーバー内のリソースを識別/特定するURL aresource identifier


この answer も洞察に満ちているかもしれません。

7
cassiomolin

リソースは次のとおりです。

  • 名詞
  • それはユニークです
  • データとして表すことができます
  • 少なくとも1つのURIがあります

ブログの投稿でさらに詳しく説明します What、Exactly、Is a RESTful Resource?

6
techiferous

Representational State Transfer(REST)は、World Wide Webなどの分散システム用のソフトウェアアーキテクチャのスタイルです。 RESTスタイルのアーキテクチャは、クライアントとサーバーで構成されます。クライアントはサーバーへのリクエストを開始します。サーバーは要求を処理し、適切な応答を返します。要求と応答は、リソースの表現の転送を中心に構築されます。リソースは、URLを使用してリンクされた、一連のアドレス可能なオブジェクト、基本的にはファイルとドキュメントです。上記のQuentinが正しく指摘したように、REST archiectureは単純にHTTP動詞GET/POST/PUT/DELETEを使用することを意味します...

4
verisimilitude

概念的には、URLを使用してWeb上でアクセス可能なすべてのものとしてリソースを考えることができます。このルールに固執する場合はhttp://api.example.com/users.json?length=2&offset=5はリソースと見なすことができます

4

具体的な(またはそうあるべき)「ID」ではなく、相対的なパラメータのように見えるもののみを提供しました。 get操作はべき等でなければなりません(つまり、同じ結果で繰り返し可能)。

2
Jeff Watkins

RESTとは何ですか?

RESTは、Representational(RE)State(S)transfer(T)を表すアーキテクチャスタイルです。

REST Resource?

残りのリソースは、操作を実行するデータです。したがって、このデータは、テーブルのレコードまたは他の形式でデータベースに存在できます。このレコードは、それを識別することができる一意の識別子を持っています従業員のIDなど。

このデータが http://www.example.com/employees/123,so のような一意のURLによって要求されると、最終的にデータベースに存在するデータまたはレコードはJSON/XML/Plainに変換されますRest Serviceによるテキスト形式で、Consumerに送信されます。

基本的に、ここで行われているのはREPRESENTATIONAL STATE TRANSFERです。データベースに存在するデータの状態が、JSON/XMLまたはプレーンテキストの別の形式に転送されます。

したがって、この場合、1人の従業員は http://www.example.com/employees/12 のような一意のURLでアクセスできる1つのリソースを表します

すべてのリソース(従業員)のリストを取得する場合は、次のようにします。 http://www.example.com/employees

これが役立つことを願っています。

0
user2603985