Upgrade to Pro — share decks privately, control downloads, hide ads and more …

さくっと実践!Postmanを活用した高品質で持続可能なAPI管理

 さくっと実践!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
Tweet

More Decks by Yoichi Kawasaki

Other Decks in Technology

Transcript

  1. APIにまつわる様々な問題 • UI / UX ◦ 利用者ニーズ、シナリオにマッチしない ◦ 再利用性 /

    汎用性がない • セキュリティ ◦ 十分な認証・認可、セキュリティ対策がされていない • スケーラビリティ、パフォーマンス ◦ パフォーマンスや拡張性がない • バージョン管理 ◦ バージョン管理が不十分、互換性が維持されない • ドキュメンテーション ◦ ドキュメントが分かりづらい、古い、存在しない、見つからない • エラーハンドリング ◦ 適切なエラーハンドリングがされていない、信頼性が低い • API設計のベストプラクティス ◦ API標準化仕様がサポートされていない、再利用性 / 汎用性がない • テスト ◦ API品質確保のための十分なテストがされていない。また、継続的にテストされていない
  2. 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
  3. 良い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は、目的・設計・文脈が明確であり、 柔軟性があり、提供されるソリューションに完全性があり、 すぐに理解できて、ドキュメントが提供されています。
  4. 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
  5. 良いAPIを作るためにできること Good APIs特性 開発者体験がよいインターフェース 優れたTTFC体験 発見しやすい 持続性・継続性がある 高い信頼性がある APIファースト開発 ドキュメント、サンプル

    開発者ポータル、サンドボックス環境 APIカタログ、マーケットプレイス APIライフサイクル管理 フィードバックループ APIセキュリティ・ガバナンス コラボレーションしやすい環境・組織体制 @postman_japan
  6. Postmanは効果的なAPI管理を 支援するAPIプラットフォーム What is an API platform? https://www.postman.com/api-platform/ • APIライフサイクルの管理

    • APIガバナンスの策定・実施 • コラボレーションの促進 API利用者と提供者に対して次のことを支援:
  7. API 関連製品での Postman の位置付け Postmanはクライアントからのアプローチで API管理を支援するプラットフォーム 開発 運用 クライアント サーバー

    モック サーバー モニター CI/CD 連携 ドキュメント APIクライアント APIテスト APIゲートウェイ マーケットプレイス アイデンティティ管理 APIキー管理 @postman_japan APIネットワーク Postman Flows
  8. APIはプロダクト API as a Product) • APIをプロダクトとしてAPI中心で考える ◦ APIは主要ソフトウェア構成要素、主要ビジネスアセット ◦

    APIがビジネスにもたらす価値に焦点を当てる ◦ 内外サービスをAPIを通じて活用しビルディングブロックで構築 • APIファースト採用のために必要な取り組み ◦ APIライフサイクル全体で取り組む ◦ APIの継続的な保守・運用のためのチーム体制を構築する @postman_japan APIファーストの世界 https://api-first-world.com/ja/
  9. 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
  10. コレクションとは? コレクションは、実行可能な関連APIリクエスト(群)の集合です。コレクション単位で(もしくはコレクションに 関連付けて)モックサーバー、モニター、テストスイートなど主要なPostman機能が利用できます コレクション APIリクエスト テスト サンプル APIリクエスト テスト サンプル

    APIリクエスト テスト サンプル コレクションでできる主なこと • 複数APIリクエスト、関連レスポンス、テストの定義 • ワークフロー定義(リクエスト呼び出しのシーケンス) • リクエスト・テスト実行の自動化(コレクションランナー活用) • コレクション単位の文書化 • モックサーバー利用(コレクション単位) • モニター利用(コレクション単位) • チームメイトや利用者とのコラボレーション ◦ フォーク(Fork) ◦ プルリクエスト ◦ コメント 他にもいろんなことができます @postman_japan
  11. 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の設計、ドキュメン ト作成、テスト、モック、クライアントやサーバーの 自動生成を容易にする
  12. 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
  13. 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
  14. 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
  15. 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テスト
  16. 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)
  17. 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コレクション データ構成
  18. モックサーバー: モック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 同じリクエスト情報 同じリクエスト情報 設計
  19. 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テスト
  20. Postmanを活用したテストのカバーエリア • UIテスト • E2Eテスト • リグレッションテスト • シナリオテスト •

    インテグレーションテスト • コントラクトテスト • コンポーネントテスト • ユニットテスト • セキュリティテスト • ユーザビリティテスト • パフォーマンステスト 機能要件テスト 非機能要件テスト E2E Integration API Unit コスト 実行時間 不確実要素 テスト数 テストのピラミッド テスト @postman_japan
  21. コレクションとAPIテストスクリプトの関係 テストとは、コレクションに追加する APIリクエスト (群) に対するテスト コレクション APIリクエスト① テスト サンプル APIリクエスト②

    テスト サンプル APIリクエスト③ テスト サンプル テストスクリプト 各リクエストのテスト結果 複数リクエストで構成されたシナリオテストも作れる Request ① POST /regist Request ② GET /get Request ③ POST /unregist @postman_japan
  22. 実行 実行結果詳細表示 サマリー結果表示 順番入れ替え可能 実行方法選択 手動 / スケジュール実行 イテレーション数 遅延秒数

    データファイル 指定可能 選択 コレクションメニュー コレクションランナー実行方法設定 @postman_japan テスト コレクションランナー 複数リクエストのテストをまとめて実行
  23. Postman インターセプター ブラウザ拡張を通じたトラフィックキャプチャ機能 • ブラウザ拡張機能を活用してクライアントと API 間のトラフィック(Cookie を含む)をキャプチャして送信さ れたリクエスト内容の精査・デバッグができる •

    キャプチャしたリクエストを Postman コレクションとして保存ができる インターセプター対応ブラウザ • Chrome • Safari • Edge • Firefox @postman_japan キャプチャ対象ドメイン指定 キャプチャしたリクエスト情報を元にデバッグ テスト APIディスカバリ 参考
  24. • プロキシ : クライアントアプリとサーバー( API など)の間に位置する仲介サーバー • Postman プロキシを有効にして、かつクライアントでプロキシを使うように設定すると、プロキシを通過す る

    HTTP や HTTPS のトラフィックをキャプチャできる @postman_japan テスト APIディスカバリ 参考 Postman プロキシ Postman内蔵のプロキシを通じたトラフィックキャプチャ機能
  25. 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テスト
  26. 継続的な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
  27. 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テスト
  28. 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
  29. 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テスト
  30. モニターで定期的に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
  31. Postman インサイト API エンドポイントの発見と稼働状況(レイテンシー、カウント、エラーなど)の情報提供 @postman_japan • API コードの修正が不要 • ライブ

    コレクション エージェントを API 実行サーバー(VM やコンテナなど) にインストールするだけ アルファリリース 2024.10時点) https://www.postman.com/product/postman-insights/ API エンドポイントの発見 API エンドポイントの稼働状 況を可視化 監視・観測
  32. 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テスト
  33. Postman API ネットワーク(APIカタログ) @postman_japan プライベート API ネットワーク パブリック API ネットワーク

    • チームメンバーに限定 • チーム内の機能重複の排除 • API 知見やノウハウの共有 • チーム内の API 利用動向の把握 • 多くの利用者・開発者に知ってもらう • 利用者の Time To First Call の短縮 • 利用者からのフィードバックと改善 配布