RESTful APIとは
RESTful APIの歴史的経緯
誕生の背景: RESTful APIは、2000年にロイ・フィールディングによって提唱されました。彼はウェブの基本的なプリンシプルを定義し、それをウェブサービスに適用する方法を提案しました。
ウェブの進化: RESTは、インターネットの拡張とともに進化しました。初期のウェブは、単純なHTMLページの交換に過ぎませんでしたが、時間と共により複雑な機能やデータ交換が求められるようになりました。
SOAPとの比較: RESTが登場する以前、ウェブサービスは主にSOAP(Simple Object Access Protocol)を使用していました。SOAPは強力だが複雑で、設定が煩雑であるため、よりシンプルな代替手段としてRESTが注目されました。
RESTful APIとは
RESTful APIは、ウェブ上で情報を交換するための一連の原則と制約を提供します。以下の特徴があります:
- ステートレス(Stateless): 各リクエストは独立しており、過去のリクエストの状態を保持しません。
- クライアント-サーバー構造: クライアント(ユーザーインターフェース)とサーバー(データストレージ)は独立しています。
- キャッシュ可能: レスポンスはキャッシュ可能であるため、効率が向上します。
- 統一インターフェース: シンプルで標準化された方法でリソースにアクセスします。
実際の例
ここでは、一般的なRESTful APIの使用例を示します:
シナリオ: オンライン書店のAPIを利用して、特定の本の情報を取得する。
リクエスト: クライアント(例えばウェブブラウザ)は、特定のURL(エンドポイント)にHTTPリクエストを送信します。
- 例:
GET https://api.bookstore.com/books/123
- 例:
レスポンス: サーバーは、要求された本の情報を含むレスポンスを返します。
- レスポンスの例(JSON形式):
{
"id": 123,
"title": "プログラミング入門",
"author": "山田太郎",
"price": 1500
}
- レスポンスの例(JSON形式):
この例では、GET
リクエストを使用して本の情報を取得しています。RESTful APIは、このようにウェブ上のリソース(この場合は本)に対して、標準的なHTTPメソッド(GET、POST、PUT、DELETEなど)を使用して操作を行います。
RESTfulなHTTP動詞の例
原則的な例を下記に示します。アプリケーションによっては実装が難しいなど制約もかかるので、 あくまで教科書的な解釈だと思っていてください。
RESTful APIでは、HTTPメソッド(動詞)が重要な役割を果たします。これらはリソース(データやサービス)への操作を定義するために使用されます。以下に、主要なHTTPメソッドとその用途を説明します。
1. GET
- 用途: リソースの読み取り。
- 動作: サーバーから情報を取得し、リソースの表現をクライアントに返します。
- 安全性: GETリクエストは安全であり、リソースの状態を変更すべきではありません。
2. POST
- 用途: 新しいリソースの作成。
- 動作: クライアントから送信されたデータを使用して、新しいリソースを作成します。
- 特徴: POSTは非冪等です。つまり、同じPOSTリクエストを複数回送信すると、同じ操作が複数回実行され、異なる結果が生じる可能性があります。
3. PUT
- 用途: リソースの更新または作成。
- 動作: 指定されたURIにリソースが存在する場合は更新し、存在しない場合は新しいリソースを作成します。
- 特徴: PUTは冪等です。つまり、同じリクエストを何度実行しても、最初の1回を除き、リソースの状態に変更はありません。
4. DELETE
- 用途: リソースの削除。
- 動作: 指定されたURIのリソースを削除します。
- 特徴: DELETEも冪等であり、リソースが既に削除されている場合でも、同じリクエストの結果は変わりません。
5. PATCH
- 用途: リソースの部分的な更新。
- 動作: リソースの一部を変更します。
- 特徴: PATCHは非冪等であり、リクエストに応じてリソースの特定の部分が変更されます。
これらのHTTPメソッドは、RESTful APIの設計において非常に重要です。適切なメソッドを使用することで、APIの意図を明確にし、利用者にとって理解しやすく、使いやすいAPIを実現できます。
RESTful原則に沿っているAPIの例
一般的にRESTfulなURIは議論がありますが、下記のような典型的な特徴があります。
- なるべく動詞を含めない
- 適切なリソースの階層構造を示している
- HTTP動詞によって、リソースに対する振る舞いを表現している
以下に、RESTful APIの原則に則った10個のURI(Uniform Resource Identifier)のサンプルを示します。これらの例は、一般的なウェブアプリケーションやサービスにおける標準的な操作を表しています。
ユーザーの一覧を取得:
GET /users
特定のユーザーの詳細情報を取得:
GET /users/123
新しいユーザーを作成:
POST /users
特定のユーザー情報を更新:
PUT /users/123
特定のユーザーを削除:
DELETE /users/123
特定のカテゴリに属する商品の一覧を取得:
GET /products?category=books
商品の詳細情報を取得:
GET /products/456
注文情報の一覧を取得:
GET /orders
特定の注文の詳細情報を取得:
GET /orders/789
ユーザーの特定の注文に対するコメントを取得:
GET /users/123/orders/789/comments
これらのURIは、RESTful APIの基本的な原則に従っています。つまり、リソース(ユーザー、商品、注文など)に焦点を当て、それらを操作するためのHTTPメソッド(GET、POST、PUT、DELETE)を使用しています。また、リソースの階層関係をURIで表現しています。例えば、/users/123/orders/789/comments
は、ユーザー123の注文789に関連するコメントを表しています。