SlideShare a Scribd company logo
1 of 28
Download to read offline
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

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

What's hot (19)

我が家のフロントエンド開発事情
我が家のフロントエンド開発事情我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
 
smartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用についてsmartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用について
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
デザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまでデザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまで
 
Speech API の概要(Microsoft Cognitive Services)
Speech API の概要(Microsoft Cognitive Services)Speech API の概要(Microsoft Cognitive Services)
Speech API の概要(Microsoft Cognitive Services)
 
ACI Stateful APP 作ってみた
ACI Stateful APP 作ってみたACI Stateful APP 作ってみた
ACI Stateful APP 作ってみた
 
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
 
無料で始めるアプリのバックエンド開発
無料で始めるアプリのバックエンド開発無料で始めるアプリのバックエンド開発
無料で始めるアプリのバックエンド開発
 
スキスキIonic
スキスキIonicスキスキIonic
スキスキIonic
 
エンジニアのための勉強会 #3 『RESTful API』
エンジニアのための勉強会 #3 『RESTful API』エンジニアのための勉強会 #3 『RESTful API』
エンジニアのための勉強会 #3 『RESTful API』
 
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
 
WebAPIのこれまでとこれから
WebAPIのこれまでとこれからWebAPIのこれまでとこれから
WebAPIのこれまでとこれから
 
Build 2017 更新情報 Cognitive Services 編
Build 2017 更新情報 Cognitive Services 編Build 2017 更新情報 Cognitive Services 編
Build 2017 更新情報 Cognitive Services 編
 
Vtecxlt20151201
Vtecxlt20151201Vtecxlt20151201
Vtecxlt20151201
 
Onsen UIが目指すもの
Onsen UIが目指すものOnsen UIが目指すもの
Onsen UIが目指すもの
 
Onsen UI 2.0とUIライブラリの未来
Onsen UI 2.0とUIライブラリの未来Onsen UI 2.0とUIライブラリの未来
Onsen UI 2.0とUIライブラリの未来
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
 
iQONを支えるクローラーの裏側
iQONを支えるクローラーの裏側iQONを支えるクローラーの裏側
iQONを支えるクローラーの裏側
 
WordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリWordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリ
 

Similar to Api設計

Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!CData Software Japan
 
WebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWebWebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWebKensaku Komatsu
 
オープンデータ Web API
オープンデータ Web APIオープンデータ Web API
オープンデータ Web APIHironori Sakamoto
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2Yushi_Takagi
 
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門Asami Abe
 
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチKazuya Sugimoto
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshopYoichiro Sakurai
 
Web API を気軽に使える ツールやサービスのご紹介
Web API を気軽に使えるツールやサービスのご紹介Web API を気軽に使えるツールやサービスのご紹介
Web API を気軽に使える ツールやサービスのご紹介CData Software Japan
 
20170420 infoteria apiセミナーupload
20170420 infoteria apiセミナーupload20170420 infoteria apiセミナーupload
20170420 infoteria apiセミナーuploadCData Software Japan
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
Tableau Developers Club - Web Data Connector handson
Tableau Developers Club - Web Data Connector handsonTableau Developers Club - Web Data Connector handson
Tableau Developers Club - Web Data Connector handsonKenji Noguchi
 
Adwords Api Developer Guide Summary
Adwords Api Developer Guide SummaryAdwords Api Developer Guide Summary
Adwords Api Developer Guide SummaryToshiyuki Maeda
 
AppPotモバイルアプリ開発『内製化』
AppPotモバイルアプリ開発『内製化』AppPotモバイルアプリ開発『内製化』
AppPotモバイルアプリ開発『内製化』Ryohei Sogo
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springkounan13
 
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 についてNatsuki Yamanaka
 

Similar to Api設計 (20)

Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
 
WebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWebWebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWeb
 
オープンデータ Web API
オープンデータ Web APIオープンデータ Web API
オープンデータ Web API
 
Whats ACI API?
Whats ACI API?Whats ACI API?
Whats ACI API?
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
 
20170705 apiをつくろう
20170705 apiをつくろう20170705 apiをつくろう
20170705 apiをつくろう
 
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
 
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
 
APICのREST API入門
APICのREST API入門APICのREST API入門
APICのREST API入門
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
 
Web API を気軽に使える ツールやサービスのご紹介
Web API を気軽に使えるツールやサービスのご紹介Web API を気軽に使えるツールやサービスのご紹介
Web API を気軽に使える ツールやサービスのご紹介
 
20170420 infoteria apiセミナーupload
20170420 infoteria apiセミナーupload20170420 infoteria apiセミナーupload
20170420 infoteria apiセミナーupload
 
Api as a product
Api as a productApi as a product
Api as a product
 
APIとは
APIとはAPIとは
APIとは
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
Tableau Developers Club - Web Data Connector handson
Tableau Developers Club - Web Data Connector handsonTableau Developers Club - Web Data Connector handson
Tableau Developers Club - Web Data Connector handson
 
Adwords Api Developer Guide Summary
Adwords Api Developer Guide SummaryAdwords Api Developer Guide Summary
Adwords Api Developer Guide Summary
 
AppPotモバイルアプリ開発『内製化』
AppPotモバイルアプリ開発『内製化』AppPotモバイルアプリ開発『内製化』
AppPotモバイルアプリ開発『内製化』
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 spring
 
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
 

More from Yuto Suzuki

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

More from Yuto Suzuki (20)

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

Api設計