SlideShare uma empresa Scribd logo
1 de 31
Web API: The Good Parts 落穂ひろい
水野貴明
@mizuno_takaaki
本日のお話
• APIリクエストの回数を減らす
• 非同期API
• SSKDs向けAPIとAPIバレ
• クライアントサイドとサーバサイドの役割分担
まずはじめに一言
まずはじめに一言
誤字脱字が多くて大変申し訳ありません
なぜ表紙は蛇なのか
Python関係のホント間違える人多数
息子が有毒性物を調べるのにハマっており、有
毒性物をリクエストしたらこうなった
本書を書くにあたって
• コードを載せない
– コードを載せると分厚くなるし、特定の言語に寄って
しまう
– コードを載せるとAPIそのものの設計とは違うところに
目が言ってしまう危険性がある
• 言葉の細かい定義よりも使いやすさを
– RESTとはなにか、など
• 決定的な選択肢がない場合でも、自分なりの意
見を述べる
– The Good Partsシリーズを名乗る上での挟持
本書で一番お伝えしたいこと
使いやすいAPIを
設計しよう
使いやすいとは
• 意味がわかりやすい
• 一貫性がある
• 標準(デファクト・スタンダード含む)にそって
いる(ので類推がきく)
• クライアントが処理しやすい
• テストがしやすい
• ドキュメントがわかりやすい
使いやすいとは
• RESUfulであることではない
• 自由度が高いことではない
APIリクエストの回数を減らす
APIはDBのインターフェイスではない
• users、items、photos、players … それぞれの
データを別々のエンドポイントに取得しに行く
のは大変
• モバイル・アプリ向けAPIは「1スクリーン、1
APIコール、1 セーブ、1 APIコール」
– http://wazanova.jp/items/1283
• クライアントが使いやすい、コール数が少なく
てすむデータ形式にすべき
チャンクでのAPI呼び出し
• 複数の処理をまとめて1回で呼び出す
• 結果もまとめて1回で返る
クライアント サーバ
リクエス
トC
リクエス
トB
リクエス
トA
レスポ
ンスC
レスポ
ンスB
レスポ
ンスA
複数のIDを一度に取得
• https://api.example.com/v1/users/100,101
• https://api.example.com/v1/users?id=100,101
• https://api.example.com/v1/users?id[]=100&i
d[]=101
非同期なAPI
非同期なAPIとは
• リクエスト時に直ぐに結果が返らず、クライア
ントのリクエストした処理が完了するのにはそ
の後しばらく時間がかかる
• Job Queueシステムへのインターフェイス
• コールされてから結果を返すまでの処理が重
いケースに用いられる
– 課金処理
– データ集計処理
非同期APIならではの設計ポイント
• どうやって処理の完了を知り、結果を取得す
るか
• クライアントからのリクエストと処理の結果を
どうやってひもづけるか
Push型
• 例: PayPalのAPI ( Mass Payなど )
• リクエストの際にはパラメータのチェックなど
最低限なもののみを行い、支払いができたか
どうかにかかわらずOKを返す ( OK = 受付完
了 )
• 予めクライアントが登録しておいたURIに
IPN(Instant Payment Notification)なるPOSTリ
クエストが飛んでくる
• そこで初めて成功失敗がわかる
Pull型
• FacebookのAds APIのレポート
• アクセスするとIDが取れる
• そのIDを使って結果取得用のエンドポイント
を叩く
• 処理が完了していたら結果が返る
PushとPull
• Pull型のほうがシンプルで実装が容易
– Pushだとアクセスに失敗した時のリトライ処理を
サーバサイドでも用意しなくてはならない
– Push型だとクライアントサイドのテストがやりづら
い
• PayPalはテストIPN送信ページを用意
– ところがすべてのIPNタイプに対応していない…
APIは隠してもバレる
APIは隠してもバレる
• 自分たちのウェブサイト/アプリのためにAPIを
作りたい
• 一般には公開しない
• でもサービスがメジャーになると、簡単にバレ
て解析される
例.1 Vine
例2. AirBnB
APIは隠してもバレる
• したがって一般公開しないAPI ( いわゆる
SSKDs 向け API) でもネット上に公開している
場合はセキュリティなどの問題はきちんと気
をつける
ちょっと違った事例
Twitter公式クライアントのコンシューマキー
• Twitterの公式クライアント(iPhoneやAndroid
など)のコンシューマーキーを解析して公開し
た人がいた
• このコンシューマーキーでアクセスすると、
Rate Limitが若干ゆるかった
• フリーミアムやユーザーの支払額に寄ってリ
ミットの量を変更している場合はこうしたリス
クもありうることを念頭に置く
WEB APIと SDK
あるいは担当をどこで分けるか問題
Web APIとSDK
あるいは担当をどこで分けるか問題
サーバ クライアントネット
ワーク
Web APIとSDK
あるいは担当をどこで分けるか問題
• 最もよくある形
サーバ クライアントネット
ワーク
開発者A 開発者B
Web APIとSDK
あるいは担当をどこで分けるか問題
• SDK
サーバ クライアントネット
ワーク
開発者A 開発者B
SDK
Web APIとSDK
あるいは担当をどこで分けるか問題
• オーケストレーション層
サーバ クライアントネット
ワーク
開発者A 開発者B
オーケス
トレー
ション層
内部ネットワーク
Web APIとSDK
あるいは担当をどこで分けるか問題
• APIアクセスを最適化する上でAPIのコール回
数を減らすのは重要
• ネットワークを境界にするとコールを減らす最
適化が行われづらい気がする
• Web APIをこう叩いて欲しい、こう叩きたいと
いう思想を一致させるためにはネットワーク
の両側を同じ開発者が担当するのもひとつの
解

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
Microsoft Graph APIを活用した社内アプリケーション開発
Microsoft Graph APIを活用した社内アプリケーション開発Microsoft Graph APIを活用した社内アプリケーション開発
Microsoft Graph APIを活用した社内アプリケーション開発
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
 
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おうserviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
 
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみたPython製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
 
