OpenAPI Specificationを使ったTwilio APIテスト用モッキングサーバーの構築

3K Views

November 29, 21

スライド概要

2021-11-27に開催されたjsconfjp 2021 (https://jsconf.jp/2021/)で発表させていただいたスライドです。

Twilio OpenAPI Specification - https://github.com/twilio/twilio-oai

profile-image

Developer Evangelist @ Twilio

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

OpenAPI Specificationを 使ったTwilio APIテスト用 モッキングサーバーの構築 池原大然(@neri78)

2.

自己紹介 池原 大然 Developer Evangelist @ Twilio dikehara@twilio.com MMORPG (FF14, EverQuest) DQW Player @Neri78

3.

こちらの日本語版を担当してます ぜひプレイしてみてください! 日本語版: English Ver: https://www.twilio.com/quest/ja https://www.twilio.com/quest/

4.

今日お話しすること ● Twilioとは ● APIの学習とテスト ● OpenAPI Specificationと Twilio OpenAPI Spec ● Twilio OpenAPI Specとその活用 ● まとめ

5.

Twilioとは

6.

Twilio = 様々なコミュニケーションチャネルをクラウドを介し、 プログラム可能な状態で利用できるサービス © 2021 TWILIO INC. ALL RIGHTS RESERVED.

7.
[beta]
例えば...?
TWILIO_PHONE_NUMBER

//メッセージを送信
client.messages
.create({
from: TWILIO_PHONE_NUMBER, to: MY_PHONE_NUMBER,
body: 'Ahoy!'
})
.then((message) =>
console.log(`メッセージ送信をリクエストしました。`));

Ahoy!

8.

例えば...? https://daizen.ngrok.io/subscribe.html

9.

例えば...? https://spatial.chat/

10.

そのほかもいろいろ ソリューションプラットフォーム 管理 & ガバナンス コンタクトセンター Twilio Flex Eメール キャンペーン Marketing Campaigns 開発者向け ツール フィールドサービス自動化 Frontline ガバナンス アクセス制御 データの復元力 ユーザ同意の管理 Data classification エディション SDK デジタルチャネル Voice SMS/Messaging Email Video アイデンティティ Conversations Facebook Messenger WhatsApp Data Edition Admin Edition Security Edition Enterprise Edition 洞察・知見 CLI サービス (ビルディング・ブロック) Authy Verify Lookup ローコード & ノー コード サービス Studio TaskRouter AI/機械学習 Debugger Audience Predictions Language Intelligence Individualized Sending Functions Assets 主要インフラストラクチャ Super Network コミュニケーション・インフラ Phone Numbers Interconnect Short Codes SIP Trunking IoT Sync Segment CDP 顧客データ・インフラ Segment Connections Segment Personas Context Store Event Streams 各種リソース プログラム

11.

APIの 学習とテスト

12.

どんなリソースを活用してますか? ● ● ● ● ● APIドキュメント クイックスタート チュートリアル サンプルアプリ Blog / 動画 結局、「使って」みるしかない

13.

https://www.twilio.com/docs/sms/send-messages

14.
[beta]
リクエストの送信とレスポンス
TWILIO_PHONE_NUMBER

Ahoy!
//メッセージを送信
client.messages
.create({
from: TWILIO_PHONE_NUMBER, to: MY_PHONE_NUMBER,
body: 'Ahoy!'
})
.then((message) =>
console.log(`メッセージ送信をリクエストしました。`));

●
●
●
●
●
●
●

認証方法
Base URL
HTTPメソッド
リクエストのIDは?
ステータスは?
実際に送られた内容は?
送信メッセージのセグメント数は
(1セグメント = 160文字)

15.

商用APIはお金が... TWILIO_PHONE_NUMBER 例: SMSを送信すると1セグメント(≠1通)あたり0.08米国ドル(9円くらい) トライアルはもちろんあるが、無限ではない

16.

OpenAPI Specification と Twilio OpenAPI Spec

17.

OpenAPI Specificationとは OpenAPI Initiative (OAI)によって策定・推進されているAPIインターフェース ドキュメントの記述仕様 https://github.com/OAI/OpenAPI-Specification ”The OpenAPI Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.” ● ● ● プログラム言語に依存しない 人やコンピューターがソースコードや追加のドキュメント、ネットワーク トラフィックの中身にアクセスせずにサービスが提供する機能を理解できる サービスの呼び出しを当てずっぽうにしなくても済む サンプル - https://github.com/OAI/OpenAPI-Specification/tree/main/examples

18.

Twilio’s OpenAPI Specification これまでもさまざまなフレームワーク、言語に対応するライブラリを提供 ● ● サーバーSDK - Node.js, Python, Java, PHP, Ruby, C#, クライアントSDK - JavaScript, iOS, Android Twilioが提供するAPIに対応するOpenAPIドキュメントをベータ版として提供 ● ● ● Go SDK(ベータ版) Postman コレクションの提供 Twilio APIのモックサーバーの構築が可能に

19.

Twilio’s Postman Collections https://www.postman.com/twilio?tab=collections

20.

Twilio APIの モック

21.

Twilio’s OpenAPI Doc + Prism PrismとGitHubに公開されているSpecを使ってモックAPIサーバーを起動 $ prism mock -d https://raw.githubusercontent.com/twilio/twilio-oai/main/spec/json/twilio_api_v2010.json [22:03:13] › [CLI] ℹ info POST http://127.0.0.1:4010/2010-04-01/Accounts/AC88e6ebCabCEcDFd68C80c02DdCFde80f/Usage/Triggers/UTCb888Af79a8c 5B87AccF5fBbF26fa8Ca.json [22:03:13] › [CLI] ℹ info GET http://127.0.0.1:4010/2010-04-01/Accounts/ACaAfa63C6e16cCd4fDB69Ee7877ed5E9A.json [22:03:13] › [CLI] ℹ info POST http://127.0.0.1:4010/2010-04-01/Accounts/ACAEaAc7E68BBceEc2378EEdA627b06C5a.json [22:03:13] › [CLI] ▶ start Prism is listening on http://127.0.0.1:4010

22.

モック用のHttpクライアントを作成 class PrismClient { constructor(prismUrl, requestClient) { this.prismUrl = prismUrl; this.requestClient = requestClient; } request(opts) { opts.uri = opts.uri.replace(/^https\:\/\/.*?\.twilio\.com/, this.prismUrl); return this.requestClient.request(opts); } } exports.PrismClient = PrismClient;

23.
[beta]
Twilio Node ヘルパーライブラリー(SDK)に適用
// モック用httpClient
const httpClient = new PrismClient('http://127.0.0.1:4010', new RequestClient());

// Twilio Nodeヘルパーライブラリを作成
const client = twilio(TWILIO_API_KEY, TWILIO_API_SECRET, {
accountSid: TWILIO_ACCOUNT_SID,
httpClient: httpClient,
});

24.

Demo

25.

まとめ

26.

Twilio Open API Specificationを使ってできること ● 標準以外の言語、フレームワークに対応する クライアントライブラリの作成 ● ローカル・CI環境におけるテスト ● (追加)Postmanを使ってのテスト・学習 ドキュメント: https://www.twilio.com/docs/openapi

27.

告知:Qiita アドベントカレンダー登録募集中! M1 ProチップMacBook Proや4Kゲーミングモニター、ハイレゾヘッドフォンなど豪華賞品を進呈 https://qiita.com/advent-calendar/2021/calendars?q=twilio

28.

ありがとうございました! @neri78