エンジニア選書 API Platformを活用したPHPによる本格的なWeb API開発

「API Platformを活用したPHPによる本格的なWeb API開発」のカバー画像
著者
金本貴志かねもとたかし 著
定価
3,960円(本体3,600円+税10%)
発売日
2026.2.27
判型
B5変形
頁数
560ページ
ISBN
978-4-297-15491-2 978-4-297-15492-9

概要

API Platformは、PHPでWeb APIを開発するためのフレームワークです。日本語の情報や国内で公表されている採用事例はまだ多くはないものの、国際的にはすでに高い人気と多数の採用実績を誇り、PHPでREST APIやGraphQL APIを開発する手段として最有力候補の1つとなっています。API Platformはたった1行のコードの追記でCRUDとAPIドキュメントが生成されるなど手軽に入門できる一方で、本格的に使いこなすにはAPI Platformの機能そのものに加えてOpenAPIやJSON-LDといった関連する標準仕様などに対しても深い理解が求められる側面があり、入門と実用の間にはそれなりに大きな溝があります。本書は、この溝を一気に埋めてくれる一冊です。API Platformを複数の実務案件で活用し、ソースコードにも多数コントリビュートしている著者が、本格的な活用のために必要な実装テクニックや周辺知識を余すところなく徹底的に解説します。

こんな方にオススメ

  • PHPで本格的なWeb APIを開発できるようになりたい方
  • すでにPHPでWeb APIを開発しており、さらなる学びのために王道のフレームワークに触れたい方
  • すでにAPI Platformを使用しており、さらに発展的に使いこなしたい方

目次

  • はじめに
  • 対象読者
  • 本書のゴール
  • 本書を読むにあたって
  • 謝辞

第1章 API Platformの基礎

  • 1.1 Web APIの基礎
    • 1.1.1 Web APIとは
    • 1.1.2 Web APIの重要性
  • 1.2 API Platformとは
    • 1.2.1 Symfonyとは
    • 1.2.2 Laravelとは
    • 1.2.3 API Platform CoreとSymfonyとLaravel
  • 1.3 API Platformを利用する準備
    • 1.3.1 PHPとPostgreSQLの環境の用意
    • 1.3.2 Symfony CLIのインストール
    • 1.3.3 Symfonyのインストール
    • 1.3.4 API Platformのインストール
    • 1.3.5 動作確認
  • 1.4 API Platformの全体像
    • 1.4.1 APIリソース
    • 1.4.2 APIリソースに対するオペレーション
    • 1.4.3 リクエストからレスポンスまでの流れ
    • 1.4.4 APIドキュメントの自動生成

第2章 データベースとの連携

  • 2.1 Doctrineによるデータベース操作の基本
    • 2.1.1 Doctrineとは
    • 2.1.2 ActiveRecordとData Mapper
    • 2.1.3 Doctrineがデータを扱う仕組み
    • 2.1.4 マッピングメタデータ
    • 2.1.5 エンティティマネージャー・Unit of Work・リポジトリ
    • 2.1.6 データベースからのデータの取得
    • 2.1.7 データベースへのデータの保存
  • 2.2 エンティティクラスとリポジトリクラスの作成
    • 2.2.1 symfony/maker-bundleによる自動生成
    • 2.2.2 Articleエンティティの作成
    • 2.2.3 Articleエンティティクラスの内容
    • 2.2.4 Commentエンティティの作成
    • 2.2.5 Commentエンティティクラスの内容
    • 2.2.6 リポジトリクラスの内容
  • 2.3 データベースのマイグレーション
  • 2.4 APIの動作確認
  • 2.5 ユーザー入力のバリデーション
    • 2.5.1 バリデーションの設定方法
    • 2.5.2 エラーメッセージの日本語化

第3章 ステートプロバイダーとステートプロセッサーによるデータの取得と保存

  • 3.1 ステートプロバイダー・ステートプロセッサーとは
    • 3.1.1 デフォルトのステートプロバイダー
    • 3.1.2 デフォルトのステートプロセッサー
  • 3.2 ステートプロバイダー・ステートプロセッサーを独自に実装する
    • 3.2.1 サンプルアプリケーションへの要件追加
    • 3.2.2 カスタムステートプロバイダーの作成
    • 3.2.3 カスタムステートプロセッサーの作成
  • 3.3 Symfonyのサービスコンテナ
    • 3.3.1 サービスとは
    • 3.3.2 依存性の注入とは
    • 3.3.3 DIコンテナとは
    • 3.3.4 機能拡張ポイントとしてのサービスコンテナ

