api設計
TRANSCRIPT
• よく使われるAPIの利用目的
–公開しているWebサービスへのアクセス用API
–他のページに貼り付けるウィジェット
– AJAXを駆使したページ用のAPI
–スマホアプリ用のAPI
– ソシャゲ用のAPI
–社内システムとの連携API
設計に入る前に決めるべきこと
• 何をAPIで公開するのか?
–全データのAPIを作るのか?
–全てのAPIを作るのは、時間がかかるが、ユーザも増え思いがけないメリットも見つかる
• 誰を対象にしたAPIか?
–ユーザを想定しなければ、使いやすいAPIというものは作れない
設計に入る前に決めるべきこと
• 何をAPIで公開するのか?
–全データのAPIを作るのか?
–全てのAPIを作るのは、時間がかかるが、ユーザも増え思いがけないメリットも見つかる
• 誰を対象にしたAPIか?
–ユーザを想定しなければ、使いやすいAPIというものは作れない
エンドポイントって?
http://api.example.com/users
APIにアクセスするためのURI
エンドポイント = ユーザが一番見る情報
→ 覚えやすくどんな機能を持つURIなのか ひと目でわかるものに
エンドポイント設計時の6箇条
1. 短く入力しやすいURI
2. 人間が読んでも理解できるURI
3. 大文字小文字が混在していないURI
4. HackableなURI
5. サーバ側のアーキテクチャによらないURI
6. ルールが統一されたURI
HackableなURIを目指す
• Hackable = ハックしやすい
–修正することで別のURIにするのが容易なもの
http://api.example.com/v1/items/1234 アイテム アイテムID
ルールは統一しよう
http://api.example.com/v1/items
http://api.example.com/v1/item?id=12
http://api.example.com/v1/items/12?status=1
複数形が混ざっていたり、URLのパスが統一されてないものは、 ユーザが混乱してしまう
メソッド
• GET – 基本的にサーバのリソースを変更させない
• POST – 新しいリソースの送信(新規登録)
• PUT – URIで指定し、リソースを全更新
• DELETE – 削除
• PATCH – 指定した一部のリソースのみ更新
データはフラットなほうがいい?
{ "id":1, "name":"Yuto", "birthday":3, "gender":"male" }
{ "id":1, "name":"Yuto", "profile":{ "birthday":3, "gender":"male" } }
フラットにして無駄に階層が増えてしまっている。
答え:なるべくフラットがいい
{ "id":123, "date":"2014-12-02", "sender":{ "id":3, "gender":"male" }, "receiver":{ "id":10, "gender":"female" } }
階層が見やすい場合、OK
配列?フォーマット?
[{“id”:1,”name”:”taro”},{“id”:2,”name”:”hanako”}]
{“friends”: [{“id”:1,”name”:”taro”},{“id”:2,”name”:”hanako”}] }
OR
以下の3つの理由から2を推奨
• レスポンスデータが何を示しているかすぐわかる • データをオブジェクトに統一できる • セキュリティ上のリスクを避ける事ができる
JSONインジェクション
1、
2、
レスポンスの変数名
• わかりやすく、かつ短い名前に
例)userRegistrationDateTime→registeredAt
• ケースは利用しやすいほうで
Googleはキャメルと言っているが、
Twitterなどスネークの企業も多くある
キャメルかスネークか統一すること
• 慣習的でない省略は禁止
{“id”:1,”registeredAt”:”2015-5-5”}