はじめに
お久しぶりです、takimonです!
今回はRESTについて学んだので、自分の言葉でまとめてみました。
RESTとは
RESTは「Representational State Transfer」の略で、分散型システムにおける設計原則のことです。2000年にロイ・フィールディングによって提唱されました。
RESTfulとは
RESTfulとは、RESTで求められる原則に従っていることを意味します。REST原則に従って設計されたAPIを「RESTful API」と呼びます。
RESTの6つの原則について
REST原則は、6つの制約(制約)から構成されています。
1. クライアント・サーバー
この原則では、ユーザーインターフェース(クライアント)とサーバーの役割を明確に分離します。クライアントがリクエストを送り、サーバーがそれにレスポンスをするというイメージです。
2. 階層化システム
この原則では、サーバーをそれぞれの役割ごとに独立させて、階層ごとに組み合わせます。
3. コードオンデマンド
この原則では、サーバーがクライアントに対して実行可能なコードを提供し、クライアント側でそのコードをダウンロードして実行することを可能にします。
4. 統一インターフェース
この原則は、以下の4つの制約によって成り立っています。
- リソースの識別: URIを用いてサーバーに保存されているデータを識別します。
- 表現を用いたリソースの操作: レスポンスやサーバーにポストするデータを利用して、サーバー側のリソースを操作します。
- 自己記述的メッセージ: メッセージ内容が何であるか、はヘッダーに記述されています。
- HATEOAS(Hypermedia As The Engine Of Application State): レスポンスには、現在の状態に関連するハイパーリンクが含まれます
5. ステートレス
サーバーはクライアントからの各リクエストを独立したものとして扱います。サーバーはリクエストだけで、コンテキストを理解できます。対義語は「ステートフル」です。
6. キャッシュ制御
クライアントはレスポンスをキャッシュできます。
REST API成熟モデルについて
マーチン・ファウラーが2010年にブログで紹介したモデルです。
これは、REST APIの設計がREST原則にどれだけ準拠しているかを示すレベルを定義しています。
REST APIの成熟度は、レベル0からレベル3まで段階的に分類され、一般的にレベル2が「REST API」と呼ばれています。
レベル0: HTTPを使っている
最も基本的なレベルで、HTTPを単なる通信手段として利用している
レベル1: リソースの概念を導入
リソースごとにURLが分割している。
レベル2: HTTPの動詞を導入
レベル1に加えて、HTTPメソッドを活用している。
レベル3: HATEOSの概念が導入
レベル2に加えてレスポンス間のつながりが含まれている。つまり、レスポンス間にハイパーリンクによるつながりが含まれている状態です。
URI設計のポイント
上記のREST原則を踏まえて、URI設計の例と、私が特に重要だと感じたポイントを紹介します。
- 短く入力しやすい: 冗長なパスを含まず、シンプルで覚えやすいURIにする。
- 大文字小文字が混在しない: APIを間違えにくくするには統一が必要で、統一するなら一般的には小文字で統一する。
- 単語はハイフンで繋げる: 可読性を高めるために、単語の区切りにはアンダースコアではなくハイフンを使用する。
- 単語は複数形を利用: URIで表現しているのはリソースの集合なので(例:ユーザーの一覧)、複数形を使用する。
これらのポイントを踏まえ、「movie」をリソースとしたCRUD操作のURIとHTTPメソッドの例を示します。
URI | HTTP Method | 操作 |
---|---|---|
/movies |
GET |
movie情報の一覧を取得 |
/movies/{id} |
GET |
指定のmovie情報を取得 |
/movies |
POST |
movie情報を新規登録 |
/movies/{id} |
PUT |
指定のmovie情報を更新 |
/movies/{id} |
DELETE |
指定のmovie情報を削除 |
おわりに
いかがでしたでしょうか?今回は簡単にではありますが、REST APIについてまとめてみました。
今回の内容は、下記のUdemy講座で勉強しました。REST APIの理解を深めたい方は、ぜひチェックしてみてください!