第4章 OpenAPIのサポート

  • 4.1 API PlatformとOpenAPI
    • 4.1.1 OpenAPIとは
    • 4.1.2 OpenAPIドキュメントのカスタマイズ
  • 4.2 OpenAPIとJSON Schema
    • 4.2.1 パラメーターのスキーマの変更
    • 4.2.2 リクエストボディ・レスポンスボディのスキーマの変更
    • 4.3 OpenApiFactoryの拡張
      • 4.3.1 サンプルアプリケーションへの要件追加
      • 4.3.2 OpenApiFactoryを拡張する
    • 4.4 SchemaFactoryの拡張
      • 4.4.1 サンプルアプリケーションの仕様変更
      • 4.4.2 OpenApiFactoryを拡張する
      • 4.4.3 SchemaFactoryを拡張する
    • 4.5 JSON-LDとHydra
      • 4.5.1 JSON-LDとは
      • 4.5.2 Hydraとは

    第5章 シリアライゼーション

    • 5.1 シリアライゼーションの仕組み
      • 5.1.1 シリアライゼーションとは
      • 5.1.2 API Platformにおけるシリアライゼーション
    • 5.2 シリアライゼーション処理のカスタマイズ
      • 5.2.1 レスポンスボディへの出力に含めるプロパティを制御する
      • 5.2.2 リクエストボディからの入力に含めるプロパティを制御する
      • 5.2.3 関連リソースを埋め込む
    • 5.3 循環するリソースのシリアライゼーション
      • 5.3.1 サンプルアプリケーションへの要件追加
      • 5.3.2 強制的にIRI文字列にシリアライズする
      • 5.3.3 シリアライズの最大深さを設定する
    • 5.4 シリアライゼーションに関するその他の機能
      • 5.4.1 計算フィールド
      • 5.4.2 日付や日時のフォーマットの指定

    第6章 オペレーションのカスタマイズ

    • 6.1 オペレーションの追加
    • 6.2 オペレーションの無効化
    • 6.3 オペレーションの非推奨化
    • 6.4 サブリソースによる親子関係の表現
      • 6.4.1 サブリソースを用いたGETコレクションオペレーション
      • 6.4.2 サブリソースを用いたPOSTコレクションオペレーション
    • 6.5 システムプロバイダーとシステムプロセッサー
    • 6.6 ファイルアップロード処理
      • 6.6.1 サンプルアプリケーションへの要件追加
      • 6.6.2 vich/uploader-bundleのインストール
      • 6.6.3 ファイルからMediaObjectエンティティへの変換
      • 6.6.4 リクエストボディのデシリアライゼーション
      • 6.6.5 保存済みのファイルの公開URLの生成
      • 6.6.6 動作確認
    • 6.7 サービスタグとautoconfigure​

    第7章 ページネーションとフィルター

    • 7.1 ページネーション
      • 7.1.1 ページネーションとは
      • 7.1.2 ページネーションの基本的な設定方法
      • 7.1.3 部分ページネーション
      • 7.1.4 カーソルベースのページネーション
      • 7.1.5 ページネーションの最適化方法
      • 7.1.6 カスタムステートプロバイダーのページネーション
    • 7.2 フィルターによる絞り込みと並べ替え
      • 7.2.1 SearchFilterによる文字列検索
      • 7.2.2 DateFilterによる日付の絞り込み
      • 7.2.3 BooleanFilterによる真理値の絞り込み
      • 7.2.4 NumericFilterによる数値検索
      • 7.2.5 RangeFilterによる数値の範囲での絞り込み
      • 7.2.6 ExistsFilterによる値の有無での絞り込み
      • 7.2.7 OrderFilterによる並べ替え
      • 7.2.8 関連リソースのプロパティに対する絞り込み
    • 7.3 デフォルトの並び順の変更
    • 7.4 QueryParameterクラスへの移行に向けて
    • 7.5 カスタムフィルターとExtension
      • 7.5.1 カスタムフィルター
      • 7.5.2 Extension

    第8章 ユーザー認証とアクセス制御

    • 8.1 認証と認可
    • 8.2 ステートフルとステートレス
    • 8.3 セッションとCookie
    • 8.4 Bearerトークン
      • 8.4.1 発行プロセスの静的・動的による分類
      • 8.4.2 透明性による分類
      • 8.4.3 JWT
    • 8.5 OAuth 2.0とOpenID Connect
      • 8.5.1 OAuth 2.0
      • 8.5.2 OpenID Connect
    • 8.6 API Platformにおける認証
      • 8.6.1 基本的なセキュリティ設定
      • 8.6.2 IDaaSを利用した認証の実装
    • 8.7 API Platformにおける認可
      • 8.7.1 アクセス制御の基本
      • 8.7.2 Voterを用いた複雑な権限管理
      • 8.7.3 ユーザーごとに異なるコンテンツを提供する
    • 8.8 OpenAPIドキュメントへの認証仕様の反映
    • 8.9 開発環境で認証処理をモック化する

    第9章 キャッシュ戦略

    • 9.1 HTTPキャッシュの仕様を理解する
      • 9.1.1 HTTPキャッシュの基本
      • 9.1.2 条件付きリクエストによるキャッシュの再検証
      • 9.1.3 共有キャッシュとプライベートキャッシュ
      • 9.1.4 Cache-Controlヘッダー
      • 9.1.5 Varyヘッダー
    • 9.2 API Platformにおけるキャッシュ戦略
      • 9.2.1 キャッシュ関連ヘッダーの設定方法
      • 9.2.2 キャッシュ無効化システムの概要
      • 9.2.3 キャッシュ無効化システムの使用方法
      • 9.2.4 動作確認

    第10章 テストの実装

    • 10.1 テストの分類
    • 10.2 テストのための準備
    • 10.3 単体テストの実装
    • 10.4 機能テストのための準備
      • 10.4.1 テスト用データベースの準備
      • 10.4.2 テストフィクスチャーの準備
      • 10.4.3 現在日時のモック化
      • 10.4.4 JSON Schemaを利用したテストの準備
    • 10.5 機能テストの実装
      • 10.5.1 基本的な機能テスト
      • 10.5.2 サービスのモック化を用いたファイルアップロードのテスト
      • 10.5.3 dama/doctrine-test-bundleの導入
      • 10.5.4 スナップショットテストの導入

    第11章 フロントエンドとの連携

    • 11.1 フロントエンドアプリケーションの準備
    • 11.2 OpenAPI TypeScriptによるAPI型定義の自動生成
    • 11.3 フロントエンドアプリケーションの実装
      • 11.3.1 サーバーサイドからのAPIリクエスト
      • 11.3.2 クライアントサイドからのAPIリクエスト
    • 11.4 CORS対応
      • 11.4.1 オリジンとは
      • 11.4.2 CORSとは
      • 11.4.3 API PlatformにおけるCORS対応
      • 11.4.4 本番環境への適用に向けて
    • 11.5 API型定義における非推奨な仕様に対する警告
    • 11.6 IDaaSとの連携

    付録 API Platformのさらなる活用

    • Appendix 1 コンテントネゴシエーション
    • Appendix 2 GraphQLへの対応
    • Appendix 3 管理画面の実装
    • Appendix 4 レートリミットの実装
    • おわりに
    • 著者プロフィール
    • 参考文献
    • 索引

プロフィール

金本貴志かねもとたかし

株式会社Kannade 代表取締役。プログラマー。主にWebシステムの受託開発や社外CTO/技術顧問などの技術経営コンサルティングに従事。2008年に富士通株式会社に新卒入社したのち、2012年から株式会社カルテットコミュニケーションズ(2011年設立)にCTOとして8年間在籍。同社では自社サービスと開発組織の立ち上げを行い、創業期の急速な事業成長に貢献。フリーランスを経て2022年に株式会社Kannadeを設立し、現職。前著に「基本からしっかり学ぶ Symfony2入門」(共著、技術評論社、2015年)。技術カンファレンスやセミナーでの登壇多数。SymfonyやAPI Platformなど愛用するOSSへのコントリビュートも多数。私生活では4歳の娘と1歳の息子の子育てに奮闘中(本書発行当時)。X/Twitter: @ttskch