初めてのGraphQL ―Webサービスを作って学ぶ新世代API

Book description

今日では多くのWebサービスがRESTアーキテクチャスタイルで実装されています。RESTは2000年にフィールディングの論文で提唱された後に爆発的に普及し洗練されてきました。一方で、本書で紹介するGraphQLは2015年にFacebookによって公開されたRESTとは異なるアプローチのアーキテクチャです。GraphQLの最大の特徴はクエリ言語を用いてデータを操作する点です。クエリ言語の表現力の高さによりクライアントは本当に必要なリクエストを送ることができます。本書ではGraphQLの概要とGraphQLを用いたWebサービスの開発方法を実装例に沿って紹介します。認証やファイルアップロードといった実践的なトピックまで踏み込んだGraphQLの実用的な入門書です。

Table of contents

  1.  大扉
  2.  原書大扉
  3.  クレジット
  4.  賞賛の声
  5.  訳者まえがき
  6.    翻訳にあたって
  7.    GraphQLの概観
  8.    謝辞
  9.  まえがき
  10.   本書の構成
  11.   対象読者
  12.   表記上のルール
  13.   サンプルコードの使用について
  14.   意見と質問
  15.   謝辞
  16.  1章 GraphQLへようこそ
  17.   1.1 GraphQLとは
  18.    1.1.1 GraphQLの言語仕様
  19.    1.1.2 GraphQLの設計原則
  20.   1.2 GraphQLの誕生
  21.   1.3 データ通信の歴史
  22.    1.3.1 RPC
  23.    1.3.2 SOAP
  24.    1.3.3 REST
  25.   1.4 RESTの課題
  26.    1.4.1 過剰な取得
  27.    1.4.2 過小な取得
  28.    1.4.3 RESTのエンドポイント管理
  29.   1.5 GraphQLの実情
  30.    1.5.1 GraphQLのクライアント
  31.  2章 グラフ理論
  32.   2.1 グラフ理論の用語
  33.   2.2 グラフ理論の歴史
  34.   2.3 木というグラフ
  35.   2.4 実世界でのグラフ
  36.  3章 GraphQLの問い合わせ言語
  37.   3.1 GraphQL APIの便利なツール
  38.    3.1.1 GraphiQL
  39.    3.1.2 GraphQL Playground
  40.    3.1.3 公開GraphQL API
  41.   3.2 GraphQLのクエリ
  42.    3.2.1 エッジと接続
  43.    3.2.2 フラグメント
  44.   3.3 ミューテーション
  45.    3.3.1 クエリ変数
  46.   3.4 サブスクリプション
  47.   3.5 イントロスペクション
  48.   3.6 抽象構文木
  49.  4章 スキーマの設計
  50.   4.1 型定義
  51.    4.1.1 型
  52.    4.1.2 スカラー型
  53.    4.1.3 Enum
  54.   4.2 コネクションとリスト
  55.    4.2.1 一対一の接続
  56.    4.2.2 一対多の接続
  57.    4.2.3 多対多の接続
  58.    4.2.4 異なる型のリスト
  59.   4.3 引数
  60.    4.3.1 データのフィルタリング
  61.   4.4 ミューテーション
  62.   4.5 入力型
  63.   4.6 返却型
  64.   4.7 サブスクリプション
  65.   4.8 スキーマのドキュメント化
  66.  5章 GraphQLサーバーの実装
  67.   5.1 プロジェクトのセットアップ
  68.   5.2 リゾルバ
  69.    5.2.1 ルートリゾルバ
  70.    5.2.2 型リゾルバ
  71.    5.2.3 InputとEnumの使用
  72.    5.2.4 エッジと接続
  73.    5.2.5 カスタムスカラー型
  74.   5.3 apollo-server-express
  75.   5.4 コンテキスト
  76.    5.4.1 MongoDBのインストール
  77.    5.4.2 コンテキストへのデータベースの追加
  78.   5.5 GitHub認可
  79.    5.5.1 GitHub OAuthのセットアップ
  80.    5.5.2 認可プロセス
  81.    5.5.3 githubAuthミューテーション
  82.    5.5.4 ユーザーの認証
  83.   5.6 まとめ
  84.  6章 GraphQLクライアントの実装
  85.   6.1 GraphQL APIの利用
  86.    6.1.1 フェッチリクエスト
  87.    6.1.2 graphql-request
  88.   6.2 Apollo Client
  89.   6.3 Apollo ClientとReact
  90.    6.3.1 プロジェクトの準備
  91.    6.3.2 Apollo Clientの設定
  92.    6.3.3 Queryコンポーネント
  93.    6.3.4 Mutationコンポーネント
  94.   6.4 認可
  95.    6.4.1 ユーザー認可
  96.    6.4.2 ユーザー識別
  97.   6.5 キャッシュ
  98.    6.5.1 フェッチポリシー
  99.    6.5.2 キャッシュの永続化
  100.    6.5.3 キャッシュの更新
  101.  7章 GraphQLの実戦投入にあたって
  102.   7.1 サブスクリプション
  103.    7.1.1 サブスクリプションの利用
  104.    7.1.2 サブスクリプションの処理
  105.   7.2 ファイルアップロード
  106.    7.2.1 サーバーでアップロードを処理する
  107.    7.2.2 Apollo Clientを使用した写真の新規投稿
  108.   7.3 セキュリティ
  109.    7.3.1 リクエストタイムアウト
  110.    7.3.2 データの制限
  111.    7.3.3 クエリ深さの制限
  112.    7.3.4 クエリの複雑さ制限
  113.    7.3.5 Apollo Engine
  114.   7.4 次の段階にすすむ
  115.    7.4.1 漸進的なマイグレーション
  116.    7.4.2 スキーマファースト開発
  117.    7.4.3 GraphQLイベント
  118.    7.4.4 コミュニティ
  119.    7.4.5 コミュニティのSlackチャンネル
  120.  付録A Relay各仕様解説
  121.   A.1 Global Object Identification
  122.   A.2 Cursor Connections
  123.   A.3 Input Object Mutations
  124.   A.4 Mutations updater
  125.  奥付

