Share
Embed
Postmanの中の人がAPIテクノロジー視点でMomentoを語る / Talking about Momento from an API technology perspective
Presentation Slides for Momento Meetup #8
Session title: Postmanの中の人がAPIテクノロジー視点でMomentoを語る / Talking about Momento from an API technology perspective
Date: 2023/12/22
Yoichi Kawasaki
December 24, 2023
Transcript
43 slides
-
All rights reserved by Postman Inc Postmanの中の人が APIテクノロジー視点で Momento を語る
川崎庸市 Postman株式会社 Presentation slides for もめんと Meetup #8 -
スマホゲーム Postman: API-First Journey @postman_japan モノリスから脱出し API を集め API-First の旅へ
バグ API 500 Internal Server Error -
スマホゲーム Postman: API-First Journey @postman_japan 私たちが情熱を傾ける API、ソフトウェア開 発、ゲームを組み合わせて、新しいゲーム 体験を Postman
で作ってみました! このゲームを遊べるシーン Eメールで済ませるべきだっ た退屈な会議中 オンラインで処理すべき書類 手続きに並んでいる間 コードがビルドされるのを待 つ間 電気自動車の充電を待つ間 -
2023年 API アーキテクチャスタイルの利用率 RESTが支配的。ただし 2021年 92% → 2023年 86%と徐々に減少傾向。続いて Webhook。SOAP利用率は昨年と比べ
34% → 26%と減退、GraphQLがその利用率を抜いた。その後に Websockets、gRPC、MQTTが続く。 REST Webhook GraphQL SOAP Websockets gPRC MQTT AMQP SSE EDI EDA https://www.postman.com/state-of-api/api-technologies Postman 2023 State of the API Report -
2023年 API Spec(仕様) の利用・認知度 JSONスキーマが断トツ。続いて Swagger/OpenAPI 2.0 → OpenAPI 3.X
→ GraphQL。APIアーキテクチャ利用率との 関連性が高い。 JSON Schema Swagger 2.0 OpenAPI 3.X GraphQL WSDL AsyncAPI Protobuf Avro API Blueprint RAML RDF/SPARQ Thrift 聞いたことがない 知ってはいるけど 使っていない 使っている 使っている & 気に入ってる https://www.postman.com/state-of-api/api-technologies Postman 2023 State of the API Report -
認証 • API KeyとToken認証の2種類 ◦ API KeyはMomentoコンソールで発行 ◦ Tokenはコードで権限、有効期限指定して生成 •
中身はbase endpointとJSON Web Token (JWT) Momento const permissions = { permissions: [ {role: CacheRole.ReadWrite, cache: {name: 'myCache'}}, { role: TopicRole.PublishSubscribe, cache: 'myCache', topic: 'myTopic', }, { role: TopicRole.SubscribeOnly, cache: 'myCache', topic: 'myTopic', }, ], }; const [scopedToken, scopedRefreshToken] = await generateApiKey(mainAuthClient, permissions, 3600); 権限と有効期限を指定したトークン生成 JWTの中を覗く { "endpoint": "cell-ap-northeast-1-1.prod.a.momentohq.com", "api_key": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ5b2thd2FzYUBnbWFpbC5jb20i LCJ2ZXIiOjEsInAiOiJFazBLRVFvUENBRWFDUW9IYlhsRFlXTm9aU0l BQ2dnS0JSZ0NFZ0FpQUFva0VpSUlBUm9RQ2c1MGFHVXRaM0ps WVhRdGQyRnNiQ29NQ2dwb2FXZG9iR2xuYUhSekNnZ1NCZ2dDR WdBaUFBPT0iLCJleHAiOjE3MDMyMDEyOTR9.Ws9j8GZ9WnYgwt7 XWHfu1h5XaM2H2iUoT3GPTKTrW-Y" } Base64 decode { "sub": "[email protected]", "ver": 1, "p": "Ek0KEQoPCAEaCQoHbXlDYWNoZSIACggKBggCEgAiAAokEiIIARo QXg50aGUtZ3JlYXQtd2FsbCoMCgpoaWdobGlnaHRzCggSBggCEg AiAX==", "exp": 1703201294 } Base64 URL decode JWT payload -
gRPC • Googleが開発したRPCフレームワーク • transportにHTTP/2を使うので高いスループットや高速双方向ストリーミングが可能 • データのシリアライズにProtocol Buffersが使える (protobuf縛りではない) •
IDL(インターフェース定義言語)として.protoファイルとしてAPI仕様を定義し、サーバー&クライ アントに必要なソースコードのひな形を生成する What is gRPC? https://grpc.io/docs/what-is-grpc/introduction/ Momento -
特徴 gRPC REST プロトコル HTTP/2 典型的にはHTTP/1.1。HTTP/2も使えるけど HTTP/2の双方向のストリーミング通信の利用は できない データフォーマット バイナリ(主にProtocol
Buffers) テキストベース(JSON, XMLなど) パフォーマンス 高速、より効率的(HTTP/2の利点とバイナリ 形式のおかげ) 比較的遅い(テキストベースのデータとHTTP/1.1 の限界のため) ストリーミング リクエスト・レスポンス型、双方向ストリーミン グをサポート 一般にリクエスト/レスポンスモデルに限定 敷居の高さ ブラウザサポート限定的 周辺エコシステムがRESTほどそろってない ブラウザサポート広範 広範囲なツール、ライブラリサポート I/F 定義 Protocol Buffersを使用して厳格に定義 よりルーズでドキュメントに依存することが多い -
SDKが実現する驚くほどシンプルな利用体験 • 全てのサービス管理・データ操作処理の通信でgRPC • 多言語でSDKが用意されていて、これを使うことでgRPCを意識する必要はない。面倒なこと(認証、 フレームワーク、通信の回復性機能(Timeout、Retries、backoffなど)のベースラインの処理)は すべてSDKがやってくれる ◦ https://www.gomomento.com/blog/shockingly-simple-cache-clients-that-do-the-hard-work-for-you •
利用シナリオに応じたプリビルドな設定パターンも用意されてる ◦ https://docs.momentohq.com/cache/develop/basics/client-configuration-objects 興味があればこちらも是非 • I/F定義 (.proto) ◦ https://github.com/momentohq/client-protos/tree/main/proto • SDKチューニングの話 ◦ https://www.gomomento.com/blog/shockingly-simple-tuning-the-momento-javascript-cache-client Momento -
REST / HTTP API • Momento Cache(CRUD)、Topicsのpublish用処理にHTTP APIが提供されてる • SDKが使えない制約のある環境ではHTTP
APIが有効 • Postman パブリックワークスペース にMomento CacheとTopics (Publish)用のOpenAPI仕様や Postman コレクションが用意されてる Momento https://www.postman.com/gomomento/workspace/http-api/overview -
エンドポイント <base-endpoint>: 例)cell-ap-northeast-1-1.prod.a.momentohq.com Momento Control Plane control.<base-endpoint> gRPC Disposable Token発行
token.<base-endpoint> gRPC Cache, Topics用 cache.<base-endpoint> gRPC Vector Index用 vector.<base-endpoint> gRPC HTTP API用 (cache, topics) api.<base-endpoint> REST * control, token, cache, vectorは client-sdk-javascript - auth.tsから判断 https://github.com/momentohq/client-sdk-javascript/blob/46bad7e3a0aa9e5f9bf4141a5023cff0ced016d3/pack ages/core/src/internal/utils/auth.ts#L44-L53 -
エンドポイントから推察される構成図(あってる?) Momento HTTP GW cache GW vector GW token GW
Control GW Control plane Data plane Cache Topics Vector Index Auth gRPC Clients gRPC proto req HTTP Clients -
RDA vs. EDA リクエスト駆動アーキテクチャ(RDA) と イベント駆動アーキテクチャ (EDA) RDA(リクエスト駆動) EDA(イベント駆動) 通信
同期 synchronous 非同期 asynchronous データ リクエスト・レスポンス メッセージ 操作 GET, PUT, POST, etc publish/subscribe broker プロトコル HTTP MQTT, AMQP, Kafka, etc. API仕様 OpenAPI、GraphQL Schema、RAML AsyncAPI publisher broker subscriber subscriber subscriber channel topic EDA構成コンポーネント -
API アーキテクチャの種類 1 … 1 1 … N 同期 非同期
RDA EDA EDA Webhook -
EDA抜きでアーキテクチャは語れない クラウド、マイクロサービス、IoTの普及に伴い多様なデータ連携方式が求められ、EDAの採用が急速に 拡大。まさに、EDA抜きではアーキテクチャは語れない Service B Gateway Service A Service C
Service D External Service F External Service G Clients 同期通信 非同期通信 -
Momento Topics: 驚くほど利用敷居が低いPub/Subサービス Momento • 高度なインフラ抽象化 + シンプルな利用体験(SDK、HTTP API) ◦
シャード管理、ノード管理不要で、シームレスに自動拡張で、高いスケーラビリティ・スループッ トを実現するPub/Subサービスを、驚くほど利用敷居を下げて提供 • Webhook (軽量なイベント駆動HTTPコールバック) によるデータ連携 ◦ TopicへのメッセージpublishイベントでWebhook URLにHTTP Post https://speakerdeck.com/yoshiitaka/11shi-dian-momento-gai-yao-and-zui-xin-qing-bao?slide=18 -
API アーキテクチャの種類とMomentoのカバレッジ 1 … 1 1 … N 同期 非同期
RDA EDA EDA Webhook Memento Cache Momento Memento Vector Index Memento Topics Memento Topics -
感想 以下のことから、MomentoのAPI志向 + ユーザー志向が垣間見れた • インフラは高度に抽象化され、対話先はAPIエンドポイントだけ • gRPCでC/S通信高速化 (Blazing fast)
、だけど複雑な処理はSDKにラップ • 制約のある環境のためにHTTP APIもサポート • Topicメッセージのデータ連携も疎結合ワールドに優しいWebhookで -
GraphQL query GetAllAlbums ($genre: Genre) { albums (genre: $genre) {
title artist { name } tracks { title number } genre } } Artist Service Tracks Service Genre Service Aggregated Response Request GraphQL GraphQLはAPIのために作られたクエリ言語。IDL(インターフェース定義言語)と してGraphQL SchemaでAPI仕様を定義する。複数のデータソースからの取得 を1つのAPIリクエストで構成可能。 Clients Mobile, Desktop, Browser, etc. Postman -
GraphQL 利用イメージ Postman Schema explorer Query editor Query variables You
can also use the Query button dropdown to browse and select queries to execute Query buttonDropdown URL bar -
gRPC • Googleが開発したRPCフレームワーク • transportにHTTP/2を使うので高いスループットや高速双方向ストリーミングが可能 • データのシリアライズにProtocol Buffersが使える (protobuf縛りではない) •
IDL(インターフェース定義言語)として.protoファイルとしてAPI仕様を定義し、サーバー&クライ アントに必要なソースコードのひな形を生成する What is gRPC? https://grpc.io/docs/what-is-grpc/introduction/ Postman -
WebSocket / Socket.IO • WebSocket(WS)は、ブラウザとサーバーの間で持続的な接続を介して双方向通信を行 う ための通信規格/プロトコル。一旦接続が確立されると、接続を切断したり、リクエストを追 加することなく双方向通信が可能 • Socket.IOはWebSocketを使用して、Webクライアント・サーバー間のリアルタイム、双方
向、イベントベースの通信を可能にする最も人気のあるライブラリの1つ クライアント (ブラウザ) サーバー Handshake (HTTP upgrade) 接続確立 双方向メッセージ 接続オープン+永続化 どちらから送信しても OK <適するサービス> リアルタイムでデータ更新・同期を要する サービス。Web会議、IoT制御、マルチプレ イヤーゲーム、など Postman -
MQTT MQTT は、Publish / Subscribe モデルに基づく軽量のメッセージング プロトコ ル。低帯域幅、不安定なネットワーク環境の IoTアプリケーション向けに設計され ている
MQTT Broker Sensors IoT Device Sensors IoT Device Mobile Device Cloud Servers 温度センサー 湿度センサー Publish: “20°” (Topic: “temp”) Subscribe to temp Subscribe to mosit Publish: “50%” (Topic: “moist”) Postman -
PostmanにおけるWebhook 2つのユースケースが存在する 1. カスタムWebhookを作成して、Postmanのデータを外部サービスと連携 • Postmanコレクションの更新内容をカスタムWebhookに送信 • モニターの結果をカスタムWebhookに送信 • チーム活動フィードをカスタムWebhookに送信
2. コレクション用Webhookからコレクションを起動 • Postman APIでコレクションごとのWebhookを作成し、外部から叩くことが可能 https://learning.postman.com/docs/integrations/webhooks/ https://learning.postman.com/docs/collections/running-collections/collection-webhooks/ Postman -
様々なデータソースからのインポートが可能 Postman コレクション GitHub GitLab Importing data into Postman https://learning.postman.com/docs/getting-started/importing-and-exporting/importing-data/
Bitbucket Azure Code Repository Azure API Management AWS API Gateway New Relic cURL Commands OpenAPI Postman Collection コード管理サービ ス APIゲートウェイ サービス APMサービス インポート RAML WSDL GraphQL API定義 -
APIビルダーを活用したさまざまなAPI仕様による設計 OpenAPI Postman Collection RAML WSDL GraphQL ProtoBuf チームによるAPI設計を支援するAPIビルダーで、さまざまなAPI仕様によるAPI設計が可能 APIビルダーの主要機能
• API設計 ◦ スキーマ定義(インポートも可能) ◦ API定義のバリデーション ◦ 定義からサーバーコード生成 ◦ テスト、ドキュメント生成 ◦ コレクション生成 • チーム開発支援 ◦ チーム間のAPI共有 ◦ コメント、Changelog • APIバージョン管理 ◦ コードリポジトリ(GitHub, GitLab, Bitbucket, and Azure)と同期 Postman -
OpenAPI Spec (OAS) OpenAPI 3.1( 2021年2月リリース)は、RESTful APIのためのAPI記述形式で、HTTP API機能を人間と コンピュータが理解できるようにするためのプログラム言語に依存しない仕様形式。 info
OpenAPI Specification 3.1 servers paths webhooks components security tags externalDocs 記述形式:JSON、YAML -
Postmanコレクション仕様 Postmanコレクションの記述形式。コレクションに含まれるAPIリクエストのAPIエンドポイント、リクエスト、 レスポンス、テストなどの情報やAPI 呼び出しのシーケンスを定義できます info items event variable auth protocolPofileBehavior
記述形式:JSON Postman Collection v2.1 • OAS、PostmanコレクションどちらもAPIのpath、パラメー タ、リクエスト、レスポンス情報などのAPIに関する記述は可 能 • OASとPostmanコレクションの大きな違い→ APIライフサイ クルに関する情報 ◦ ドキュメント ▪ コレクション・フォルダーごと ◦ テスト ▪ リクエスト前後のスクリプト定義 ◦ ワークフロー ▪ API呼び出しのシーケンス定義 ◦ サンプル情報 ▪ Open APIよりも堅牢かつ正確。またモック(サーバー) に活用可能 -
Async API The Linux Foundation参加のAsyncAPI initiativeが推進するイベント駆動型の アーキテクチャを定義、文書化、および管理するための仕様。主に、リアルタイム API、イベント駆動型のアーキテクチャ、非同期通信を扱うアプリケーションやシステ ムのインターフェースを記述するために使用される。 Async
APIの主要な特徴と概要: • イベント駆動アーキテクチャのサポート: WebSockets、AMQP、MQTT、 Kafkaなどの複数のメッセージングプロトコルに対応し、イベント駆動型の通 信を効果的に記述できる。 • YAMLまたはJSONフォーマット: 仕様はYAMLまたはJSONフォーマットで記 述され、読みやすく、書きやすい • Swagger/OpenAPIとの親和性: SwaggerやOpenAPIといった同期APIを 記述するための仕様と親和性が高く、APIの定義方法に一貫性を持たせるこ とができる https://www.asyncapi.com/blog/understanding-asyncapis https://github.com/asyncapi