Zenn
🙄

RESTとは

2025/03/31に公開

REST(Representational State Transfer)

Web上でシステム同士が通信するためのアーキテクチャスタイル。

- Representational:代表的な
- State:状態
- Transfer:転送

この頭文字をとったもの。

ビジネスシステムにおいて他のアプリケーションと安全・効率的に通信するために使われる設計思想。
このRESTの考え方に沿ったAPIを、RESTful APIと呼ぶ。


もっと簡単に言うと…

Webサービス設計思想どうやってアプリを作るかの考え方)の1つ。
RESTは、特によく使われている有名な設計方法。

データに対して、HTTPの標準的なメソッド(GET、POST、PUT、DELETEなど)を使って操作する。

建築も目的によって設計が変わるように、アプリケーションも何を目的とするアプリケーションになのかによって設計方法が変わってくる。


REST設計のルール

四原則・または六原則のルールが存在する。(六以上ルールがあったりもする)
これらが満たされてると、RESTfulな設計と呼ばれる。

1. アドレス可動性

リソースを一意なURIで識別できること。
それぞれの情報(リソース)は一意なアドレス(URLやURN)を持っている状態である、ということ。

URIとは?URLとの違い

URI(Uniform Resource Identifier)

❌URLとは別。最初誤字かと思った。

  • リソース(資源)を一意に識別するための文字列。
  • リソースを識別する全体の枠組み。URLとURNを含む。
  • Web上にある、あらゆる識別子の総称。
  • Web上の文書、画像、サービスなどのあらゆるリソースに使われる。
  • URIは大きなカテゴリで、その中にURLやURNが含まれる。

URL(Uniform Resource Locator)

  • URIの一種。
  • Web上にあるリソースの場所を指定する。(ファイルの住所)
  • 例:https://example.com

URN

  • リソースの名前を表すもので、URLが変更されても変わらない。永続的な識別子。
  • Web上にあるファイルの名前。
  • 例:urn:isbn:978-4-06-517094-6
URI(Web上にある、あらゆる識別子の総称。)
├── URL(場所を指定)
└── URN(名前を指定)

参考文献

https://zenn.dev/crebo_tech/articles/article-0008-20240909
https://qiita.com/nakanishi03/items/7c80dfe2fe02e8df7b10

2. 統一インターフェース

  • クライアントとサーバーが一貫したやり方で、やり取りをできるようにするルール。
  • HTTPメソッド(GET・POST・PUT・DELETE)を用いて、リソースを操作させていること。
  • 異なるシステムでも、同じ方法で通信させることで、再利用性・可読性高める。

HTTPメソッドについては、こちら

HTTPメソッドとは

HTTPメソッドとは

クライアントが(主にブラウザやアプリ)がサーバーに対して「何をしたいか」を伝えるための指示。
このURLに対して、何をしたいのか?」を伝える命令の種類

よく使われるHTTPメソッド一覧

メソッド 用途 例え
GET 情報を取得する 「これ見せて!」
POST 新しいデータを作成する 「これ追加して!」
PUT 既存データを更新する 「これまるっと入れ替えて!」
PATCH 一部だけを更新する 「この部分だけ直して!」
DELETE データを削除する 「これ消して!」

例:本の情報を管理するAPI

操作内容 HTTPメソッド URI例
本の一覧を取得 GET /books
本を新しく追加 POST /books
本の内容を更新 PUT /books/123
本を削除する DELETE /books/123

https://zenn.dev/eliri/articles/84ab067739451c

3. ステートレス性

  • サーバーはクライアントの状態を保持しない。
  • 各リクエストは独立して完結している必要がある。
  • cookieやsessionを使ったステートフルな設計とは逆。
  • 昔の情報を保持すると管理が大変。状態を持たないことで、シンプルかつ拡張性の高い設計が可能に。

4. 接続性

  • Webではリソース同士がハイパーリンクでつながっていること、
  • クライアントがは、レスポンスをたどることで、次に何ができるか理解できる。
  • 情報にハイパーリンクを含めることで、ユーザーは別のリソースにも簡単にアクセス可能。

5. クライアントとサーバーの分離

Webサービスなどのアプリケーションは「クライアント」、「サーバー」、「リソース」で構成されている。
RESTでは、クライアントとサーバーが完全に独立して、分離していることが必要。

6. 階層化システム

RESTアーキテクチャを複数の階層(レイヤー)で構築することで、各レイヤーが役割を分担し、他の層から独立して動作するようにする設計スタイル。

クライアントとサーバーの間に、ロードバランサーを設置して負荷分散したりなど
それぞれの階層が、特定の役割を持つようにしていること。

これにより、セキュリティ・負荷分散ができた構造になる。

具体例(よくある3階層):

  1. クライアント層(Client Layer)
    • ユーザーやアプリケーションがアクセスする部分。
    • APIを呼び出す側。
  2. アプリケーションサーバー層(Application Layer)
    • ビジネスロジックの処理。
    • ここでリクエストを受け取り、レスポンスを返す。
  3. データ層(Data Layer)
    • データベースなど実際の情報が保管されている層。

7. オンデマンドのコード(必須機能ではない)

サーバー側にあるコード(HTMLやJavaScript)を、クライアント側にダウンロードして利用できるような構造のこと。
クライアントの機能を一時的に拡張・カスタマイズできる。


RESTful API

APIの中でもRESTの原則に基づいて設計されたAPI。
HTTPメソッドを使用してリソース操作を行う。
特にアクセスが集中するようなアプリケーションに使用する。


参考文献

以下、YouTubeのRESTに関する動画


https://aws.amazon.com/jp/what-is/restful-api/
https://udemy.benesse.co.jp/development/restful-api.html
https://apidog.com/jp/blog/rest-api-rules/

https://qiita.com/Shin_728/items/4f42ef332abdbb25633a
https://qiita.com/mutsuki15/items/ed40ebb5cfdb685cb5c5
https://qiita.com/yutoo89/items/6b24ae9013bde35a132b
https://zenn.dev/airiswim/articles/b7ab2d4b1875e0
https://zenn.dev/wsuzume/articles/280ba652dc4fc7
https://zenn.dev/airiswim/articles/457130f2e0107d
https://zenn.dev/masanarih0ri/articles/ba88f447c81a82

Discussion

ログインするとコメントできます