SlideShare a Scribd company logo
APIの設計ってどうやるの?
鈴木 雄登
APIの種類
• よく使われるAPIの利用目的
– 公開しているWebサービスへのアクセス用API
– 他のページに貼り付けるウィジェット
– AJAXを駆使したページ用のAPI
– スマホアプリ用のAPI
– ソシャゲ用のAPI
– 社内システムとの連携API
こんなサービスも
Programmable Web
こんなサービスも
Programmable Web
でも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.php
http://api.example.com/v1/cgi-bin/items.php
ルールは統一しよう
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
– 指定した一部のリソースのみ更新
レスポンスデータの設計
レスポンス設計時の注意点
• ChattyなAPIを作らない
• データはフラットのほうがいいのか
• 配列で返すかオブジェクトで返すか
• レスポンスのケース
• エラーレスポンス
ChattyなAPI:
何度もアクセスしないと必要なデータが揃わないAPI
APIユーザ
面倒くさいAPIになる
ChattyなAPIは作らない
データはフラットなほうがいい?
{
"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”}
エラーレスポンス
• ステータスコードは正しいものを返す
– 登録失敗しているのに、200とかを返さない
• エラー内容をクライアントに返す
– ヘッダに入れるかボディにいれるかは好み
まとめ
• どんなユーザが使うかを決める
• その上でユーザが使いやすいものを想像し、
APIを設計
• 設計におけるルール
– 基本的には慣習に乗っ取る
– 慣習が使いづらいものであれば、そこは直す
参考にした本
水野 貴明 著
2014年11月 発行
by apigee
free

More Related Content

What's hot (19)

PDF
我が家のフロントエンド開発事情
Naoki Yamada
 
PPTX
smartFXにおけるApache Cordovaの活用について
剛志 森田
 
KEY
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
 
PPTX
デザイナさんにGithubでpr投げてもらうまで
Hideharu Okuma
 
PDF
Speech API の概要(Microsoft Cognitive Services)
Atsushi Yokohama (BEACHSIDE)
 
PPTX
ACI Stateful APP 作ってみた
yushimaz
 
PDF
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Shinichiro Yoshida
 
PDF
無料で始めるアプリのバックエンド開発
Shoichi Takagi
 
PDF
スキスキIonic
Kon Yuichi
 
PPTX
エンジニアのための勉強会 #3 『RESTful API』
Naoki Yoshitake
 
PPTX
爆速フレームワークでREST APIを作った話
Shohei Tai
 
PDF
WebAPIのこれまでとこれから
Yohei Yamamoto
 
PDF
Build 2017 更新情報 Cognitive Services 編
Atsushi Yokohama (BEACHSIDE)
 
PDF
Vtecxlt20151201
Shinichiro Takezaki
 
PPTX
Onsen UIが目指すもの
アシアル株式会社
 
PDF
Onsen UI 2.0とUIライブラリの未来
アシアル株式会社
 
PDF
iQONの開発手法 at iQONエンジニアセミナー
Imamura Masayuki
 
PDF
iQONを支えるクローラーの裏側
Takehiro Shiozaki
 
PDF
WordPress APIで作るモバイルアプリ
アシアル株式会社
 
我が家のフロントエンド開発事情
Naoki Yamada
 
smartFXにおけるApache Cordovaの活用について
剛志 森田
 
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
 
デザイナさんにGithubでpr投げてもらうまで
Hideharu Okuma
 
Speech API の概要(Microsoft Cognitive Services)
Atsushi Yokohama (BEACHSIDE)
 
ACI Stateful APP 作ってみた
yushimaz
 
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Shinichiro Yoshida
 
無料で始めるアプリのバックエンド開発
Shoichi Takagi
 
スキスキIonic
Kon Yuichi
 
エンジニアのための勉強会 #3 『RESTful API』
Naoki Yoshitake
 
爆速フレームワークでREST APIを作った話
Shohei Tai
 
WebAPIのこれまでとこれから
Yohei Yamamoto
 
Build 2017 更新情報 Cognitive Services 編
Atsushi Yokohama (BEACHSIDE)
 
Vtecxlt20151201
Shinichiro Takezaki
 
Onsen UIが目指すもの
アシアル株式会社
 
Onsen UI 2.0とUIライブラリの未来
アシアル株式会社
 
iQONの開発手法 at iQONエンジニアセミナー
Imamura Masayuki
 
iQONを支えるクローラーの裏側
Takehiro Shiozaki
 
WordPress APIで作るモバイルアプリ
アシアル株式会社
 

Similar to Api設計 (20)

PPTX
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
 
PPTX
WebIntentsにより拓かれる次のWeb
Kensaku Komatsu
 
PDF
オープンデータ Web API
Hironori Sakamoto
 
PDF
Whats ACI API?
Takao Setaka
 
PPTX
devsami kansai 2012 #c2
Yushi_Takagi
 
PPTX
20170705 apiをつくろう
CData Software Japan
 
PDF
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
 
PDF
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
Kazuya Sugimoto
 
PDF
APICのREST API入門
Takehiro Yokoishi
 
KEY
20120413 nestakabaneworkshop
Yoichiro Sakurai
 
PPTX
Web API を気軽に使える ツールやサービスのご紹介
CData Software Japan
 
PPTX
20170420 infoteria apiセミナーupload
CData Software Japan
 
PPTX
Api as a product
CData Software Japan
 
PPTX
APIとは
moonfactory Inc.
 
PDF
おすすめインフラ! for スタートアップ
Koichiro Sumi
 
PDF
Tableau Developers Club - Web Data Connector handson
Kenji Noguchi
 
PPTX
Adwords Api Developer Guide Summary
Toshiyuki Maeda
 
PDF
AppPotモバイルアプリ開発『内製化』
Ryohei Sogo
 
PPTX
Swagger jjug ccc 2018 spring
kounan13
 
PDF
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
Natsuki Yamanaka
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
 
WebIntentsにより拓かれる次のWeb
Kensaku Komatsu
 
オープンデータ Web API
Hironori Sakamoto
 
Whats ACI API?
Takao Setaka
 
devsami kansai 2012 #c2
Yushi_Takagi
 
20170705 apiをつくろう
CData Software Japan
 
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
 
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
Kazuya Sugimoto
 
APICのREST API入門
Takehiro Yokoishi
 
20120413 nestakabaneworkshop
Yoichiro Sakurai
 
Web API を気軽に使える ツールやサービスのご紹介
CData Software Japan
 
20170420 infoteria apiセミナーupload
CData Software Japan
 
Api as a product
CData Software Japan
 
APIとは
moonfactory Inc.
 
おすすめインフラ! for スタートアップ
Koichiro Sumi
 
Tableau Developers Club - Web Data Connector handson
Kenji Noguchi
 
Adwords Api Developer Guide Summary
Toshiyuki Maeda
 
AppPotモバイルアプリ開発『内製化』
Ryohei Sogo
 
Swagger jjug ccc 2018 spring
kounan13
 
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
Natsuki Yamanaka
 
Ad

More from Yuto Suzuki (20)

PPTX
5xx解消への道のり
Yuto Suzuki
 
PPTX
MySQLのインデックス入門
Yuto Suzuki
 
PPTX
Ad vol.2
Yuto Suzuki
 
PPTX
広告勉強会
Yuto Suzuki
 
PPTX
Mastering Bitcoin ~network~
Yuto Suzuki
 
PPTX
Aerospike基本のき
Yuto Suzuki
 
PPTX
いまさらAkkaStream
Yuto Suzuki
 
PPTX
Introduction of View Through Tracking
Yuto Suzuki
 
PPTX
エンジニアのためのマーケティング
Yuto Suzuki
 
PPTX
How to Build a Team
Yuto Suzuki
 
PPTX
プロダクトにおけるScala
Yuto Suzuki
 
PPTX
Do you like scala
Yuto Suzuki
 
PPTX
Re invent
Yuto Suzuki
 
PPTX
Slackから始めるChatOps
Yuto Suzuki
 
PPTX
大学の時の研究の話
Yuto Suzuki
 
PPTX
F.O.Xを支える技術
Yuto Suzuki
 
PPTX
Scala戦士を増やせ
Yuto Suzuki
 
PPTX
Recommend scala
Yuto Suzuki
 
PDF
スクラムに学ぶ開発の回し方
Yuto Suzuki
 
PDF
Breezeで始めるデータ分析
Yuto Suzuki
 
5xx解消への道のり
Yuto Suzuki
 
MySQLのインデックス入門
Yuto Suzuki
 
Ad vol.2
Yuto Suzuki
 
広告勉強会
Yuto Suzuki
 
Mastering Bitcoin ~network~
Yuto Suzuki
 
Aerospike基本のき
Yuto Suzuki
 
いまさらAkkaStream
Yuto Suzuki
 
Introduction of View Through Tracking
Yuto Suzuki
 
エンジニアのためのマーケティング
Yuto Suzuki
 
How to Build a Team
Yuto Suzuki
 
プロダクトにおけるScala
Yuto Suzuki
 
Do you like scala
Yuto Suzuki
 
Re invent
Yuto Suzuki
 
Slackから始めるChatOps
Yuto Suzuki
 
大学の時の研究の話
Yuto Suzuki
 
F.O.Xを支える技術
Yuto Suzuki
 
Scala戦士を増やせ
Yuto Suzuki
 
Recommend scala
Yuto Suzuki
 
スクラムに学ぶ開発の回し方
Yuto Suzuki
 
Breezeで始めるデータ分析
Yuto Suzuki
 
Ad

Api設計