基幹システム RDRAモデル
基幹システム RDRAモデル基幹システム RDRAモデル
基幹システム RDRAモデル
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
不動産販売システム
不動産販売システム不動産販売システム
不動産販売システム
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 

Semelhante a Web API: The Good Parts 落穂ひろい

モバイルOSとWeb標準とそれらへのアプローチ
モバイルOSとWeb標準とそれらへのアプローチモバイルOSとWeb標準とそれらへのアプローチ
モバイルOSとWeb標準とそれらへのアプローチ
Kisato
 
CRDF2011(20110225)
CRDF2011(20110225)CRDF2011(20110225)
CRDF2011(20110225)
真 岡本
 

Semelhante a Web API: The Good Parts 落穂ひろい (20)

RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使うRustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
金沢アプリ塾 アプリ・オープンデータとライセンス
金沢アプリ塾 アプリ・オープンデータとライセンス金沢アプリ塾 アプリ・オープンデータとライセンス
金沢アプリ塾 アプリ・オープンデータとライセンス
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
Api meetup LT
Api meetup LTApi meetup LT
Api meetup LT
 
マイクロサービスにおけるクエリー言語について
マイクロサービスにおけるクエリー言語についてマイクロサービスにおけるクエリー言語について
マイクロサービスにおけるクエリー言語について
 
COOKPAD tab 勉強会 2014.04.24
COOKPAD tab 勉強会 2014.04.24COOKPAD tab 勉強会 2014.04.24
COOKPAD tab 勉強会 2014.04.24
 
トイレ使用中APIへの道
トイレ使用中APIへの道トイレ使用中APIへの道
トイレ使用中APIへの道
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
 
モバイルOSとWeb標準とそれらへのアプローチ
モバイルOSとWeb標準とそれらへのアプローチモバイルOSとWeb標準とそれらへのアプローチ
モバイルOSとWeb標準とそれらへのアプローチ
 
PHPやVBAでMovable Typeを操作しようData API Library for PHP/VBAのご紹介
PHPやVBAでMovable Typeを操作しようData API Library for PHP/VBAのご紹介PHPやVBAでMovable Typeを操作しようData API Library for PHP/VBAのご紹介
PHPやVBAでMovable Typeを操作しようData API Library for PHP/VBAのご紹介
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
 
エンジニアのための勉強会 #3 『RESTful API』
エンジニアのための勉強会 #3 『RESTful API』エンジニアのための勉強会 #3 『RESTful API』
エンジニアのための勉強会 #3 『RESTful API』
 
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップ
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップSORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップ
SORACOM Conference Discovery 2017 ナイトイベント | Discovery ラップアップ
 
CRDF2011(20110225)
CRDF2011(20110225)CRDF2011(20110225)
CRDF2011(20110225)
 
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
 
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
 
剣と魔法のログレスーMmoの継続的な改善と運用
剣と魔法のログレスーMmoの継続的な改善と運用剣と魔法のログレスーMmoの継続的な改善と運用
剣と魔法のログレスーMmoの継続的な改善と運用
 

Mais de API Meetup

Mais de API Meetup (20)

煩雑な本人確認(eKYC)/当人認証を銀行子会社に実施させるAPI!
煩雑な本人確認(eKYC)/当人認証を銀行子会社に実施させるAPI!煩雑な本人確認(eKYC)/当人認証を銀行子会社に実施させるAPI!
煩雑な本人確認(eKYC)/当人認証を銀行子会社に実施させるAPI!
 
