原理 表現状態転送 という用語は、2000年にコンピュータ科学者のロイ・フィールディング が博士論文の中で提唱し定義したものです。これは、サーバーがリソース(多くの場合HTML ドキュメント)の表現を応答として返し、そのリソースにはシステムの状態を変化させるためにたどることができるハイパーメディア リンクが含まれていることを意味します。このようなリクエストに対しては、今度はリソースの表現が返され、このプロセスが繰り返されます。
重要な結果として、知っておく必要がある識別子は 、最初に要求されたリソースの識別子のみであり、その他の識別子はすべて自動的に検出されます。これは、これらの識別子はクライアントに事前に通知することなく変更可能であり、クライアントとサーバーは本質的に疎結合で なければならないことを意味します。
歴史 ロイ・フィールディング氏が OSCON 2008で講演ウェブは、一般向けのウェブサイトが 利用可能になり始めた1993年から1994年にかけて、日常的に使われるようになった。[ 3 ] 当時、ウェブのアーキテクチャに関する記述は断片的なものしか存在せず、ウェブインターフェースプロトコルの標準に合意するようコミュニティ内で圧力がかかっていた。例えば、プロキシをサポートするために通信プロトコル(HTTP)にいくつかの実験的な拡張機能が追加され、 さらに多くの拡張機能が提案されていたが、これらの変更の影響を評価するための正式なウェブアーキテクチャが必要だった。[ 4 ]
W3CとIETFの ワーキンググループは 、Webの3つの主要標準であるURI、HTTP、HTMLの正式な記述を作成する作業を開始しました。 ロイ ・フィールディング はこれら の標準(特にHTTP 1.0と1.1、およびURI)の作成に関与し、その後6年間でRESTアーキテクチャスタイルを作成し、Webのプロトコル標準 に対する制約をテストし、それをアーキテクチャの改善を定義する手段として、またアーキテクチャの不一致を特定する手段として使用しました。フィールディングは、2000年にUCアーバイン で提出した博士論文「アーキテクチャスタイルとネットワークベースのソフトウェアアーキテクチャの設計」[ 1 ] [ 5 ] でRESTを定義しました。
RESTアーキテクチャスタイルを確立するために、フィールディングは、世界規模のネットワークベースのアプリケーションを作成する際に適用される要件、例えば、グローバルな普及を可能にするための低い参入障壁の必要性などを特定しました。また、ネットワークベースのアプリケーション向けに既存の多くのアーキテクチャスタイルを調査し、キャッシュやクライアント/サーバー機能など、他のスタイルと共通する機能と、リソースの概念など、RESTに固有の機能を特定しました。フィールディングは、既存の実装のアーキテクチャを分類するとともに、Webの動作およびパフォーマンス要件の中心となるべき側面を特定しようとしていました。
アーキテクチャスタイルは、その性質上、特定の実装とは独立しており、REST は Web 標準の開発の一環として作成されましたが、Web の実装は REST アーキテクチャスタイルのすべての制約に従っているわけではありません。不一致は、無知や見落としによって発生する可能性がありますが、REST アーキテクチャスタイルが存在することで、それらが標準化される前に特定できます。たとえば、Fielding は、セッション情報を URI に埋め込むことは REST の制約に違反し、共有キャッシュやサーバーのスケーラビリティに悪影響を与える可能性があると指摘しました。HTTP Cookie も 、ブラウザのアプリケーション状態と同期しなくなり信頼性が低くなる可能性があるため、REST の制約に違反します[ 4 ] 。また、プライバシー やセキュリティ 上の懸念となる不透明なデータも含まれています。
建築物件 RESTアーキテクチャスタイルは、ネットワークベースのアプリケーション、特にクライアント/サーバーアプリケーション向けに設計されています。しかし、それ以上に、インターネット規模での利用を想定して設計されているため、大規模な導入を容易にするには、ユーザーエージェント (クライアント)とオリジンサーバー間の結合をできる限り 緩やか にする必要があります。
クライアントとサーバーの強力な分離と、統一されたアドレス指定プロトコルを使用したテキストベースの情報転送により、Webの要件である拡張性 、無秩序なスケーラビリティ[ 6 ] 、コンポーネントの独立した展開、大粒度のデータ転送、コンテンツ閲覧者、コンテンツ作成者、開発者にとっての低い参入障壁を満たす基盤が提供されました。
RESTアーキテクチャスタイルで表現された概念のエンティティ関係モデル RESTアーキテクチャスタイルの制約は、以下のアーキテクチャ特性に影響を与えます。[ 1 ] [ 7 ]
コンポーネント間の相互作用のパフォーマンスは、ユーザーが認識するパフォーマンスとネットワーク効率の主要因となる可能性があります。[ 8 ] 多数のコンポーネントとコンポーネント間の相互作用をサポートできる拡張性。 統一されたインターフェースのシンプルさ。 変化するニーズに対応するためにコンポーネントを変更できる(拡張性 とも呼ば れる)。(アプリケーションの実行中でも変更可能)。 サービスエージェントによるコンポーネント間の通信の可視化。 プログラムコードをデータと共に移動させることで、コンポーネントの移植性を実現する。 コンポーネント、コネクタ、またはデータ内の障害が存在する場合のシステムレベルでの故障に対する耐性の信頼性。[ 8 ]
建築上の制約 RESTアーキテクチャスタイルは、6つの指針となる制約を定義しています。[ 7 ] [ 9 ] これらの制約をシステムアーキテクチャに適用すると、パフォーマンス、スケーラビリティ、シンプルさ、変更容易性、可視性、移植性、信頼性などの望ましい非機能特性が得られます。 [ 1 ]
正式な REST 制約は次のとおりです。[ 10 ]
クライアント/サーバー – クライアントは明確に定義されたインターフェースによってサーバーから分離されている ステートレス – 特定のクライアントが「休止状態」にあるときは、サーバーのストレージを消費しません。 キャッシュ – レスポンスはキャッシュ可能性を示します 均一なインターフェース 階層型システム – クライアントは通常、エンドサーバーに直接接続されているのか、途中の仲介サーバーに接続されているのかを判別できない。 オンデマンドコード(オプション) – サーバーは、標準仮想マシン内で実行可能なロジックをクライアントに転送することで、クライアントの機能を一時的に拡張またはカスタマイズできます。
統一インターフェース制約は、あらゆるRESTfulシステムの設計において基本となるものです。[ 1 ] これによりアーキテクチャが簡素化され、疎結合化されるため、各部分が独立して進化することが可能になります。この統一インターフェースの4つの制約は次のとおりです。
リクエストにおけるリソースの識別:リクエストでは、URI を使用して個々のリソースが識別されます。リソース自体は、クライアントに返される表現とは概念的に分離されています。たとえば、サーバーはデータベースからHTML 、XML 、またはJSON としてデータを送信する可能性がありますが、これらはいずれもサーバーの内部表現ではありません。 表現を介したリソース操作:クライアントがメタデータ を含むリソースの表現を保持している場合、リソースの状態を変更または削除するのに十分な情報を持っていることになります。自己記述型メッセージ:各メッセージには、メッセージを処理する方法を説明するのに十分な情報が含まれています。たとえば、どのパーサーを呼び出すかは、メディアタイプ によって指定できます。[ 1 ] ハイパーメディアをアプリケーション状態のエンジンとして利用する ( HATEOAS ) – REST アプリケーションの初期 URI にアクセスした後 (人間の Web ユーザーがWeb サイトのホームページに アクセスするのと同様)、REST クライアントは、サーバーが提供するリンクを動的に使用して、必要なすべての利用可能なリソースを検出できる必要があります。アクセスが進むにつれて、サーバーは利用可能な他のリソースへのハイパーリンク を含むテキストで応答します。クライアントにサーバーの構造に関する情報をハードコーディングする必要はありません。[ 11 ]
分類モデル HTTP API を REST 設計のさまざまな原則に準拠しているかどうかに応じて分類するのに役立ついくつかのモデルが開発されています。
参考文献 1 2 3 4 5 6 Fielding, Roy Thomas (2000). "第 5 章: Representational State Transfer (REST)" . Architectural Styles and the Design of Network-based Software Architectures (Ph.D.). University of California, Irvine. 2021-05-13 のオリジナルからアーカイブ済み。2004-08-17 に取得 。 ↑ Fielding, Roy T. (2008-10-20). "REST API はハイパーテキスト駆動でなければならない" . roy.gbiv.com. 2010-03-18 のオリジナルから アーカイブ済み。2016-07-06 に 取得 。 ↑ クードリー、ニック(2012)。メディア 、 社会、世界:社会理論とデジタルメディアの実践 。ロンドン:ポリティ・プレス。p. 2。ISBN 9780745639208 2024年2月27日にオリジナルからアーカイブされました。2021年6月9日 に取得 。1 2 Fielding, Roy Thomas (2000). "第 6 章: 経験と評価" . アーキテクチャ スタイルとネットワーク ベース ソフトウェア アーキテクチャの設計 (博士論文). カリフォルニア大学アーバイン校。2023 年 3 月 26 日にオリジナルから アーカイブ済み。2023 年 6 月 21 日 に取得 。 ↑ 「フィールディングがREST用語の定義について議論」 . groups.yahoo.com。 2015年11月5日の オリジナルからアーカイブ。 2017年8月8日 取得 。 ↑ Fielding, Roy Thomas (2000). "第4章:Webアーキテクチャの設計:問題点と洞察" . アーキテクチャスタイルとネットワークベースのソフトウェアアーキテクチャの設計 (博士論文)。カリフォルニア大学アーバイン校。 2025年1月28日 取得 。 {{cite thesis}}: CS1 maint: url-status (リンク)1 2 Erl, Thomas; Carlyle, Benjamin; Pautasso, Cesare; Balasubramanian, Raj (2012). "5.1". SOA with REST: Principles, Patterns & Constraints for Building Enterprise Solutions with REST . Upper Saddle River, New Jersey: Prentice Hall. ISBN 978-0-13-701251-0 。1 2 Fielding, Roy Thomas (2000). "第 2 章: ネットワークベースのアプリケーション アーキテクチャ" . アーキテクチャ スタイルとネットワークベースのソフトウェア アーキテクチャの設計 (博士論文). カリフォルニア大学アーバイン校。2014 年 12 月 16 日にオリジナルから アーカイブ済み。2014 年 4 月 12 日 に取得 。 ↑ リチャードソン、レナード、ルビー、サム (2007). RESTful Web Services . セバストポル、カリフォルニア州: O'Reilly Media. ISBN 978-0-596-52926-0 。↑ 「REST APIとは?」 www.visual-paradigm.com 2024 年2月24日にオリジナルから アーカイブ済み 。 2024年2月24日 に取得 。 ↑ Gupta, Lokesh (2018年6月2日). "REST HATEOAS" . REST APIチュートリアル . RESTfulAPI.net. 2019年4月7日のオリジナルから アーカイブ済み。 2019年 3月10日 取得 。 ↑ 「HTTP API の分類」 . algermissen.io . 2023-01-29 のオリジナルから アーカイブ済み。2023-01-29 に 取得 。 ↑ Ivan Salvadori、Frank Siqueira (2015年6月)。 「セマンティックRESTful Web APIの成熟度モデル」 。 会議:Webサービス(ICWS)、2015 IEEE国際会議OnAt 。ニューヨーク。 2024年2月27日のオリジナルから アーカイブ 。 2020年12月14日 に ResearchGate経由で取得。
さらに読む パウタッソ、チェザーレ;ワイルド、エリック;アラルコン、ローザ(2014)、『REST:高度な研究トピックと実践的応用』 、シュプリンガー、ISBN 9781461492986 Pautasso, Cesare; Zimmermann, Olaf; Leymann, Frank (2008年4月)、「RESTful Webサービスと「ビッグ」Webサービス」、第17回国際ワールドワイドウェブ会議議事録 、pp. 805–814 、doi : 10.1145/1367497.1367606、ISBN 9781605580852 S2CID 207167438 Ferreira、Otavio (2009 年 11 月)、Semantic Web Services: A RESTful Approach 、IADIS、ISBN 978-972-8924-93-5 ファウラー、マーティン(2010年3月18日)。「リチャードソン成熟度モデル:RESTの栄光へのステップ」 . martinfowler.com . 2017年6月26日 取得 。