API設計

RESTful API れすとふるえーぴーあい

RESTHTTPWeb APIJSONエンドポイントステートレス
RESTful APIについて教えて

簡単に言うとこんな感じ!

WebサービスどうしがHTTPで「情報をやり取りするときのお作法」だよ!「この住所に来たらこのデータを返す」ってルールを決めておくことで、スマホアプリもPCも同じ窓口でデータを受け取れるんだ!


RESTful APIとは

RESTful API(レストフル エーピーアイ)とは、REST(Representational State Transfer)というアーキテクチャスタイルの原則に従って設計されたWeb APIのことです。API(Application Programming Interface)とは、ソフトウェアどうしが会話するための「窓口」のようなもので、RESTfulはその窓口の設計ルールを指します。

たとえば「商品一覧を取得したい」「注文を新規登録したい」「ユーザー情報を更新したい」といった操作を、HTTPのURL(エンドポイント)とメソッド(GET・POST・PUT・DELETEなど)の組み合わせで表現するのがRESTful APIの特徴です。スマートフォンアプリ、Webブラウザ、他社サービスなど、異なる環境からでも同じルールで呼び出せるため、現代のWebサービス開発で広く採用されています。

「RESTfulかどうか」は単なる言葉の問題ではなく、設計品質の指標でもあります。RESTの原則に沿った設計は保守しやすく、開発チームが増えても混乱しにくいため、システム発注・選定の場面でも「RESTful APIで提供されているか」は重要な確認ポイントになります。


RESTの6つの原則

RESTには設計上守るべき原則があります。これを理解しておくと、「このAPIはきちんと設計されているか」を判断する目安になります。

原則概要ビジネス的な意味
クライアント・サーバー分離画面側(クライアント)とデータ側(サーバー)を切り離すフロントとバックエンドを独立して改修できる
ステートレスリクエストは毎回完結。サーバーは状態を保持しないスケールアウト(サーバー増設)が容易
キャッシュ可能レスポンスをキャッシュ(一時保存)してよいか明示する通信量削減・高速化
統一インターフェースURLとHTTPメソッドで操作を統一する開発者が直感的に使える
階層化システム中間にプロキシロードバランサーを挟んでよいセキュリティ・可用性の向上
コードオンデマンド(任意)サーバーが実行可能コードを返してもよいJavaScriptの動的配信など(省略可)

覚え方:「クス・キャ・統・階・コ」

クス(クライアント・サーバー)・(ステートレス)・キャ(キャッシュ)・(統一インターフェース)・(階層化)・(コードオンデマンド)」と頭文字でまとめると6原則が整理しやすいです。

HTTPメソッドとCRUD操作の対応

RESTful APIではCRUD(Create・Read・Update・Delete)という4種類のデータ操作を、HTTPメソッドに対応させます。

HTTPメソッド操作例(商品APIの場合)
GET取得(Read)GET /products → 商品一覧を取得
POST新規作成(Create)POST /products → 商品を登録
PUT / PATCH更新(Update)PUT /products/1 → 商品ID:1を更新
DELETE削除(Delete)DELETE /products/1 → 商品ID:1を削除

歴史と背景

  • 2000年 — ロイ・フィールディング(Roy Fielding)がUC Irvineの博士論文でRESTを提唱。HTTPの設計者の一人でもある
  • 2000年代前半SOAP(ソープ)という複雑なXMLベースのAPIが主流だったが、冗長で扱いにくいと批判を受ける
  • 2004〜2006年頃 — Flickr・Amazonが軽量なREST APIを公開し注目を集める。Web 2.0ブームと連動して普及加速
  • 2007〜2010年 — Twitter・FacebookがREST APIを提供。サードパーティアプリ連携のデファクトスタンダードに
  • 2010年代 — スマートフォン普及でモバイルアプリとサーバー間通信の需要が爆発。JSON(ジェイソン)がデータ形式の主流となり、REST APIの開発コストがさらに低下
  • 2015年以降GraphQLgRPCなど新しいAPIスタイルも登場するが、REST APIは現在も最も広く使われる標準的な選択肢

RESTful API vs 他のAPIスタイル

現在よく使われるAPIスタイルを比較します。発注・選定時に「なぜRESTfulを選ぶのか」を説明できるようになります。

APIスタイル比較 観点 RESTful API GraphQL SOAP / gRPC データ形式 JSON / XML JSON XML / Protobuf 学習コスト 低い 中程度 高い 柔軟なデータ取得 △(固定エンドポイント) ◎(必要な分だけ取得) △〜× 主な用途 汎用Webサービス モバイル・BFF 企業間・低レイテンシ 代表的な採用例 Twitter / GitHub GitHub v4 / Shopify Google内部 / 金融系 ※ BFF = Backend for Frontend(フロントエンド専用バックエンド)

エンドポイント設計の良い例・悪い例

RESTfulな設計かどうかは、URLの作り方で一目でわかります。

【良い例:名詞ベースのURL】
GET    /users          → ユーザー一覧を取得
GET    /users/42       → ID:42のユーザーを取得
POST   /users          → ユーザーを新規作成
PUT    /users/42       → ID:42のユーザーを全更新
DELETE /users/42       → ID:42のユーザーを削除

【悪い例:動詞がURLに入っている】
GET    /getUser?id=42
POST   /createUser
POST   /deleteUser?id=42   ← DELETEメソッドを使うべき

関連する規格・RFC

規格・RFC番号内容
RFC 9110HTTP Semantics(HTTPの意味論的定義。RESTful APIの基盤)
RFC 9112HTTP/1.1(RESTful APIで最も広く使われるプロトコル)
RFC 7159JSON(RESTful APIのデータ形式として標準的に使われる)
RFC 7807Problem Details for HTTP APIs(エラーレスポンスの標準形式)
RFC 6750OAuth 2.0 Bearer Token(REST APIの認証で広く使われる)

関連用語

  • API — ソフトウェアどうしが連携するための窓口・接続仕様の総称
  • HTTP — RESTful APIの通信プロトコル。GETやPOSTなどのメソッドを定義
  • JSON — RESTful APIで最もよく使われる軽量なデータ交換フォーマット
  • GraphQL — RESTの代替として登場した、柔軟なクエリ型APIスタイル
  • OAuth — RESTful APIへのアクセス権限を安全に委譲するための認証フレームワーク
  • OpenAPI — RESTful APIの仕様を記述・共有するための標準フォーマット(旧Swagger)
  • エンドポイント — APIの「窓口URL」のこと。リソースごとに定義される
  • ステートレス — サーバーがセッション状態を保持しないRESTの重要原則