APIハンズオンラーニング

手を動かして学ぶAPIの設計と実装

4,400円

内容

7つの主要なAPIスタイル——REST、GraphQL、Atom、gRPC、webhook、WebSocket、RabbitMQ——の設計と実装をハンズオンで学ぶ実践ガイド。天気予報サービスの構築を通じて、各スタイルの利点や欠点、アーキテクチャから実装、ネットワークプロトコルまでを体系的に解説します。単なる概念説明ではなく、完全な実装例とともに各APIスタイルの本質を理解できる構成です。GitHub CodespacesやDockerを活用した実行環境が用意されているので、読者は実際に手を動かしながら学べます。

関連書籍

目次

賞賛の声
序文
まえがき

1章 APIの概念
    1.1 APIとは
    1.2 ネットワークベースのAPI
    1.3 API通信での用語
        1.3.1 メッセージ
        1.3.2 伝送モード
        1.3.3 同期形式と非同期形式の通信
    1.4 APIの歴史
    1.5 APIが必要とされる理由
    1.6 APIスタイルとは
    1.7 製品としてのAPI
    1.8 APIのライフサイクル
        1.8.1 計画
        1.8.2 設計
        1.8.3 実装
        1.8.4 テスト
        1.8.5 デプロイ
        1.8.6 保守
        1.8.7 廃止
    1.9 APIのガバナンス、管理、プラットフォーム
    1.10 APIの未来
    1.11 まとめ

2章 API設計のパターン
    2.1 API設計のパターンの例
        2.1.1 APIの言語
        2.1.2 APIの命名
        2.1.3 APIの進化
        2.1.4 APIのバージョン管理
        2.1.5 エンコード形式
        2.1.6 フィルタリング
        2.1.7 カウントとソート
        2.1.8 ページネーション
        2.1.9 ロングランタスク
        2.1.10 リクエストの重複排除
        2.1.11 リクエストの再試行
        2.1.12 レート制限
        2.1.13 キャッシュ
        2.1.14 削除
    2.2 APIのセキュリティ
        2.2.1 OWASPのAPI Security Top 10
    2.3 APIセキュリティでのパターンの例
        2.3.1 暗号化、認証、認可
        2.3.2 サニタイズと妥当性検証
        2.3.3 スクレイピングへの対策
    2.4 API設計のベストプラクティス
    2.5 まとめ

3章 ネットワーク
    3.1 ネットワークプロトコル
    3.2 ソケットAPI
    3.3 TCP/IPとOSIモデル
    3.4 TCP版オウム返しサービスの実装
        3.4.1 ラボ環境のセットアップ
        3.4.2 TCP版オウム返しサービス
        3.4.3 TCP版オウム返しサーバー
        3.4.4 NetcatによるTCP版オウム返しクライアント
        3.4.5 Scapyを使ったTCP版オウム返しクライアント
    3.5 セキュリティ
        3.5.1 OpenSSLを使ったTCP版オウム返しクライアント
    3.6 演習
    3.7 まとめ

4章 Webプロトコル
    4.1 ハイパーテキストとは
    4.2 HTTPラボ環境のセットアップ
    4.3 HTTP/0.9
        4.3.1 HTTPとHTMLの仕組み
    4.4 HTTP/1.0
        4.4.1 HTTPメッセージのヘッダーと本文
    4.5 ブラウザーでのHTTP
        4.5.1 DNSがブラウザーからの接続に与える影響
        4.5.2 ブラウザーでの並列のTCP接続
    4.6 TCPの限界
        4.6.1 TCPのHOLブロッキング
        4.6.2 TCPのスロースタートと輻輳回避
    4.7 HTTP/1.1
        4.7.1 HTTP接続の持続性
    4.8 HTTP/2
        4.8.1 HTTP/2のフレームとストリーム
    4.9 HTTP/3
        4.9.1 QUICの1RTTでの接続の確立
    4.10 演習
    4.11 まとめ

5章 REST
    5.1 HTTP、リソース、URI
    5.2 クライアントとサーバーの通信
    5.3 RESTの起源
    5.4 APIの成熟度モデル
    5.5 RESTful、RESTless、REST
    5.6 RESTlessでも十分なのか
    5.7 実装
        5.7.1 APIのエンドポイント
        5.7.2 APIのバージョン管理
        5.7.3 CRUD
        5.7.4 ページネーション
        5.7.5 レート制限
        5.7.6 キャッシュ
    5.8 セキュリティ
        5.8.1 JWT
        5.8.2 TLS
    5.9 文書化
        5.9.1 OpenAPI Specification
        5.9.2 APIの仕様を記述する3つのアプローチ
    5.10 長所と短所
    5.11 いつRESTを使うべきか
    5.12 演習
    5.13 まとめ

