Share
Embed
さくっと実践!Postmanを活用した高品質で持続可能なAPI管理
Presentation slides:
- Postman API Night Tokyo 2024 Fall
- Postman API Night Nagoya 2024 Fall
Session title: さくっと実践!Postmanを活用した高品質で持続可能なAPI管理
Session Description:
APIは、システムやサービスをつなぐインターフェースとして、単に動作するだけでなく、ユーザーや他のサービスから長期にわたって信頼されることが不可欠です。本セッションでは、Postmanの中核的なデータ単位である「コレクション」を軸にしたAPIライフサイクル全体にわたる開発アプローチをご紹介します。世界のAPIファースト企業が実践する手法をさくっと学びましょう。
Yoichi Kawasaki
October 15, 2024
Transcript
61 slides
-
APIにまつわる様々な問題 • UI / UX ◦ 利用者ニーズ、シナリオにマッチしない ◦ 再利用性 /
汎用性がない • セキュリティ ◦ 十分な認証・認可、セキュリティ対策がされていない • スケーラビリティ、パフォーマンス ◦ パフォーマンスや拡張性がない • バージョン管理 ◦ バージョン管理が不十分、互換性が維持されない • ドキュメンテーション ◦ ドキュメントが分かりづらい、古い、存在しない、見つからない • エラーハンドリング ◦ 適切なエラーハンドリングがされていない、信頼性が低い • API設計のベストプラクティス ◦ API標準化仕様がサポートされていない、再利用性 / 汎用性がない • テスト ◦ API品質確保のための十分なテストがされていない。また、継続的にテストされていない -
2023 State of the API Report https://www.postman.com/state-of-api/executing-on-apis/#obstacles-to-consuming-apis #1 ドキュメント不足 52%
#2 APIの発見が困難 32% #3 時間がない28% #4 知識不足26% #5 予算不足23% #6 人員不足22% #7 APIの再利用が困難 19% API利用における障壁 @postman_japan -
良いAPIとは? Good APIs tend to offer clarity (of purpose, design,
and context), flexibility (ability to be adapted to different use cases), power (completeness of the solution offered), hackability (ability to pick up quickly through iteration and experimentation), and documentation. In a book - Designing Web APIs - building that developers love by Chris Messina, developer experience lead at Uber (意訳) 通常、良いAPIは、目的・設計・文脈が明確であり、 柔軟性があり、提供されるソリューションに完全性があり、 すぐに理解できて、ドキュメントが提供されています。 -
Time to First Call TTFC どれだけ短時間でAPIの初回呼び出しができるかを表すメトリクス。API提供者はTTFC を分析しAPIを改善し、その短縮を目指す • Web分析やユーザーフィードバックにより測定 ◦
Web分析計測:発見時点 Web サイトへの訪問、サインアップなど) から最初のAPI 呼び出しまでの時間差 • メトリクス分析からの洞察 ◦ 開発者が閲覧からサインアップまでに費やす時間が長い場合 → Webサイトやドキュメントの品質に起因する可能性 が考えられる ◦ サインアップから最初の API 呼び出しまでの時間が長い場合 → ガイドページの有効性や製品の使いやすさに起因 する可能性が考えられる APIの開発者体験を左右する「 Time To First Call」とは? Postmanで実現する APIファーストな開発 https://codezine.jp/article/detail/20087 @postman_japan -
良いAPIを作るためにできること Good APIs特性 開発者体験がよいインターフェース 優れたTTFC体験 発見しやすい 持続性・継続性がある 高い信頼性がある APIファースト開発 ドキュメント、サンプル
開発者ポータル、サンドボックス環境 APIカタログ、マーケットプレイス APIライフサイクル管理 フィードバックループ APIセキュリティ・ガバナンス コラボレーションしやすい環境・組織体制 @postman_japan -
Postmanは効果的なAPI管理を 支援するAPIプラットフォーム What is an API platform? https://www.postman.com/api-platform/ • APIライフサイクルの管理
• APIガバナンスの策定・実施 • コラボレーションの促進 API利用者と提供者に対して次のことを支援: -
API 関連製品での Postman の位置付け Postmanはクライアントからのアプローチで API管理を支援するプラットフォーム 開発 運用 クライアント サーバー
モック サーバー モニター CI/CD 連携 ドキュメント APIクライアント APIテスト APIゲートウェイ マーケットプレイス アイデンティティ管理 APIキー管理 @postman_japan APIネットワーク Postman Flows -
APIはプロダクト API as a Product) • APIをプロダクトとしてAPI中心で考える ◦ APIは主要ソフトウェア構成要素、主要ビジネスアセット ◦
APIがビジネスにもたらす価値に焦点を当てる ◦ 内外サービスをAPIを通じて活用しビルディングブロックで構築 • APIファースト採用のために必要な取り組み ◦ APIライフサイクル全体で取り組む ◦ APIの継続的な保守・運用のためのチーム体制を構築する @postman_japan APIファーストの世界 https://api-first-world.com/ja/ -
APIファースト開発モデル • 焦点はAPIの設計(システムの抽象的な「契約」) • コードを書く前にAPIを設計・構築し、モック、ドキュメント、テストも作成 • 設計フェーズでフィードバックループを通じて設計内容を洗練化 API-first software development
for modern organizations https://medium.com/better-practices/api-first-software-development-for-modern-organizations-fdbfba9a66d3 API設計 テスト APIドキュメント 作成 モック作成 実装 コーディング 統合 テスト実行 監視実行 サーバー環境 Dev Stage Prod モック活用 テスト ドキュメント 活用 コードリポジトリ モックを元にレビューや フィードバックを受け 設計内容を洗練させる check-in デプロイ エンドポイント にテスト API開発環境 @postman_japan -
コレクションとは? コレクションは、実行可能な関連APIリクエスト(群)の集合です。コレクション単位で(もしくはコレクションに 関連付けて)モックサーバー、モニター、テストスイートなど主要なPostman機能が利用できます コレクション APIリクエスト テスト サンプル APIリクエスト テスト サンプル
APIリクエスト テスト サンプル コレクションでできる主なこと • 複数APIリクエスト、関連レスポンス、テストの定義 • ワークフロー定義(リクエスト呼び出しのシーケンス) • リクエスト・テスト実行の自動化(コレクションランナー活用) • コレクション単位の文書化 • モックサーバー利用(コレクション単位) • モニター利用(コレクション単位) • チームメイトや利用者とのコラボレーション ◦ フォーク(Fork) ◦ プルリクエスト ◦ コメント 他にもいろんなことができます @postman_japan -
OpenAPI 仕様 OAS OpenAPI(最新は2021年2月リリースの3.1)は、RESTful API を記述するためのAPI 標準仕様で、API定義の 詳細を人間とコンピュータが理解できるような形式で提供 info メタデータ
(バージョン、タイトル、ライセンス ) OpenAPI Specification 3.1 webhooks tags externalDocs 記述形式:JSON、YAML @postman_japan 参考 servers APIサーバーURLや環境 security 認証認可 OAuth2, APIキー) paths APIエンドポイント、 HTTPメソッドなど定義 components 再利用可能なスキーマ、リクエスト・レスポンスモデルなど • 目的: APIの設計・ドキュメントの標準化、 API構造 定義に焦点 • 内容: APIのメタ情報、パラメータ、リクエスト・レス ポンス情報、認証・認可情報など • 機械可読形式であるため、 APIの設計、ドキュメン ト作成、テスト、モック、クライアントやサーバーの 自動生成を容易にする -
Postman コレクション仕様 Postman コレクション記述形式。コレクションに含まれる API リクエストのパラメーター、リクエスト・レスポ ンス情報以外に、変数、スクリプトやAPI 呼び出しシーケンスなどの定義が可能 記述形式:JSON Postman
Collection v2.1 https://schema.postman.com/collection/json/v2.1.0/draft-07/docs/index.html • 目的: APIリクエストの実行、テストに焦点 • OASとPostmanコレクションの違い: APIの構造定義 情報(設計・ドキュメント)以外の APIリクエスト実行・テ ストに必要な情報 ◦ スクリプト/テストAPIリクエストごと) ◦ 変数 ◦ API呼び出しシーケンス ◦ Postmanでの認証認可設定 @postman_japan 参考 info メタデータ (コレクション ID、バージョン、スキーマ URL items APIリクエスト・レスポンス、サンプル情報の一覧 event スクリプト情報( pre-request, post-response)の一覧 variable 変数情報(コレクション変数、環境変数など) auth Postmanでの認証・認可設定情報 (apikey, bearer, oauth) protocolProfileBehavior -
Postman コレクション仕様とOASの互換性 • PostmanコレクションはOASが持つAPI全体の 構造定義情報に加えて、 APIリクエスト実行、テ ストに必要な情報を持つ • 変換ケースでの違い ◦
OAS → コレクションへの変換 ▪ 可能 ◦ コレクション → OASへの変換 ▪ 可能、ただしPostman特有の機能(スクリ プト、変数、実行シーケンスなど)は変換さ れず無視される info メタデータ (コレクション ID、バージョン、スキーマ URL items APIリクエスト・レスポンス、サンプル情報の一覧 event スクリプト情報( pre-request, post-response)の一覧 variable 変数情報(コレクション変数、環境変数など) auth Postmanでの認証・認可設定情報 (apikey, bearer, oauth) protocolProfileBehavior Postmanコレクション データ構成 参考 OASが持つAPI構造・ドキュメント情報 はここに含まれる @postman_japan -
API開発ライフサイクルにおける各ステージでの活用例 定義 設計 開発 テスト セキュリティ デプロイ 監視・観測 ビジネス システム
Security ・・・ ドキュメント コード管理 システム設定 モック API Contracts (スキーマ) APIサーバー 開発 API Gateway 開発 トラフィック キャプチャ セキュリティ テスト 要件 Postman コレクション generate パフォーマンス テスト Contracts テスト E2E テスト ソースコード 成果物 commit 自動テスト APIサーバー Build/Deploy API Gateway Build/Deploy CI/CD ・・・ 配布 モニター アラート APM レポート APIカタログ API 開発ポータル trigger integration trigger ユーザー フィードバック Feedback loop UIテスト Stub generate -
API開発ステージ: 設計 定義 設計 開発 テスト セキュリティ デプロイ 監視・観測 ビジネス
システム Security ・・・ ドキュメント コード管理 システム設定 モック API Contracts API仕様) APIサーバー 開発 API Gateway 開発 トラフィック キャプチャ セキュリティ テスト 要件 Postman コレクション generate パフォーマンス テスト Contracts テスト E2E テスト ソースコード 成果物 commit 自動テスト APIサーバー Build/Deploy API Gateway Build/Deploy CI/CD ・・・ 配布 モニター アラート APM レポート APIカタログ API 開発ポータル trigger integration trigger カスタマー フィードバック Feedback loop UIテスト -
Postmanコレクションの生成パターン 1. Postman APIビルダーで設計したAPI仕様からコレクションを自動生成 2. 外部で設計されたAPI仕様をPostmanにインポートしてコレクション自動生成 3. 要件を元に直接コレクションを作成(API設定を作成) API仕様 (コントラクト)
Postmanコレクション 要件 直接コレクション作成 自動生成 インポート 設計 -
Postmanへのインポートとエクスポート Importing data into Postman https://learning.postman.com/docs/getting-started/importing-and-exporting/importing-data/ Importing an API to
Postman https://learning.postman.com/docs/designing-and-developing-your-api/importing-an-api/ OpenAPI Postman Collection インポート RAML WSDL GraphQL @postman_japan Postman Collection Postman Collection エクスポート • インポート: さまざまなデータ形式からPostmanコレクションとして取り込むことが可能 • エクスポート: コレクションをOpenAPIまたはコレクション形式に出力可能 OpenAPI cURLコマンド コード管理システム GitHub, GitLabなど) API Gatewayサービス AWS, Azure) APMサービス NewRelic) -
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_japan 設計 Postmanコレクション データ構成 -
モックサーバー: モックAPIテスト用サービス • モックサーバーは、実際のサーバーと同じような振る舞いをするモック用のクラウドサービスであり、 API ファースト開発の中核を担うサービス • モックサーバーを作成すると専用 URLが発行される •
モックサーバーは必ずいづれかのコレクションに紐付けられ、そのコレクションに保存されている API設定 のサンプルデータを元にモックデータが返却される @postman_japan FE Mock API 本物API リクエスト POST /v1/regist https://<real-server-domain>/v1/regist https://<mock-server-domain>/v1/regist 同じリクエスト情報 同じリクエスト情報 設計 -
モックサーバーを活用したAPI仕様の検証 • モックサーバー(モック API)を活用することでAPI実装前にAPIの検証をすすめることができる • API設計段階でモックAPIを通じた検証を通じて、 API仕様を洗練化させることができる Backend B (未完成)
Backend A @postman_japan FE API API Mock API 未完成APIのモック 設計 フィードバックループ -
API開発ステージ: テスト 定義 設計 開発 テスト セキュリティ デプロイ 監視・観測 ビジネス
システム Security ・・・ ドキュメント コード管理 システム設定 モック API Contracts (スキーマ) APIサーバー 開発 API Gateway 開発 トラフィック キャプチャ セキュリティ テスト 要件 Postman コレクション generate パフォーマンス テスト Contracts テスト E2E テスト ソースコード 成果物 commit 自動テスト APIサーバー Build/Deploy API Gateway Build/Deploy CI/CD ・・・ 配布 モニター アラート APM レポート APIカタログ API 開発ポータル trigger integration trigger ユーザー フィードバック Feedback loop UIテスト -
Postmanを活用したテストのカバーエリア • UIテスト • E2Eテスト • リグレッションテスト • シナリオテスト •
インテグレーションテスト • コントラクトテスト • コンポーネントテスト • ユニットテスト • セキュリティテスト • ユーザビリティテスト • パフォーマンステスト 機能要件テスト 非機能要件テスト E2E Integration API Unit コスト 実行時間 不確実要素 テスト数 テストのピラミッド テスト @postman_japan -
コレクションとAPIテストスクリプトの関係 テストとは、コレクションに追加する APIリクエスト (群) に対するテスト コレクション APIリクエスト① テスト サンプル APIリクエスト②
テスト サンプル APIリクエスト③ テスト サンプル テストスクリプト 各リクエストのテスト結果 複数リクエストで構成されたシナリオテストも作れる Request ① POST /regist Request ② GET /get Request ③ POST /unregist @postman_japan -
実行 実行結果詳細表示 サマリー結果表示 順番入れ替え可能 実行方法選択 手動 / スケジュール実行 イテレーション数 遅延秒数
データファイル 指定可能 選択 コレクションメニュー コレクションランナー実行方法設定 @postman_japan テスト コレクションランナー 複数リクエストのテストをまとめて実行 -
Postman インターセプター ブラウザ拡張を通じたトラフィックキャプチャ機能 • ブラウザ拡張機能を活用してクライアントと API 間のトラフィック(Cookie を含む)をキャプチャして送信さ れたリクエスト内容の精査・デバッグができる •
キャプチャしたリクエストを Postman コレクションとして保存ができる インターセプター対応ブラウザ • Chrome • Safari • Edge • Firefox @postman_japan キャプチャ対象ドメイン指定 キャプチャしたリクエスト情報を元にデバッグ テスト APIディスカバリ 参考 -
• プロキシ : クライアントアプリとサーバー( API など)の間に位置する仲介サーバー • Postman プロキシを有効にして、かつクライアントでプロキシを使うように設定すると、プロキシを通過す る
HTTP や HTTPS のトラフィックをキャプチャできる @postman_japan テスト APIディスカバリ 参考 Postman プロキシ Postman内蔵のプロキシを通じたトラフィックキャプチャ機能 -
API開発ステージ: セキュリティ 定義 設計 開発 テスト セキュリティ デプロイ 監視・観測 ビジネス
システム Security ・・・ ドキュメント コード管理 システム設定 モック API Contracts (スキーマ) APIサーバー 開発 API Gateway 開発 トラフィック キャプチャ セキュリティ テスト 要件 Postman コレクション generate パフォーマンス テスト Contracts テスト E2E テスト ソースコード 成果物 commit 自動テスト APIサーバー Build/Deploy API Gateway Build/Deploy CI/CD ・・・ 配布 モニター アラート APM レポート APIカタログ API 開発ポータル trigger integration trigger ユーザー フィードバック Feedback loop UIテスト -
継続的なAPIセキュリティとガバナンスの検証 代表的なチェック・管理内容。各フェーズやCI/CDなどからの継続的な実施が可能 APIセキュリティ • セキュリティ衛生状態 • 認証と認可の脆弱性 • クォータとスロットリングの実装 •
適切なセキュリティヘッダー • ロギングとモニタリングの実践 • API文書の適切な管理 • カスタムルール、etc. https://www.postman.com/api-platform/api-security/ APIガバナンス • 全体統制の設定 ◦ APIの文書化、テスト実施、メンテナンス状 況、誤ってトークンを公開していないか、な ど • カスタムルール、etc. https://www.postman.com/api-platform/api-governance/ セキュリティ @postman_japan -
API開発ライフサイクルステージ: デプロイ 定義 設計 開発 テスト セキュリティ デプロイ 監視・観測 ビジネス
システム Security ・・・ ドキュメント コード管理 システム設定 モック API Contracts (スキーマ) APIサーバー 開発 API Gateway 開発 トラフィック キャプチャ セキュリティ テスト 要件 Postman コレクション generate パフォーマンス テスト Contracts テスト E2E テスト ソースコード 成果物 commit 自動テスト APIサーバー Build/Deploy API Gateway Build/Deploy CI/CD ・・・ 配布 モニター アラート APM レポート APIカタログ API 開発ポータル trigger integration trigger ユーザー フィードバック Feedback loop UIテスト -
Postman CLIからのコレクションテスト # Postmanにログイン postman login --with-api-key {{postman-api-key}} # ID指定でコレクションテスト実行
postman collection run {{collection-ID}} \ -e {{environment-ID}} コレクションテスト実行例 Postman CLIでのcollection run実行イメージ ID指定で実行した結果詳細は Postmanサーバに自動的に保存され後で閲覧が可能 # ファイルパス指定でコレクションテスト実行 postman collection run {{collection-file-path}} \ -e {{environment-file-path}} ( 1 )Postmanサーバにログイン+ ID指定でテスト実行 ( 2 ) Postmanサーバログインなしでローカルのコレクション ファイル指定でテスト実行 @postman_japan -
Postmanとクラウド型API Gatewayサービスの連携 • Postmanはクラウド型API Gatewayサービスとのインテーグレーション機能をサポート • これによりPostmanとAPI Gatewayサービス間でAPIスキーマのインポートやデプロイが可能 デプロイ Gateway
の情報を入力して API を直接デプロイ デプロイ後は履歴や CloudWatch メ トリクスをモニターできる AWS API Gatewayの例 @postman_japan -
API開発ステージ: 監視・観測 定義 設計 開発 テスト セキュリティ デプロイ 監視・観測 ビジネス
システム Security ・・・ ドキュメント コード管理 システム設定 モック API Contracts (スキーマ) APIサーバー 開発 API Gateway 開発 トラフィック キャプチャ セキュリティ テスト 要件 Postman コレクション generate パフォーマンス テスト Contracts テスト E2E テスト ソースコード 成果物 commit 自動テスト APIサーバー Build/Deploy API Gateway Build/Deploy CI/CD ・・・ 配布 モニター アラート APM レポート APIカタログ API 開発ポータル trigger integration trigger ユーザー フィードバック Feedback loop UIテスト -
モニターで定期的にAPIの健全性をテスト • コレクションごとにモニターを設定 • テスト実行頻度 ◦ 5分毎〜設定可能。ただし無料プランは一時間毎〜 • テスト実行リージョン選択 ◦
複数リージョンからの APIテスト実行が可能 • スタティックIPを持つモニター指定 ◦ 要Professional / Enterpriseプラン • アラート通知設定 ◦ メール通知、or インテグレーション設定 でslack、 PagerDutyなど他チャンネルへの通知も可能 • リトライ、タイムアウトなど設定可能 リクエスト元リージョンの選択 Setup a monitor in Postman https://learning.postman.com/docs/monitoring-your-api/setting-up-monitor/ 監視・観測 @postman_japan -
オブザーバービリティサービスとのインテグレーション インテグレーション設定により Postman監視で閾値を越えた失敗数が確認されたら外部オブザーバービリティ サービスにイベント送信が可能 イベント 送信 PagerDuty Datadog NewRelic 監視・観測
Observe your API performance using monitor integrations https://learning.postman.com/docs/designing-and-developing-your-api/observing-an-api/observing-an-api/ @postman_japan Datadog dashboardイメージ -
Postman インサイト API エンドポイントの発見と稼働状況(レイテンシー、カウント、エラーなど)の情報提供 @postman_japan • API コードの修正が不要 • ライブ
コレクション エージェントを API 実行サーバー(VM やコンテナなど) にインストールするだけ アルファリリース 2024.10時点) https://www.postman.com/product/postman-insights/ API エンドポイントの発見 API エンドポイントの稼働状 況を可視化 監視・観測 -
API開発ステージ: 配布 定義 設計 開発 テスト セキュリティ デプロイ 監視・観測 ビジネス
システム Security ・・・ ドキュメント コード管理 システム設定 モック API Contracts (スキーマ) APIサーバー 開発 API Gateway 開発 トラフィック キャプチャ セキュリティ テスト 要件 Postman コレクション generate パフォーマンス テスト Contracts テスト E2E テスト ソースコード 成果物 commit 自動テスト APIサーバー Build/Deploy API Gateway Build/Deploy CI/CD ・・・ 配布 モニター アラート APM レポート APIカタログ API 開発ポータル trigger integration trigger ユーザー フィードバック Feedback loop UIテスト -
Postman API ネットワーク(APIカタログ) @postman_japan プライベート API ネットワーク パブリック API ネットワーク
• チームメンバーに限定 • チーム内の機能重複の排除 • API 知見やノウハウの共有 • チーム内の API 利用動向の把握 • 多くの利用者・開発者に知ってもらう • 利用者の Time To First Call の短縮 • 利用者からのフィードバックと改善 配布