Product information

  • Title: 初めてのGraphQL ―Webサービスを作って学ぶ新世代API
  • Author(s): Eve Porcello, Alex Banks, 尾崎 沙耶, あんどうやすし
  • Release date: November 2019
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873118932

You might also like

book

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

by Ilya Grigorik, 和田 祐一郎/株式会社プログラミングシステム社

現代のアプリケーションエンジニアは、UIやデータ処理、開発言語、プラットフォームの仕様や癖だけでなく、サーバやネットワークについても、上から下まで、表から裏まで広く知ることを求められます。本書は「ブラウザ」に関連し、インターネットで使用されるさまざまなネットワーク技術をまとめたものです。HTTP/2.0やWebRTCなどの最新技術、WebSocketやXMLHttpRequestなどのブラウザAPI、そしてそれらの土台となるTCPやUDPやトランスポート層についてまでを幅広くカバーします。また改善前後の性能・速さを可能な限り具体化し、それぞれの場面においてのパフォーマンス改善幅を示します。

book

詳説 イーサネット 第2版

by Charles E. Spurgeon, Joann Zimmerman, 三浦 史光, 豊沢 聡

イーサネット技術についての解説書。本書では、ファーストイーサネットやギガビットイーサネットなどの従来技術だけでなく、10ギガ、40ギガ、100ギガビットなど最新のイーサネット仕様を詳しく解説します。また、全二重イーサネット、オートネゴシエーション、Power over Ethernet、Energy Efficient Ethernet、構造化ケーブリングシステム、スイッチを用いたネットワークの設計、ネットワーク管理、ネットワークのトラブルシューティングのテクニックなども解説します。ネットワークの設計、監視、保守、障害時対応までを網羅し、信頼性の高いネットワークの構築を支援します。

book

アイソモーフィックJavaScript

by Jason Strimpel, Maxime Najim, 牧野 聡

アイソモーフィックJavaScriptは、クライアントサイド(ブラウザ)とサーバーサイドで同じコードを実行できるようにするためのフレームワークの総称。本書では、従来のアプリケーションが持つ問題点(読み込みの遅さ、SEO対策の困難さなど)を明らかにするところから始め、アイソモーフィックなアプリケーションの分類やアイソモーフィックさの度合いについて理解したうえで、アイソモーフィックなJavaScriptフレームワークを構築するための実践手法を解説し、Walmart、Airbnb、Facebook、Netflixといった大企業がアイソモーフィックJavaScriptを選んだ理由を明らかにします。読者は、なぜこのアプリケーションアーキテクチャーが、ページ読み込み速度やSEOコンパチビリティといった、ビジネス面でクリティカルな問題を解決するためのソリューションとして人気上昇中なのかを学べます。

book

脳に収まるコードの書き方 ―複雑さを避け持続可能にするための経験則とテクニック

by Mark Seemann, 吉羽 龍太郎, 原田 騎郎, Robert C. Martin

ソフトウェアは複雑さを増すばかりですが、人間の脳は限られた複雑さしか扱えません。ソフトウェアが思い通りに動くようするには、脳に収まり、人間が理解できるコードを書く必要があります。 本書は、拡張を続けても行き詰ることなくコードを書き、複雑さを回避するための実践的な方法を解説します。最初のコードを書き始めるところから機能を追加していくところまでを解説し、効率的で持続可能なペースを保ちながら、横断的な問題への対処やトラブルシューティング、最適化を行なう方法を説明します。自分のチェックリストからチームワーク、カプセル化から分解、API設計から単体テストまで、ソフトウエア開発の重要な課題に対する考え方やテクニックを紹介します。サンプルプロジェクトで使うコードは、Gitリポジトリの形で入手でき、試しながら学べます。 有効に機能するプロセスを選び、効果のない方法論から脱却する方法。チェックリストを使うことで、すでに持っているスキルを活用する方法。アプリケーションのバーティカルスライス(ひとつの機能をUIからバックエンドまで一通り実装したもの)を作成しデプロイすることで、分析による停滞から脱却する方法を学びます。さらに、コードの腐敗や不必要な複雑さにつながる要因を避ける方法、コードの振る舞いを変更するためのテクニック、コードの問題を迅速かつ効果的に解決する方法について解説します。