REST API 入門

## はじめに
ようこそ，この記事に辿り着いた皆様方．
ここに記載されたリンクを含めて，REST APIの理解はここで事足りるでしょう．

RESTの問題を解決するために開発されたクエリ言語GraphQLなどがありますが，RESTは未だ大半のWebAPIに用いられている概念です．

今現在(2024年)，新規でアプリケーションを実装する際にも当然使用される設計手法です．

## RESTとは
**RE**presentational **S**tate **T**ransfer(**REST**)
直訳すると「具象的な状態転送」．RESTとは，具象的(はっきり目に見えてわかるように)状態を転送するようなWeb APIのアーキテクチャ、設計ルールのこと

RESTは，2000年にRoy Thomas Fielding氏の論文「[Architectural Styles and the Design of Network-based Software Architectures](https://ics.uci.edu/~fielding/pubs/dissertation/top.htm)」にて初めて提唱された．

RESTのルールに従ったAPIを**REST API**と言ったりする．



## REST　6大設計原則
Roy Thomas Fielding氏は論文のCHAPTER 5で6つの原則を提唱
1. Client-Server(クライアント・サーバ)
2. Stateless(ステートレス)
3. Cache(キャッシュ)
4. Uniform Interface(統一インターフェース)
5. Layered System(階層化システム)
6. 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：レスポンスの中に関連するリンクを含める

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3171994/df4812f1-6f8d-03e4-b1f6-23fa727f85ed.png)

Level 3のHypermedia Controlsは**HATEOAS** (Hypertext As The Engine Of Application State)という略語を使われたりする． HATEOASはヘイタスなどと発音されるらしく，簡単にいうとレスポンスに関連するリソースのURLを含めるという規約である．これだけでは難しいので下のリンクを参考にされたし．

## 他サイトのREST定義引用
>REST（Representational State Transfer）とは、分散システムにおいて複数のソフトウェアを連携させるのに適した設計原則の一つ。2000年にロイ・フィールディング（Roy Fielding）氏が提唱した。狭義には、それをWebシステムに適用したソフトウェアの設計様式を指し、一般にはこの意味で用いられることがほとんどである。

https://e-words.jp/w/REST.html

>REST (Representational State Transfer) は、効率的で信頼性が高く、スケーラブルな分散システムを実現するためのソフトウェアアーキテクチャ設計上の一連の制約条件のことです。
REST の基本的な考え方は、リソース、たとえば文書が、よく認識され、言語にとらわれず、確実に標準化されたクライアント/サーバーのやりとりで転送するというものです。サービスがこれらの制約に準拠している場合、 RESTful とみなされます。

https://developer.mozilla.org/ja/docs/Glossary/REST

## RESTの参考になるリンク
[How I Explained REST to My Wife](https://web.archive.org/web/20130316031532/http://tomayko.com/writings/rest-to-my-wife)(私がどのようにしてRESTを妻に説明したか： [和訳](https://web.archive.org/web/20130330045743/http://www.geocities.jp/yamamotoyohei/rest/rest-to-my-wife.htm))

リチャードソンによる成熟度モデルのマーティン・ファウラーによる解説
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の記事

https://qiita.com/KNR109/items/d3b6aa8803c62238d990#rest%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

https://qiita.com/masato44gm/items/dffb8281536ad321fb08

https://qiita.com/aosho235/items/125af74e2eab66c7a816


HATEOASを理解するための参考サイト

https://recrits.hatenablog.com/entry/2022/07/20/000045

https://uehaj.hatenablog.com/entry/hateoas

https://postd.cc/sprinkle-some-hateoas-on-your-rails-apis/

https://qiita.com/benzookapi/items/f26fd4b676e473008f0f

RESTの記事

https://xtech.nikkei.com/atcl/nxt/column/18/00138/092100882/

RESTの参考動画

https://www.youtube.com/watch?v=rEGmSRZ-dWY

https://www.youtube.com/watch?v=9HXcaDQyWxA&t=648s

https://www.youtube.com/watch?v=lsMQRaeKNDk

WebAPIの歴史におけるREST

https://www.engilaboo.com/rest-api-graphql-history/