0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「マスタリングAPIアーキテクチャ」を読んでみた

Posted at

はじめに

現在、業務にてモノリシックなwebアプリケーションのリファクタリングを担当している。
API設計の技術本を漁っていたところ、「モノリシックからマイクロサービスへとアーキテクチャを進化させるための実践的手法」というサブタイトルに惹かれて手に取ってみた。

対象者

この記事は下記のような人を対象にしています。

  • API設計に興味のある駆け出しエンジニア
  • 実装だけでは物足りなくなってきた中級エンジニア
  • たまたまチームリーダーをやっているエンジニア

結論

  • オライリー本は最後の章から読め
  • 「この本でモノリスをマイクロサービス化するノウハウをマスターした!」にはならない
  • ただし、マイクロサービス化するために勉強すべき項目が浅く広く知れる
  • SREやアーキテクトに必要な知識が多く、担当レベルのバックエンドエンジニアが読むには少しハードルが高かったかも...

イントロダクション

  • 想定読者が定義されていてありがたい
    • 開発者
      • 開発の担当者レベル
    • 偶発的アーキテクト
      • 開発のチームリーダーレベル
    • ソリューション/エンタープライズアーキテクト
      • 肩書きに「アーキテクト」が入るベテラン開発者
  • C4ダイアグラム
    • コンテキスト図
    • コンテナ図
    • コンポーネント図
    • コード図
  • ADR:Architecture Decision Record (アーキテクチャ決定記録)
    • Status
    • Context
    • Decision(決定事項)
    • Consequence(結果)

1章 APIの設計・構築・仕様化

  • RESTful API
  • リチャードソンの成熟度モデル
    • レベル0: HTTP/RPC
    • レベル1: リソース
    • レベル2: 動詞(メソッド)
    • レベル3: ハイパーメディアコントロール
  • RPC (Remote Procedure Call)
    • RESTはステートレスだが、RPCはそうではない

2章 APIのテスト

  • テストの4象限
    • Q1:単体テストとコンポーネントテスト
    • Q2:機能テスト
    • Q3:探索的テスト
    • Q4:技術的観点のテスト
  • テストピラミッド
    • UIテスト
    • サービステスト
    • 単体テスト
  • コントラクトテスト
  • コンポーネントテスト
  • 統合テスト
  • E2Eテスト

3章 APIゲートウェイ:外部トラフィック管理

  • リバースプロキシ
  • ロードバランサ
  • APIゲートウェイ

4章 サービスメッシュ:サービス間トラフィック管理

  • 正直、自分の理解が追いつかなかった
  • SRE領域の知識のため、バックエンドエンジニアの自分にどこまで必要なのか、理解できなかった

5章 APIの展開とリリース

  • デプロイ:新機能が本番環境に導入されること
  • リリース:エンドユーザーが新機能を使えるようになり、サービス影響が出ること
  • フィーチャーフラグやダークローンチを使うことでデプロイ頻度を増やせる
  • リリース戦略
    • カナリアリリース
    • トラフィックミラーリング(ダークローンチ)
    • ブルーグリーン戦略

6章 セキュリティ運用:脅威モデリング

  1. 目標の特定
  2. 情報収集
  3. システムを分解
  4. 脅威を特定(STRIDE)
  5. 脅威のリスク評価(DREAD)
  6. 検証

7章 APIの認証と認可

  • OAuth2:トークンを利用した認可フレームワーク
    • いわゆる、「SNSでログイン」機能
    • エンドユーザーが毎回ユーザー名やパスワードを入力しなくても認可できる
    • Json Web Tokens (JWT):事実上の標準トークン
    • Json Web Signatures (JWS):デジタル署名され、トークンの内容が変更された場合、トークンが無効になる
    • Json Web Encryption (JWE):トークンを暗号化する
    • トークンをDB検索する必要がないため、パフォーマンスに優れる
  • PKCE:認可コードグラントに追加し、盗聴リスクを低減する
  • リフレッシュトークン:現在のアクセストークンが有効期限切れになった時、追加のトークンを要求することで、ユーザー名とパッスワードの入力を防ぐ
  • OIDC(OpenID Connect):openidを利用し、ユーザー情報を取得する
  • SAML:シングルサインオンに利用

8章 API駆動アーキテクチャへのアプリケーションの再設計

  • 変化に強いシステムとは
    • 凝集性を高める→コードが理解しやすくなる
    • 租結合を促進する→テストでモックを利用しやすくなる
  • 最終アーキテクチャの選択肢
    • モノリス
      • 「大きな泥団子」でないことが前提
      • DDDやヘキサゴナルアーキテクチャを利用すべき
    • サービス指向アーキテクチャ(SOA)
      • ベンダが提供するミドルウェアの利用は避けるべき
    • マイクロサービス
      • DDDを用いてAPIと基盤の境界を設計する
    • 関数型アーキテクチャ
      • 結合度の設定が難しい
  • システムをモジュールに分解する

9章 クラウド環境への移行

  • この章は短かった+興味が薄かったのでさっと読み飛ばした

10章 総括

  • 各章のケーススタディを振り返りつつ、まとめられている
  • この章を最初に読むと、納得度が高まる気がする
  • オブジェクト設計スタイルガイドを読んだ時にも思ったが、オライリー本は最後の総括章から読むのが定番なのか...?

おわりに

「マスタリングAPIアーキテクチャ」についてまとめました。

参考記事

マスタリングAPIアーキテクチャ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?