毎週1冊技術書を読んでブログでアウトプットすることが目標で今回が第18弾です。
今回は Web API The Good Parts を読みました。
Web APIの設計、開発、運用について解説しており、Web APIの開発者は必読と言われている本です。
今後のAPI開発で活かせそうなところ満載の良書でした。
- 1章 Web APIとは何か
- 2章 エンドポイント設計とリクエストの形式
- 3章 レスポンスデータの設計
- 4章 HTTPの仕様を最大限利用する
- 5章 設計変更しやすいWeb APIを作る
- 6章 堅牢なWeb APIを作る
- おわりに
1章 Web APIとは何か
-
新しいシステム、サービスを公開する力を持った開発者にAPIを公開することで、彼らがサービスに付加価値を与えてくれ、コアとなる自分たちのサービスがより発展する可能性がある
2章 エンドポイント設計とリクエストの形式
-
HTTPメソッドのPUTとPOSTの使い分け:どちらもサーバ側の情報を変更するためのメソッドであるが、Web APIではデータを修正する場合にPUTを用い、新しいリソースを生成する場合はPOSTを用いるのが一般的である
-
エンドポイントには複数形の名詞を用いるのが基本である。また、エンドポイント内で単語を2つ以上繋げる必要がある場合はハイフンを利用することが多い
-
クエリパラメータとパスの使い分け:一意なリソースを表すのに必要な情報はパスに入れた方が良く、省略可能な情報はクエリパラメータに入れる方が良い
-
ホスト名とエンドポイントの共通部分は「api.example.com」が主流であり、わかりやすさ、簡素さの観点から適切であると言える
-
良い設計を見極めるには様々なAPIの実際の設計を調べ、比較してみることも重要である
3章 レスポンスデータの設計
-
JSONがXMLよりも広まった理由は、JSONの方がシンプルで同じデータを表すのにサイズが小さくて済むこと、webの世界においてクライアントのデフォルト言語であるJavaScriptとの相性がとても良いことがあげられる
-
データフォーマットの指定方法は以下の3つがあり、クエリパラメータを使う方法がよく使われている
-
-
クエリパラメータを使う:例)https://api.example.com/v1/users?format=xml
-
-
クエリパラメータを使って、レスポンスの内容をユーザーが選択できるようにすることも有用である
-
各データ項目(JSONのキー)の名前のつけ方のポイント
-
-
多くのAPIで同じ意味に利用されている一般的な単語を用いる
-
なるべく少ない単語数で表現する
-
変な省略形は極力利用しない
-
単数形/複数形に気をつける:そのキーで返るデータが複数なのか単数なのかで使い分ける(データを配列で返すときは複数形に、それ以外は単数形にする)
-
4章 HTTPの仕様を最大限利用する
-
HTTPのキャッシュの仕組みをAPIでも利用する。HTTPのキャッシュは、2つのタイプがある
-
-
Expiration Model(期限切れモデル):あらかじめレスポンスデータに保存期限を決めておき、期限が切れたら再度アクセスをして取得を行うもの
-
Validation Model(検証モデル):今保持しているキャッシュが最新であるかを問い合わせて、データが更新されていた場合にのみ取得を行うもの
-
-
独自のHTTPヘッダを定義して利用することも可能である
5章 設計変更しやすいWeb APIを作る
6章 堅牢なWeb APIを作る
-
本来アクセスできないはずの情報はサーバ側できちんとチェックをし、アクセスを禁止しておくべきである
-
パラメータなどを修正してリクエストを送ってくる場合もあるので、クライアントから送られてきた情報を信頼せず、サーバ側でも整合性をきちんとチェックする必要がある
-
同じリクエストを再度送信される場合もあるので、そのような場合を想定したサーバ側でのチェックが必要となる
-
一度に大量のアクセスをされてしまう問題を解決するための最も現実的な方法は、ユーザーごとのアクセス数を制限することである。つまり単位時間あたりの最大アクセス回数(レートリミット)を決め、それ以上のアクセスがあった場合にエラーを返すようにする
-
セキュリティ強化につながるHTTPヘッダをきちんとつけるべきである
おわりに
ここまで読んでいただきありがとうございます。
Web APIの開発に関わっていて本書をまだ読んでいない方は是非読んでみることをおすすめします!
やっぱり年末年始は読書が捗りますね。
来週も頑張ります!