6章 GraphQL
    6.1 RESTの問題点
    6.2 グラフ思考
    6.3 GraphQLの起源
    6.4 GraphQLとRESTの比較
    6.5 GraphQLの構成要素
    6.6 GraphQLの仕組み
    6.7 実装
        6.7.1 GraphiQL
        6.7.2 ミューテーションの実行
    6.8 CRUD
        6.8.1 読み込み
        6.8.2 作成、更新、削除
    6.9 セキュリティ
        6.9.1 GraphQLへの攻撃
        6.9.2 認証
    6.10 文書化
    6.11 長所と短所
    6.12 いつGraphQLを使うべきか
    6.13 演習
    6.14 まとめ

7章 Webフィード
    7.1 Webフィードとは
    7.2 Webフィードが必要とされる理由
    7.3 Webフィードの進化
    7.4 Atomフィードとは
    7.5 実装
    7.6 フィードを読み込む
    7.7 セキュリティ
    7.8 長所と短所
    7.9 演習
    7.10 まとめ

8章 gRPC
    8.1 RPC
    8.2 gRPCの起源
    8.3 protobuf形式のシリアライゼーション
    8.4 コードの生成
    8.5 gRPC版オウム返しサーバーとクライアント
    8.6 4種のRPC
    8.7 protobufのワイヤーフォーマット
    8.8 実装
        8.8.1 gRPCによるAtomフィードの拡張サービス
    8.9 セキュリティ
    8.10 文書化
    8.11 長所と短所
    8.12 いつgRPCを使うべきか
    8.13 演習
    8.14 まとめ

9章 webhook
    9.1 webhookとは
    9.2 webhookの起源
    9.3 webhookの受信と送信
    9.4 統合とデータフロー
    9.5 実装
    9.6 セキュリティ
    9.7 文書化
    9.8 長所と短所
    9.9 いつwebhookを使うべきか
    9.10 演習
    9.11 まとめ

10章 WebSocket
    10.1 WebSocketとそのAPI
    10.2 WebSocketの初期ハンドシェイク
    10.3 実装
        10.3.1 WebSocket版オウム返しクライアントとサーバー
        10.3.2 WebSocketプロトコル
        10.3.3 WebSocketによる気象注意報の通知サーバー
        10.3.4 WebSocketの通知クライアント
    10.4 セキュリティ
        10.4.1 オリジンの検証
        10.4.2 ホストの制限
        10.4.3 JWT
        10.4.4 TLS
    10.5 文書化
    10.6 長所と短所
    10.7 いつWebSocketを使うべきか
    10.8 演習
    10.9 まとめ

11章 メッセージ交換
    11.1 メッセージ交換とは
    11.2 キューとは
    11.3 メッセージ交換のパターン
        11.3.1 ワークキューのパターン
        11.3.2 パブリッシュとサブスクライブのパターン
        11.3.3 ルーティングのパターン
        11.3.4 トピックのパターン
        11.3.5 リクエストとレスポンスのパターン
    11.4 実装
        11.4.1 ワークキュー
    11.5 セキュリティ
        11.5.1 暗号化されていないメッセージの送受信
        11.5.2 暗号化されたメッセージの送受信
        11.5.3 認証と認可
    11.6 文書化
        11.6.1 AsyncAPI Specification
        11.6.2 AsyncAPIによるドキュメント
        11.6.3 メッセージのバージョン管理
    11.7 長所と短所
    11.8 いつメッセージ交換を使うべきか
    11.9 演習
    11.10 まとめ

索引

コラム目次
    API Mandate
    プライベート向け、パブリック向け、パートナー向けのAPI
    APIの収益化
    機能要件と非機能要件
    APIファーストのアプローチ
    インターフェースと実装
    リソース指向のAPIとインテント指向のAPI
    APIの後方互換性と前方互換性
    エンコードとシリアライズ
    APIの性能を向上させる一般的なヒント
    TCP/IPをオフィスでたとえる
    TCP接続とTCPストリーム
    X.509の公開鍵インフラ証明書
    ラボ環境の削除(クリーンアップ)
    4章での通信手順
    遅延と帯域幅
    HTTPの冪等性、安全性、キャッシュ可能性
    防御的プログラミング
    自己署名証明書とCA署名証明書
    コードファーストとスキーマファースト
    シンジケートとシンジケーション
    standard-webhooksの仕様
    webhookのセキュリティ
    AsyncAPI Specification
    RabbitMQのブローカーの構成
    RabbitMQでのメッセージへの確認応答
    メッセージの配送
    Shodan

関連ファイル