RESTとは何ですか?少し混乱している[終了]


155

RESTはWebサービスであると想定していましたが、これを考えるのは間違っているようです。RESTとは何ですか。

私はウィキペディアを読みましたが、それでも頭を一周できません。多くの場所でAPIをREST APIと呼ぶのはなぜですか?


21
@ジョン・サンダース:これはどのようにして重複する可能性がありますか?他の男は明らかにRESTが何であるかを知っていますが、一方でネイサンは混乱しています。
フェイクコードモンキーラシード

他の人が彼の質問に答えると感じました。他の誰も同意しない場合、近い投票は期限切れになります。この質問には約10の回答があります。「rest」タグをクリックするだけで、すべてが表示されます。
John Saunders

1
RESTは、Webサービスを構築するための一連のルールです。APIがこれらのルールに従って構築されている場合、それはREST APIです。RESTを私のゴム​​製のアヒルに説明した方法は、それらのルールのいくつかを非公式に説明しています。
User42 '27 / 07/27

回答:


127

RESTは特定のWebサービスではなく、状態情報を管理するための設計概念(アーキテクチャー)です。このことに関する重要な論文は、ロイトーマスフィールディングの論文(2000)、「Architectural Styles and the Design of Network-based Software Architectures」(カリフォルニア大学アーバイン校からオンラインで入手可能)でした。

最初にRyan Tomaykoの投稿「How How I I REST to REST to my wife」を読んでください。それは素晴らしい出発点です。その後、フィールディングの実際の論文を読んでください。それほど高度ではなく、長くもありません(6章、180ページ)。(私はあなたが学校の子供たちを短いように知っています)。

編集:RESTを説明しようとしても無意味だと思います。スケーラビリティ、可視性(ステートレス)などの多くの概念があり、読者が把握する必要があり、それらを理解するための最良の情報源は実際の論文です。POST / GETなどをはるかに超えています。


@ネイサン、私を信じて、私はあなたが以前にしたのと同じ問題を抱えていました。論文を読んで、おそらくそれを数回ゆっくりと読んでください。しかし、あなたは概念を理解するでしょう、それは実際にはまったく難しくありません。人々はそれをうまく説明できない傾向があります。
Anders

開発者がRESTを採用し、コードのみで(RESTを考慮したシステム全体を計画せずに)実行しようとすると、地獄が来ます:-)
karatedog

@ Anders、RESTとは何かということを考えると、RESTとWebサービスをどのように比較できますか?
囚人


1
多分この章は論文全体を読む代わりに十分でしょう:ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
andilabs

74

RESTは、通常Webアプリケーションで使用されるソフトウェア設計パターンです。簡単に言えば、これは多くの異なるプロジェクトで使用される一般的に使用されるアイデアであることを意味します。これは、REpresentational State Transferの略です。RESTの基本的な考え方は、サーバー側のオブジェクト(データベーステーブルの行など)を、作成または破棄できるリソースとして扱うことです。

RESTについて考える最も基本的な方法は、WebアプリケーションのURLをフォーマットする方法としてです。たとえば、リソースが「投稿」と呼ばれた場合、次のようになります。

/posts 表示するために、ユーザーがすべての投稿にアクセスする方法になります。

/posts/:id ユーザーが個々の投稿にアクセスして表示する方法は、固有のIDに基づいて取得されます。

/posts/new 新しい投稿を作成するためのフォームを表示する方法になります。

にPOSTリクエストを送信する/usersと、実際にデータベースレベルで新しい投稿を作成できます。

PUTリクエストの送信/users/:idは、特定の投稿の属性を更新する方法であり、これも一意のIDで識別されます。

DELETEリクエストを送信すると/users/:id、一意のIDで識別される特定の投稿が削除されます。

私が理解しているように、RESTパターンは主にRuby on Railsフレームワークによって一般化され(Webアプリ用)、RESTfulなルートに大きな重点を置いています。私はそれについて間違っているかもしれません。

私はそれについて話すのに最も適任ではないかもしれませんが、これは私がそれを(特にRails開発のために)学んだ方法です。

誰かが「REST API」に言及する場合、一般的に彼らが意味するのは、データを取得するためにRESTful URLを使用するAPIです。


2
RailsはRESTの原則に基づいて構築されているため幸運です。Railsツールを使用すると、コードはRESTfulになります。しかし、RESTについて理解できないプログラマーがいます。彼らは自分たちが望むものをコーディングし、最終的にはこの「URLフォーマット」を利用しています。
karatedog

8
この回答で/ usersを使用したことがある場合は、/ postsにすべきではありませんか?
Mayuresh Srivastava 2017

