はじめに
ようこそ,この記事に辿り着いた皆様方.
ここに記載されたリンクを含めて,REST APIの理解はここで事足りるでしょう.
RESTの問題を解決するために開発されたクエリ言語GraphQLなどがありますが,RESTは未だ大半のWebAPIに用いられている概念です.
今現在(2024年),新規でアプリケーションを実装する際にも当然使用される設計手法です.
RESTとは
REpresentational State Transfer(REST)
直訳すると「具象的な状態転送」.RESTとは,具象的(はっきり目に見えてわかるように)状態を転送するようなWeb APIのアーキテクチャ、設計ルールのこと
RESTは,2000年にRoy Thomas Fielding氏の論文「Architectural Styles and the Design of Network-based Software Architectures」にて初めて提唱された.
RESTのルールに従ったAPIをREST APIと言ったりする.
REST 6大設計原則
Roy Thomas Fielding氏は論文のCHAPTER 5で6つの原則を提唱
- Client-Server(クライアント・サーバ)
- Stateless(ステートレス)
- Cache(キャッシュ)
- Uniform Interface(統一インターフェース)
- Layered System(階層化システム)
- Code-On-Demand(コード・オン・デマンド)
RESTを分かりやすく理解できる有名なモデル
Richardson Maturity Model(リチャードソン成熟度モデル)
2000年の原論文から約8年後,2008年にレオナルド・リチャードソンによって提唱された.
RESTに準拠して開発する場合,どのように改善すればより成熟するか分かる指標
Level 0:Plain Old XML(昔ながらの単純にXMLを返すやり方)
Level 1:URLでリソースを表すようにする(リソースを動詞でなく名詞で表す)
Level 2:HTTPメソッドGET, POST, PUT, DELETE等を正しく使い分ける
Level 3:レスポンスの中に関連するリンクを含める
Level 3のHypermedia ControlsはHATEOAS (Hypertext As The Engine Of Application State)という略語を使われたりする. HATEOASはヘイタスなどと発音されるらしく,簡単にいうとレスポンスに関連するリソースのURLを含めるという規約である.これだけでは難しいので下のリンクを参考にされたし.
他サイトのREST定義引用
REST(Representational State Transfer)とは、分散システムにおいて複数のソフトウェアを連携させるのに適した設計原則の一つ。2000年にロイ・フィールディング(Roy Fielding)氏が提唱した。狭義には、それをWebシステムに適用したソフトウェアの設計様式を指し、一般にはこの意味で用いられることがほとんどである。
REST (Representational State Transfer) は、効率的で信頼性が高く、スケーラブルな分散システムを実現するためのソフトウェアアーキテクチャ設計上の一連の制約条件のことです。
REST の基本的な考え方は、リソース、たとえば文書が、よく認識され、言語にとらわれず、確実に標準化されたクライアント/サーバーのやりとりで転送するというものです。サービスがこれらの制約に準拠している場合、 RESTful とみなされます。
RESTの参考になるリンク
How I Explained REST to My Wife(私がどのようにしてRESTを妻に説明したか: 和訳)
リチャードソンによる成熟度モデルのマーティン・ファウラーによる解説
http://martinfowler.com/articles/richardsonMaturityModel.html
マーティン・ファウラーの説明
http://www.crummy.com/writing/speaking/2008-QCon/act3.html
原論文著者ロイ・フィールディング氏のブログ
https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
REST APIに関するQiitaの記事
HATEOASを理解するための参考サイト
RESTの記事
RESTの参考動画
WebAPIの歴史におけるREST