8.1 Web API: The Good Parts 1章~2章
- 作者: 水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/11/21
- メディア: 大型本
- この商品を含むブログ (3件) を見る
APIの設計についての200ページ位の本。サクッと1月中旬までに読みたい(できるかな)。
読んでて気になったとことか雑多に纏めていこうかなーと思う。
第1章 Web APIとは何か
Web APIの定義
URIにアクセスすることで、情報を(主に)JSONで取得できるようなもの。つまり、サーバとクライアントとの橋渡しとなる部分で、ブラウザを通して人間が読むためのものではなく、第三者がプログラムを通して利用することを前提としている。
第2章 エンドポイントの設計とリクエストの形式
URI設計
覚えやすく、どんな機能を持つURIなのかひと目で分かるものが良い。
具体的には、以下の通り。
短く入力しやすい
http://api.example.com/service/api/search より http://api.example.com/search が良い。
人間が読んで理解できる
http://api.example.com/s より http://api.example.com/search が良い。
大文字小文字が混在していない
getUserNameとか。こういう名前を付けなければならない状況が発生するのは設計ミス。
改造しやすい(Hackableである)
http://api.example.com/items/123456 というURIは、ID:123456のアイテムに関するURIで、番号を変えれば他のアイテム情報にもアクセスできることが容易に想像可能。
サーバ側のアーキテクチャが反映されていない
APIの形式をデータベースのテーブル構成等に合わせる必要はない。また、どんな言語を利用しているかをURIに反映させる必要もない。逆に、そのような情報を間接的に公開してしまうことで、攻撃者にとって有益な情報を与えてしまうことになる。
ルールが統一されている
http://api.example.com/items/123456 と http://api.example.com/friends?id=123456 のようなURIを混在させない
HTTPメソッドの利用
HTTPメソッドにはGET・POSTの他にも、PUT・DELETE等も存在する。エンドポイントは一箇所にして、メソッドによって操作を変更するのがHTTPの理念に沿っている。
メソッド名 | 説明 |
GET | リソースの取得 |
POST | リソースの新規登録 |
PUT | 既存リソースの更新 |
DELETE | リソースの削除 |
PATCH | リソースの一部変更 |
HEAD | リソースのメタ情報の取得 |
たとえば、http://api.example.com/users というエンドポイントに対して、GETメソッドでアクセスした場合はユーザーの一覧取得、POSTメソッドでアクセスした場合はユーザーの新規登録を行うと良い。
検索のクエリパラメータ
タイムライン一覧の検索等では、データの全てを取得することは考えにくく、取得数の制限(limit)とどこから取得するかという情報が必要になる。
「どこから取得するか」に関しては、相対位置(offset)と絶対位置(since_id)の2つが考えられる。
相対位置では、最新情報からいくつかの情報を省いて取得する。これは、更新頻度の高いテーブルには適さない。また、データ数が増えるに連れて線形的に動作速度が落ちる。
絶対位置では、クライアントが最後に取得した情報のIDを利用する。
自分の情報へのエイリアス
自分の情報を取得するのに、http://api.example.com/users/123456 というURIの他に、http://api.example.com/users/self 等のURIを利用できるようにした方が良い。
OAuth2.0の利用
OAuth2.0は、標準化された、広く認知された仕組み。あるサービスのユーザー情報を第三者サービスに、情報源サービスのパスワードを第三者サービスに送信すること無く流すことが可能。
SSKDsに対するAPIデザイン
第三者サービスがホーム画面を用意することが分かっているなら、そこに必要な情報(ユーザー情報・タイムライン等)を全て一度に返すAPIを用意すべき。
1スクリーン1APIコール、1セーブ1APIコール。
HATEOAS と REST LEVEL3 API
REST LEVEL
(重大っぽい)誤植?
この本、割と誤植が多いので、重大っぽい誤植だけ挙げておく。初版第1刷です。
図2-6 OAuthの基本的な仕組み
3番と4番の矢印が逆。