@MayureshSrivastava PUTの例には:idがあり、POSTの例には:idがないことに注意してください。残りの話はGoogleで。(POST:非安全、非べき等; PUT:非安全、
べき

38

RESTある建築様式デザインネットワークベースのソフトウェア・アーキテクチャについては。

REST概念はリソースと呼ばれます。リソースの表現はステートレスでなければなりません。一部のメディアタイプで表されます。メディアタイプのいくつかの例としてはXMLJSON、とRDF。リソースはコンポーネントによって操作されます。コンポーネントは、標準の統一インターフェースを介してリソースを要求および操作します。HTTPの場合、このインターフェースは、標準のHTTPオプスなどで構成されGETPUTPOSTDELETE

RESTHTTP、主にHTTPのシンプルさとRESTful原則への非常に自然なマッピングのために、通常で使用されます。ただし、RESTは特定のプロトコルに関連付けられていません。

基本的なREST原則

クライアントサーバー通信

クライアント/サーバーアーキテクチャでは、懸念事項が非常に明確に分離されています。RESTfulスタイルで構築されたすべてのアプリケーションも、原則としてクライアントサーバーでなければなりません。

ステートレス

サーバーへの各クライアント要求では、その状態が完全に表現されている必要があります。サーバーは、サーバーコンテキストまたはサーバーセッション状態を使用せずに、クライアント要求を完全に理解できる必要があります。したがって、すべての状態をクライアントで保持する必要があります。ステートレス表現については、後で詳しく説明します。

キャッシュ可能

キャッシュ制約を使用すると、応答データをキャッシュ可能またはキャッシュ不可としてマークできます。キャッシュ可能とマークされたデータは、同じ後続の要求への応答として再利用できます。

均一なインターフェース

すべてのコンポーネントは、単一の統一インターフェースを介して相互作用する必要があります。すべてのコンポーネントの相互作用はこのインターフェースを介して行われるため、さまざまなサービスとの相互作用は非常に簡単です。インターフェースは同じです!これは、実装の変更を個別に行うことができることも意味します。このような変更は、基本的なコンポーネントの相互作用には影響しません。統一されたインターフェースは常に変更されないためです。1つの欠点は、インターフェイスに行き詰まっていることです。インターフェースを変更することで特定のサービスに最適化を提供できる場合、RESTがこれを禁止しているため、運が悪かったです。ただし、明るい面としては、RESTはWeb用に最適化されているため、REST over HTTPの信じられないほどの人気があります。

上記の概念は、RESTの定義特性を表し、RESTアーキテクチャをWebサービスなどの他のアーキテクチャと区別します。RESTサービスはWebサービスですが、Webサービスは必ずしもRESTサービスである必要はないことに注意してください。

RESTと上記の原則の詳細については、REST 設計プリンシパルに関するこのブログ投稿を参照してください。


15

これは、Representational State Transferの略であり、多くのことを意味しますが、通常、APIとアプリケーションについて話す場合、Webサービスを実行する方法、またはプログラムにWeb経由で話させる方法としてRESTについて説明します。

RESTは基本的にシステム間の通信方法であり、SOAP RPCが行うように設計された機能の多くを実行しますが、SOAPは通常、接続を確立し、認証し、その接続を介して処理を行いますが、RESTはWebの動作とほぼ同じように動作します。あなたはURLを持っています、そしてあなたがそのURLをリクエストするとあなたは何かを取り戻します。これは、人々がWebを最大のRESTアプリケーションであると説明し、技術的には正しいものの、それが何であるかを説明するのに役立たないため、状況が混乱し始めるところです。

簡単に言えば、RESTを使用すると、Webブラウザーが使用するものと同様のツールを使用して、2つのアプリケーションがインターネット経由で通信できるようになります。これはSOAPよりもはるかに単純であり、RESTが行うことの多くは、「ねえ、物事はそれほど複雑である必要はない」と述べています。

読む価値があります:


RESTは制約に基づくアーキテクチャであり、SOAPはプロトコルであり、それらはまったく異なるものです。人々が同じ概念でSOAPとRESTについて話しているとき、私は気に入らない。人々がそれについて混乱するのも不思議ではない。
アンデルス

@Anders-彼はREST APIを検討していると述べ、それがWebサービスを使用する方法であると考えました。このようにRESTを使用すると、SOAPが達成することのほとんどを達成できます。Webを世界最大のRESTfulアプリケーションとして説明することもできますが、それは実際にREST APIを使用する目的を説明するものではありません。
Mark

これは実際に私の主要な問題であり、RESTとSOAPを同じ概念で見ています。APIはRESTfulな設計になっているようです。
囚人

4

http://en.wikipedia.org/wiki/Representational_State_Transfer

基本的な考え方は、サーバーへの継続的な接続を確立する代わりに、リクエストを作成し、データを取得し、それをユーザーに示しますが、すべてではないかもしれません。その後、ユーザーが追加のデータを要求する何かをすると、または、一部をサーバーに渡すために、クライアントは新しい状態への変更を開始します。


3
多分それは私だけかもしれませんが、私は適切な引用とともにstackoverflowの関連する答えを見るのが好きです。ただ私をユーモアを入れて、ウィキペディアが不名誉になったとしましょう。あなたのリンクはそれでうーん何をしますか?:)
フェイクコードモンキーラシード

1
@ハックソー:それはあなたの答えにあるべきではないのですか?
フェイクコードモンキーラシード、

編集機能に気づきました。:)
ハックソー

1
@karatedog:RESTはHTTPで実現できますが、さまざまなデータ転送方法で実現できます。
ハックソー

1
これはあなたが書いているHTTPプロトコルであり、RESTはアーキテクチャです。
karatedog
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.