RESTfulとは
「RESTで求められる原則に従っている」こと
REST原則
REST原則には6つの要素が求められる
クライアント/サーバー
画面とデータで関心事を分離
クライアント側がトリガー、サーバー側は受け身
階層化システム
多層アーキテクチャー構成
コードオンデマンド
クライアントコードをダウンロードして実行できる(リリース後にクライアントコードを変更できる)
統一インターフェース
・リソースの識別(URIを用いてサーバーに保存されたデータを識別する)
・表現を用いたリソースの操作(断面情報を利用してサーバー上のデータを操作する)
・自己記述メッセージ(メッセージ内容が何であるか、ヘッダーに記述されている)
・アプリケーション状態エンジンとしてのハイパーメディア(HAYEOAS)
HATEOAS:レスポンスに現在の状態を踏まえて関連するハイパーリンクが含まれている
ステートレス
サーバーはリクエストだけでコンテキストを理解できる
キャッシュ制御
クライアントはレスポンスをキャッシュできる
REST API 設計レベル
LEVEL 0:HTTPを使っている
LEVEL 1:リソースの概念を導入(リソースごとにURLを分割)
LEVEL 2:HTTPの動詞を導入(LEVEL 1に加えてHTTPメソッドを活用)
LEVEL 3:HATEOASの概念を導入(LEVEL 2に加えてレスポンスにリソース間のつながりが含まれている)
URI設計について
- 短く入力しやすい(冗長なパスを含まない)
- 人間が読んで理解できる(省略しない)
- 大文字小文字が混在していない(すべて小文字)
- 単語はハイフンで繋げる
- 単語は複数形を利用する
- エンコードを必要とする文字を使わない
- サーバー側のアーキテクチャが反映されていない
- 改造しやすい
- ルールが統一されている
主要なHTTPメソッド
メソッド名 | 説明 |
---|---|
GET | リソースの取得 |
POST | リソースの新規登録 |
PUT | 既存リソースの更新/リソースの新規登録 |
DELETE | リソースの削除 |
レスポンスのデータフォーマット
主要なレスポンスフォーマットは3種類
XML
- テキスト形式
- タグで記述
- タグは入れ子にできる
- タグに属性を付けられる
JSON
- テキスト形式
- JavaScriptを元にしたフォーマット
- XMLに比べてデータ量を減らせる
- オブジェクトは入れ子にできる
JSONP (JSON with Padding)
- テキスト形式
- データフォーマットのようにみえるが「JavaScript」のコード
- クロスドメインでデータを受け渡すことができる
データの内部構造で意識すること
- エンベロープは使わない
- オブジェクトはできるだけフラットにする(レスポンス容量を減らす)
- ページネーションをサポートする情報を返す
- プロパティの命名規則はAPI全体で統一する(スネークケース、キャメルケース等)
- 日付はRFC3399(W3C-DTF)形式を使う
- 大きな数値(64bit整数)は文字列で返す
参考文献