概要

  • クエリ言語を記述することで、クライアント側が欲しいリソースとその形式を宣言できる
  • 単一のエンドポイントおよびリクエストで複数のリソースを取得できる
  • 型定義やクライアント実装の自動生成、クエリを試しに発行できるクライアントGUI機能、クエリ補完機能などといった開発体験の向上

オススメ資料

API設計

コードファースト or スキーマファースト

マイクロサービス

TypeScript

urql

Svelte

TypeGraphQL

graphql-code-generator

Apollo Client

Relay

Prisma

Go

gqlgen

PHP

Apollo GraphQL

Apollo Studio

Hasura

AWS

フロントエンド

Vue

バックエンド

セキュリティ

リスク

GraphQLによるDoS攻撃

  • データを大量に取得するクエリ
  • 重い計算をさせるクエリ
  • 大量にDBアクセスを発生させるクエリ

レースコンディション

対策

ホワイトリストによる制限

  • GraphQL API が受け付けるクエリ一覧をホワイトリストとして持っておいて、クライアントから送られてきたクエリがそれに一致する場合のみ実行するやり方

クエリのコスト制限

  • Query depth
  • Query complexity
  • Query rate limit

Introspection query

  • 本番ではOFF

Field suggestion

  • 本番ではOFF

スタックトレース

  • 本番ではOFF

事例

診断サービス

コマンドラインツール

curl

curl -X POST -H "Content-Type: application/json" http://localhost:13020/graphql -d '{"query": "query { admins { id \n name \n } }"}'

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-04-26 (水) 13:29:49 (416d)