👾

実践マイクロサービスAPIを読んでみる(読書ログ)

2024/05/21に公開

はじめに

必要にかられてマイクロサービスの実装方法を理解するために読んでみようと思います。

https://www.shoeisha.co.jp/book/detail/9784798179735

python ちゃんとやったことがないのでこれを気に python にも入門しちゃおうという魂胆です。

目次

  • Part 1 マイクロサービスAPIの概要
    • 第1章:マイクロサービスAPIとは何か
    • 第2章:基本的なAPIの実装
    • 第3章:マイクロサービスの設計
  • Part 2 REST APIの設計と構築
      - 第4章:REST APIの設計原則
      - 第5章:OpenAPIによるREST APIの文書化
      - 第6章:Pythonを使ったREST APIの構築
      - 第7章:マイクロサービスのサービス実装パターン
  • Part 3 GraphQL APIの設計と構築
      - 第8章:GraphQL APIの設計
      - 第9章:GraphQL APIを使う
      - 第10章:Pythonを使ったGraphQL APIの構築
  • Part 4 マイクロサービスAPIのセキュリティ、テスト、デプロイ
      - 第11章:APIの認証と認可
      - 第12章:APIのテストと検証
      - 第13章:マイクロサービスAPIのDocker化
      - 第14章:KubernetesによるマイクロサービスAPIのデプロイ

読書記録

  • 2024/04/11 〜 p7
    • マイクロサービスの定義とモノリスの定義
  • 2024/04/15 〜 p18
    • マイクロサービスアーキテクチャの課題
      • サービスの効果的な分解
      • マイクロサービスの統合テスト
      • サービスが利用できない状況への対処
      • 分散トランザクションの追跡
      • 運用の複雑さとインフラのオーバーヘッドの増大
    • ドキュメント駆動開発の導入
  • 2024/04/16 〜 p29
  • 2024/04/17 〜 p45
    • ここは基本的な API の実装なので試してみる必要がある
  • 2024/04/18 〜 p54
    • マイクロサービスの設計原則
    • ビジネスケイパビリティに基づいてサービスを分解するのがコンウェイで面白かった
  • 2024/04/19 〜 p61
    • DDD のおさらいと、 サブドメインを用いたサービス分割
    • ビジネスケイパビリティとサブドメインによる分割の比較
    • 既存の組織構造が最も効率的であるとは限らない!
    • 問題空間と解空間をエバンス本で再確認したくなった
  • 2024/04/20 〜 p79
    • REST API のおさらい
  • 2024/04/22 〜 p92
    • HTTP status code のおさらい
  • 2024/04/23 〜 p122
    • OpenAPI のおさらい
  • 2024/04/24 〜 p131
    • FastAPI を使っての注文 API の構築
  • 2024/04/28 〜 p156
    • 厨房 API の実装
    • flask-smorest, marshmallow の紹介
    • エンドポイントの実装と検証
    • ここは実装の章なので実際に試してみる必要がある
  • 2024/04/29 〜 p166
    • ヘキサゴナルアーキテクチャの説明
    • 依存性逆転の原則の説明
    • ディレクトリ構成の説明
    • SQLAlchemy, Alembic の説明
  • 2024/04/30 〜 p176
    • データベースモデルの作成と Repository パターンの実装
    • この辺は他の言語で実装をしてみたことがあるから理解できたけど、図をみてもよくわからないかも。
  • 2024/05/01 〜 p197
    • ビジネス層の実装
    • Unit of Work パターンの実装
  • 2024/05/02 〜 p209
    • GraphQL の概要
    • スカラー型の説明
  • 2024/05/03 〜 p223
    • オブジェクト型の説明
    • カスタムスカラーの定義
    • グラフ理論:オブジェクト間でのコネクション
      • エッジプロパティ
      • 1 対 1 のコネクション
      • 1 対 多 のコネクション
      • スルー型を使ったコネクション
      • ユニオン、インターフェイスを使って型を結合する
      • 列挙でプロパティの値を制限する
  • 2024/05/04 〜 p229
    • クエリ定義の方法 データの取得
      • input 型
    • ミューテーション定義の方法 データの作成、更新、削除
      • input 型
  • 2024/05/06 〜 p330
    • GraphQL API を使う
    • モックサーバーの実行
    • クエリの実行
    • ミューテーションの実行
    • Python コードから GraphQL API の実行
    • Python を使った GraphQL API の構築
    • Ariadne の概要
    • 商品 API の実装
    • クエリリゾルバの実装
    • ミューテーションリゾルバの実装
    • カスタムスカラー型のリゾルバとフィールドリゾルバがちゃんと把握できていないのであとで手を動かして確認が必要
    • API の認証と認可
      • OAuth の概要
        • 認可コードフロー
        • PKCE フロー
        • クライアントクレデンシャルズフロー
        • 更新トークンフロー
      • OpenID Connect の概要
      • JWT 概要、生成、検証
      • API サーバーに認可を追加
  • 2024/05/07 〜 p345
    • Dredd を使った REST API テストの説明
    • Dredd の説明
    • Dredd の実行とフックでのカスタマイズ
  • 2024/05/08 〜 p362
    • プロパティベースのテスト
    • Hypothesis によるプロパティベースのテスト
    • Schemathesis による REST API のテスト
    • Schemathesis による GraphQL API のテスト
    • API テスト戦略を設計する
    • ドキュメントから API の検証テストを自動的に生成する便利な内容だった
  • 2024/05/09 〜 p414
    • マイクロサービス API の Docker 化
    • Kubernetes によるマイクロサービス API のデプロイ
    • Kubernetes にデプロイする予定が無いのでここは流し読み

手を動かしてみる

本の GitHub リポジトリは以下にあります。
https://github.com/abunuwas/microservice-apis

自分で手を動かしたリポジトリは以下です。
https://github.com/Mo3g4u/microservice-apis
とりあえず API 実装の第6章までは全て手打ちでやってみました。

まとめ

「Python の知識は必要ありません。というのも、新しいコードを紹介する前に、すべてのコンセプトを徹底的に説明しているからです。」とカバーに書かれている通りに説明が詳しくされているので思ったよりもスムーズに読み進めることができました。
ただ、まぁまぁボリュームがあるので毎朝の15分読書ではなかなか読みきれなくて GW にまとめて読み進めました。
マイクロサービスってよく聞くけど結局どうやって考えて実装してデプロイするの?という人の入門にはちょうどいい内容だと思いました。
個人的には GraphQL での実装が書かれていてかなり勉強になりました。
本の内容を元に AWS のサーバーレスを使った場合のアーキテクチャなどを考えていきたいと思います!

Discussion