「Web APIの設計」読書メモ
第1章APIデザインとは何か
第2章ユーザーを意識したAPIを設計する
第3章プログラミングインターフェイスを設計する
パスの構造はファイルシステムのディレクトリ構造のようなものと考えるとよい。
/catalog/{producId}
でもいいし、
products/{productId}
でもいい。
RESTの一般的なフォーマット
/{コレクションのアイテムの種類を表す複数形の名前}/{アイテムなどのID}
複数形の名前を利用することはデファクトスタンダード。
resources/{resourceId}/sub-resources/{subResourceId}
のように複数のレベルに拡張も可能。
/products/{productId}
というパスの場合、
GET /products/{productId}
ならば、取得
POST /products/{productId}
ならば、作成
DELETE /products/{productId}
ならば、削除
PATCH /products/{productId}
ならば、更新
PUT /products/{productId}
ならば、置き換え(ない場合は作成)
ゴールのパスとHTTPメソッドのペアに置き換える方法がすぐに思い浮かばない場合、アクションリソースを作成する。
アクションリソースは名詞ではなく動詞で表されるリソース。
単なる関数、クラスのメソッド。
ショッピングカートリソースを/cart
で表すとき、
cart.XXX()
メソッドは/cart/XXX
と表せる。
スタンドアロン関数xxxCart()
とみなして、/xxx-cart
でも問題ない。
上記の場合は、POST
を用いること。
アクションリソースはRESTモデルに全く従っていない。
が、コンシューマにとっては完全に理解可能。
- クライアントとサーバーの分離
- 関心を明確に分離
- ステートレス性
- クライアントのコンテキストをサーバーは保持しない
- キャッシュ可能性
- レスポンスを再利用できるか
- 階層化システム
- サーバーの背後にあるインフラストラクチャは認識しない
- コードオンデマンド
- 実行可能コードをクライアントに転送可能
- 統一インターフェイス
- すべてのやり取りを識別されたリソースに従って行う必要がある
第4章API記述フォーマットを使ってAPIを記述する
第5章単純明快なAPIを設計する
第6章予測可能なAPIを設計する
第8章セキュアなAPIを設計する
モバイルアプリケーションのプライベートAPIはハックの対象にされやすい。
クレデンシャルをコンシューマに送信させることで登録済みのコンシューマと判別できる。
最小権限の原則。
必要最低限に制限することで攻撃可能性を低下できる。
APIのゴールをスコープに分割すべき。
センシティブな内容は本当に返すべきか吟味が必要。
例えば、クレジットカードのカード番号、CVV等。
シーケンシャルなデータベースキーは返してはいけない。
顧客数などの情報を推測できるため。
パーミッションエラーなどは明言しない方が良い。
情報漏洩とみなされる可能性がある。
例えば、悪意ある第三者の攻撃だった場合、暗にそのリソースが存在することを言及しているようなものであるため、
技術スタックに関する詳細情報が露呈してはならない。
NULLPointerExceptionなど。
第9章APIの設計を進化させる
第10章ネットワーク効率のよいAPIを設計する
第11章コンテキストに基づいてAPIを設計する
第12章APIを文書化する