RESTfulAPIの基礎をまとめてみた

スポンサーリンク

はじめに

Webアプリケーションを作成するうえでRESTfulAPIについて理解することは必須となります。RESTfulAPIを用いるうえでいくつか理解しておくべき内容が存在しています。しかし、現実には多くの原則が守られることなく使用されています。

今回は、備忘録的にRESTfulAPIの基礎となる内容をまとめました。

RESTfulAPIの原則

RESTfulAPIは以下の4原則で成り立っています。

  1. アドレス可能性 (Addressability):
    • すべての情報は一のURIで識別できること
    • 例:https://api.example.com/user/123 はユーザIDが123という特定のリソース
  2. 統一インターフェース (Uniform Interface):
    • リソース操作は、標準的なHTTPメソッド(GET, POST, PUT, DELETEなど)を用いて行うこと
    • データ形式(JSON,XNLなど)も一貫していることが望ましい
  3. ステートレス性 (Stateless):
    • リクエストには必要な情報をすべて含み、過去のリクエストに関する情報は保持しないこと
    • ログインなどセッションの継続性が必要な時はトークンなどを用いる
  4. 接続性(Connectability):
    • リソースには関連する情報へリンクする情報を含めること
    • 例:発注データを取得した際に商品IDなどをリンクできる情報を含める

RESTfulAPIの設計・運用

RESTful APIを設計・運用する上で一般的に必要となるいくつかの要素があります。

リソース定義とURI設計

APIが提供するデータや機能をリソースとして明確に定義します。また、そのリソースに対して直感的で一貫性のあるURIを定義します。

例)
 発注データリソース … /orders (/orders/${id}も想定)
 ユーザ情報リソース … /users (/users/${id}も想定)

HTTPメソッド

HTTPメソッドには、GET、POST、PUT、PATCH、DELETEの5つがあり、リソースの操作に応じて適切に使用する必要があります。メソッドを正しく使用することで操作の明確化、URIの肥大化を防ぐことができます。

以下に、HTTPメソッドの概要をまとめます。

メソッド概要データの送信方法URI例
GETリソースの取得クエリパラメータ/users?id=123
POSTリソースの作成リクエストボディ/users
PUTリソース更新リクエストボディ/users/123
PATCHリソースの部分的な更新リクエストボディ/users/123
DELETEリソースの削除パスパラメータ/users/123

データ形式

クライアントとサーバ間でやり取りするデータ形式を標準化します。一般的にはリクエストボディを用いてJSONやXMLを用いて行われることが非常に多いです。

JSONのデータ例

{
  id: 123,
  loginId: 'test_user',
  name: 'テストユーザ',
  role: 12,
}

XMLのデータ例

<?xml version="1.0" encoding="UTF-8" ?>
<user>
  <id>123</id>
  <loginId>test_user</loginId>
  <name>テストユーザ</name>
  <role>12</role>
</user>

また、リソースの作成・更新のために使用するデータはパスパラメータやクエリパラメータで送信するのは推奨されません。これらはIDの指定や更新方式などの指定に使用します。

ステータスコード

レスポンスには、処理結果としてHTTPステータスコードを付与します。HTTPステータスコードには標準のものがありますので、処理結果に応じてステータスコードの返却をします。

一般的に使用されるステータスコードの一部を以下にまとめてみました。

ステータスコード意味
200リクエスト成功
201リソース作成成功(POSTやPUTで用いる)
400クライアント側エラー(不正な構文など)
403アクセス権限なし
500サーバ側エラー

クライアント側では、これらのステータスコードより成功やエラーを検出します。エラーが発生した場合にはエラーハンドリングを実施してエラーを明確に処理します。必要があれば使用者にエラーを表示して解決を促すことも大切です。

ドキュメンテーション

開発者に向けてAPIを正しく使用できるようにドキュメントを作成します。仕様がわかればどのような形式でも構いませんが、Swaggerなどを用いることでドキュメント更新を省力化することが可能です。また、レスポンス例や実際にAPIを使用する機能がありますので開発時の省力化にも役立ちます。

API Documentation & Design Tools for Teams | Swagger
Simplify API development for users, teams, and enterprises with our open source and professional toolset. Find out how S...

バージョン管理

バージョン管理することにより、APIの仕様変更時に既存のクライアントソフトを使用するユーザへの影響を最小限に抑えることができます。APIによってできることが変わってきますので、切り替え時のユーザへのアナウンス方法をはじめから考えておくとよいです。

例)
 /api/v1/users
 /api/v2/users

さいごに

今回はRESTfulAPIの基礎的な内容をまとめてみました。公に仕様がしっかりと考えられていますのでこれらに準拠することで開発時の標準化を行うことができます。最終的には、開発の生産性向上や品質向上につながると考えています。

なんとなくリクエスト・レスポンスは使われがちなので一度初心に戻って学習しなおすのも良い選択だと思います。

コメント

タイトルとURLをコピーしました