次世代バンキングシステムを活用した「みんなのBaaS」
次世代バンキングシステムを活用した「みんなのBaaS」次世代バンキングシステムを活用した「みんなのBaaS」
次世代バンキングシステムを活用した「みんなのBaaS」
 
保険業界DXに明るい兆しを 〜 課題から考察する保険API 〜
保険業界DXに明るい兆しを 〜 課題から考察する保険API 〜保険業界DXに明るい兆しを 〜 課題から考察する保険API 〜
保険業界DXに明るい兆しを 〜 課題から考察する保険API 〜
 
Ai inside api meetup 20200929
Ai inside api meetup 20200929Ai inside api meetup 20200929
Ai inside api meetup 20200929
 
TOEIC960点レベルのニューラル機械翻訳サービス Mirai Translatorとは!?
TOEIC960点レベルのニューラル機械翻訳サービス Mirai Translatorとは!?TOEIC960点レベルのニューラル機械翻訳サービス Mirai Translatorとは!?
TOEIC960点レベルのニューラル機械翻訳サービス Mirai Translatorとは!?
 
〜天気予報 API を活かしてビジネスを成功へ〜 ウェザーテック(WxTech)サービスの紹介
〜天気予報 API を活かしてビジネスを成功へ〜 ウェザーテック(WxTech)サービスの紹介〜天気予報 API を活かしてビジネスを成功へ〜 ウェザーテック(WxTech)サービスの紹介
〜天気予報 API を活かしてビジネスを成功へ〜 ウェザーテック(WxTech)サービスの紹介
 
Google Cloud API を活用して簡単に機能追加する
Google Cloud API を活用して簡単に機能追加するGoogle Cloud API を活用して簡単に機能追加する
Google Cloud API を活用して簡単に機能追加する
 
「駅すぱあとWebサービス」ビジネスの変遷 〜変わるものと変わらないもの〜
「駅すぱあとWebサービス」ビジネスの変遷 〜変わるものと変わらないもの〜「駅すぱあとWebサービス」ビジネスの変遷 〜変わるものと変わらないもの〜
「駅すぱあとWebサービス」ビジネスの変遷 〜変わるものと変わらないもの〜
 
運用型広告におけるAPIの活用について 〜APIとビジネスモデル〜
運用型広告におけるAPIの活用について 〜APIとビジネスモデル〜運用型広告におけるAPIの活用について 〜APIとビジネスモデル〜
運用型広告におけるAPIの活用について 〜APIとビジネスモデル〜
 
AIoTプラットフォーム Web APIサービス
AIoTプラットフォーム Web APIサービスAIoTプラットフォーム Web APIサービス
AIoTプラットフォーム Web APIサービス
 
APIbank(メディア)からみた国産APIの現実と未来にむけて
APIbank(メディア)からみた国産APIの現実と未来にむけてAPIbank(メディア)からみた国産APIの現実と未来にむけて
APIbank(メディア)からみた国産APIの現実と未来にむけて
 
公共インフラはAPI化できるか
公共インフラはAPI化できるか公共インフラはAPI化できるか
公共インフラはAPI化できるか
 
Shopify GraphQL API
Shopify GraphQL APIShopify GraphQL API
Shopify GraphQL API
 
Shopify
ShopifyShopify
Shopify
 
APIを活用したANA版Society5.0への挑戦
APIを活用したANA版Society5.0への挑戦APIを活用したANA版Society5.0への挑戦
APIを活用したANA版Society5.0への挑戦
 
モビリティサービスの未来 〜 APIで目指す世界 〜
モビリティサービスの未来 〜 APIで目指す世界 〜モビリティサービスの未来 〜 APIで目指す世界 〜
モビリティサービスの未来 〜 APIで目指す世界 〜
 
みんなの自動翻訳@ TexTraのご紹介
みんなの自動翻訳@ TexTraのご紹介みんなの自動翻訳@ TexTraのご紹介
みんなの自動翻訳@ TexTraのご紹介
 
NHK Linked Data API 〜つながる番組データを目指して〜
NHK Linked Data API 〜つながる番組データを目指して〜NHK Linked Data API 〜つながる番組データを目指して〜
NHK Linked Data API 〜つながる番組データを目指して〜
 
APIで広がる名刺情報の2次活用 〜事例編〜
APIで広がる名刺情報の2次活用 〜事例編〜APIで広がる名刺情報の2次活用 〜事例編〜
APIで広がる名刺情報の2次活用 〜事例編〜
 
APIで次のFinTechサービスをつくろう! 〜freee Dev Communityのご紹介〜
APIで次のFinTechサービスをつくろう! 〜freee Dev Communityのご紹介〜APIで次のFinTechサービスをつくろう! 〜freee Dev Communityのご紹介〜
APIで次のFinTechサービスをつくろう! 〜freee Dev Communityのご紹介〜
 

Último

Último (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Web API: The Good Parts 落穂ひろい