---
title: OpenAPI Specificationを使ったTwilio APIテスト用モッキングサーバーの構築
tags:  #twilio #openapi #prism #node #node.js  
author: [Daizen Ikehara](https://convert.docswell.com/user/Neri78)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/KYE6LPNQ7V.jpg?width=480
description: 2021-11-27に開催されたjsconfjp 2021 (https://jsconf.jp/2021/)で発表させていただいたスライドです。  Twilio OpenAPI Specification - https://github.com/twilio/twilio-oai
published: November 29, 21
canonical: https://convert.docswell.com/s/Neri78/5QM1RK-twilio-openapi-mock
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/KYE6LPNQ7V.jpg)

OpenAPI Speciﬁcationを
使ったTwilio APIテスト用
モッキングサーバーの構築
池原大然（@neri78）


# Page. 2

![Page Image](https://bcdn.docswell.com/page/5GE51K52J4.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/V9721WN1ER.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/5DJYZLP4EM.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/2V7N345678.jpg)

Twilioとは


# Page. 6

![Page Image](https://bcdn.docswell.com/page/GYJ99QYRJ3.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/5GJ89G6GED.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/MLJLWG9X7R.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/547M9QZ3JW.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/ZP7RG86RJ9.jpg)

そのほかもいろいろ
ソリューションプラットフォーム
管理 &amp;
ガバナンス
コンタクトセンター
Twilio Flex
Eメール キャンペーン
Marketing Campaigns
開発者向け
ツール
フィールドサービス自動化
Frontline
ガバナンス
アクセス制御
データの復元力
ユーザ同意の管理
Data classiﬁcation
エディション
SDK
デジタルチャネル
Voice
SMS/Messaging
Email
Video
アイデンティティ
Conversations
Facebook Messenger
WhatsApp
Data Edition
Admin Edition
Security Edition
Enterprise Edition
洞察・知見
CLI
サービス (ビルディング・ブロック)
Authy
Verify
Lookup
ローコード &amp; ノー
コード サービス
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
各種リソース
プログラム


# Page. 11

![Page Image](https://bcdn.docswell.com/page/NPJXX8MYJX.jpg)

APIの
学習とテスト


# Page. 12

![Page Image](https://bcdn.docswell.com/page/63JKWKG4JD.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/4LE31ZND75.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/V8EDXRW2JG.jpg)

リクエストの送信とレスポンス
TWILIO_PHONE_NUMBER
Ahoy!
//メッセージを送信
client.messages
.create({
from: TWILIO_PHONE_NUMBER, to: MY_PHONE_NUMBER,
body: &#039;Ahoy!&#039;
})
.then((message) =&gt;
console.log(`メッセージ送信をリクエストしました。`));
●
●
●
●
●
●
●
認証方法
Base URL
HTTPメソッド
リクエストのIDは？
ステータスは？
実際に送られた内容は？
送信メッセージのセグメント数は
（１セグメント = 160文字）


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4V7PPW9L78.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/L2JV28M6JQ.jpg)

OpenAPI
Speciﬁcation
と
Twilio OpenAPI
Spec


# Page. 17

![Page Image](https://bcdn.docswell.com/page/Z5EGR5G2JL.jpg)

OpenAPI Speciﬁcationとは
OpenAPI Initiative (OAI)によって策定・推進されているAPIインターフェース
ドキュメントの記述仕様
https://github.com/OAI/OpenAPI-Speciﬁcation
”The OpenAPI Speciﬁcation (OAS) deﬁnes 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 trafﬁc. When properly deﬁned 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 Speciﬁcation removes guesswork in calling a service.”
●
●
●
プログラム言語に依存しない
人やコンピューターがソースコードや追加のドキュメント、ネットワーク
トラフィックの中身にアクセスせずにサービスが提供する機能を理解できる
サービスの呼び出しを当てずっぽうにしなくても済む
サンプル - https://github.com/OAI/OpenAPI-Speciﬁcation/tree/main/examples


# Page. 18

![Page Image](https://bcdn.docswell.com/page/V4JQVZX97P.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/DK74M32RJ1.jpg)

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


# Page. 20

![Page Image](https://bcdn.docswell.com/page/PLJ181MVEG.jpg)

Twilio APIの
モック


# Page. 21

![Page Image](https://bcdn.docswell.com/page/8GJWZ833J2.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/W4EZ18VG73.jpg)

モック用の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;


# Page. 23

![Page Image](https://bcdn.docswell.com/page/KY76LP5QJV.jpg)

Twilio Node ヘルパーライブラリー（SDK)に適用
// モック用httpClient
const httpClient = new PrismClient(&#039;http://127.0.0.1:4010&#039;, new RequestClient());
// Twilio Nodeヘルパーライブラリを作成
const client = twilio(TWILIO_API_KEY, TWILIO_API_SECRET, {
accountSid: TWILIO_ACCOUNT_SID,
httpClient: httpClient,
});


# Page. 24

![Page Image](https://bcdn.docswell.com/page/5G751KY2E4.jpg)

Demo


# Page. 25

![Page Image](https://bcdn.docswell.com/page/V9J21WG17R.jpg)

まとめ


# Page. 26

![Page Image](https://bcdn.docswell.com/page/5DEYZLV47M.jpg)

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


# Page. 27

![Page Image](https://bcdn.docswell.com/page/2VJN34M6J8.jpg)

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


# Page. 28

![Page Image](https://bcdn.docswell.com/page/GYE99QNRE3.jpg)

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


