書籍『Web API設計実践入門』目次

Web API設計実践入門──API仕様ファーストによるテスト駆動開発

Web API設計実践入門──API仕様ファーストによるテスト駆動開発

  • 作者: 柴田 芳樹
  • 出版社/メーカー: 技術評論社
  • 発売日: 2024/07/25
  • メディア: 単行本(ソフトカバー)


はじめに



第1章 ソフトウェアテストの変遷

1.1 1990年代までと2000年代のソフトウェアテスト

 目視確認が普通だった

 自動テストの普及

 手動によるテストでは,ソフトウェアが腐る

1.2 フィードバックループを短くする

 テストとフィードバックループ

 テストとフィードバックループ

 テストファースト開発

1.3 ビッグバンインテグレーションから継続的インテグレーションへ

 ビッグバンインテグレーション

 夜間ビルド

 継続的インテグレーション

1.4 まとめ



第2章 API仕様

2.1 APIとは

 フレームワークや標準ライブラリのAPI仕様

 企業内でのAPI仕様

2.2 優れたAPI仕様とは

 理解が容易

 変更が容易

 テストが容易

2.3 API仕様でよくある問題点

  API仕様が記述されていない

 エラーの説明が記述されていない

  API仕様に基づく自動テストコードが存在しない

2.4 API仕様に書くべきこと

 サービスの概要の説明

 個々のエンドポイントの説明

 エラーの説明

2.5 API仕様とE2Eテスト

2.6 まとめ



第3章 gRPCにおけるAPI仕様の書き方

3.1 gRPCとは

3.2 API仕様をどこに書くか

3.3 サービスの概要の記述

3.4 個々のエンドポイント(RPC)の説明

3.5 エラーの説明

 パラメータの不正

 誤った順序での呼び出し

 認証や認可のエラー

 サービスの概要に書くべきそのほかのエラー

 個々のエンドポイントに書くべきそのほかのエラー

 書く必要がないエラー

3.6 リストオプションの説明

3.7 まとめ



第4章 API仕様ファースト開発

4.1 開発順序

  API仕様の記述

  E2Eテストフレームワークの検討と実装

 テストコードの作成と機能の実装

 リファクタリングとカバレッジの確認

  Pull Requestのレビュー

4.2 不具合の修正順序

 再現テストの作成と実装の修正

 リファクタリングとカバレッジの確認

4.3 既存のエンドポイントの修正と新たなエンドポイントの追加

4.4 API仕様のエンドポイントを呼び出すE2Eテストの利点

4.5 まとめ



第5章 E2Eテストフレームワークの構築

5.1 テストフレームワークの基本的な考え方

 本番環境と同じバイナリ

 カバレッジの取得

5.2 マイクロサービス構成でのテストフレームワーク

 書きたいテスト

  E2Eテストフレームワークのプロセス

 依存サービスが外部サービスの場合の解決方法

 エラーのテストは簡単

5.3 非マイクロサービス構成でのテストフレームワーク

5.4 E2Eテストフレームワークの骨格

  Test Suiteプロセスの骨格

 テスト対象マイクロサービスの骨格

 フェイクマイクロサービスの骨格

 テストコードの骨格

 そのほかの考慮項目

5.5 まとめ



第6章 API仕様の技術的負債の返済

6.1 APIの技術的負債とは

  E2Eテストフレームワークの構築が重要

 ソフトウェアエンジニアとしても重要

 ソフトウェア開発組織としての強い目標

6.2 API仕様の負債の返済

 既存のエンドポイントを修正するケース

 新たなエンドポイントを追加するケース

 既存のエンドポイントの不具合を修正するケース

6.3 返済順序のまとめ

6.4 E2Eテストのもう1つの利点:リファクタリング

6.5 E2Eテストと単体テスト

  E2Eテストは必須

 テストデータの準備

 データの準備でつまずく

6.6 API仕様ファースト開発が定着した組織

6.7 まとめ



第7章 Go言語によるE2Eテストフレームワークの実装

7.1 E2Eテストの基本的な流れ

  Test Suiteプロセスの流れ

7.2 courierライブラリの構成とインストール

 インストールと動作確認

7.3 サンプルサービスの構成と定義

 サンプルサービスの構成

  Shopサービスの.protoファイル

 .protoファイルのコンパイル

 サンプルサービスで実現したいテスト

7.4 E2Eテストコードの例

  InvalidArgumentエラーのテストコード

  newShopClient()関数の実装

 テストの実行

7.5 E2Eテストフレームワークの流れ

 フェイクサービスの実行

 テスト対象サービスの起動

 テスト対象サービスの準備待ち

 テストの実行

 テスト対象サービスの終了

7.6 フェイクサービスの構築

 フェイクサービスの自動生成

 自動生成されたフェイクサービスのコード

7.7 テスト実行までの流れとテストコードの実装

  TestMain関数

 テスト対象サービスが依存する環境変数

 テスト対象サービスの呼び出しとテストの実行

  Makefile

 テスト関数の実行

 テスト終了の通知

 カバレッジの表示

7.8 テストの並列化サポート

  TIDの伝搬

7.9 ほかのテスト関数の例

  DeadlineExceededエラー/Canceledエラー

 正常ケース

  SetListProductInventoriesResponseCreator

7.10 テスト関数に合格するサーバ実装

7.11 外部サービスのフェイクサービス

  Google PubSubのPublisherサービス

  REST APIのサービス

7.12 E2Eテストでのデータの準備

 エンドポイント経由でのデータ準備の利点

7.13 ステージング環境や本番環境に対するE2Eテスト

7.14 まとめ



付録A Goのテストの並列化

 複数パッケージのテストを並列に実行する

  t.Parallel()メソッド

 並列化での注意点

 まとめ



付録B 長時間夜間ランニングテスト

 過去の経験

 長時間ランニングテスト

 まとめ



付録C 防御的プログラミング

 防御的プログラミングとは

 防御的プログラミングとAPI仕様

この記事へのコメント