Production Ready
GraphQL
Table of Contents
-
Preface
-
Acknowledgments
-
An Introduction to GraphQL
-
One-Size-Fits-All
-
Let's Go Back in Time
-
Enter GraphQL
-
Type System
-
Introspection
-
Summary
-
GraphQL Schema Design
-
What Makes an API Great?
-
Design First
-
Client First
-
Naming
-
Descriptions
-
Use the Schema, Luke!
-
Expressive Schemas
-
Specific or Generic
-
The Relay Specification
-
Lists & Pagination
-
Sharing Types
-
Global Identification
-
Nullability
-
Abstract Types
-
Static Queries
-
Mutations
-
Fine-Grained vs Coarse-Grained
-
Errors
-
Schema Organization
-
Async Behavior
-
Data-driven vs Use-Case-Driven Schemas
-
Summary
-
Implementing GraphQL Servers
-
GraphQL Server Basics
-
Code First vs Schema First
-
Generating SDL Artifacts
-
Resolver Design
-
Schema Metadata
-
Multiple Schemas
-
Modular Schemas
-
Testing
-
Summary
-
Security
-
Rate Limiting
-
Blocking Abusive Queries
-
Timeouts
-
Authentication
-
Authorization
-
Introspection
-
Persisted Queries
-
Summary
-
Performance & Monitoring
-
Monitoring
-
The N+1 Problem and the Dataloader Pattern
-
Caching
-
Compiled Queries
-
Summary
-
Tooling
-
Linting
-
Analytics
-
Summary
-
Workflow
-
Design
-
Review
-
Development
-
Publish
-
Analyze
-
Ship
-
Public GraphQL APIs
-
GraphQL a Good Choice for Public APIs
-
Conventions
-
With Great Power comes Great Responsibility
-
Summary
-
GraphQL in a Distributed Architecture
-
GraphQL API Gateway
-
GraphQL as a BFF
-
Service Communication
-
Summary
-
Versioning
-
API Versioning is Never Fun
-
Versioning GraphQL is Possible
-
Continuous Evolution
-
Change Management
-
Summary
-
Documenting GraphQL APIs
-
Generators
-
The What, Not Just the How
-
Workflows and Use Cases
-
Example Queries
-
Changelogs
-
Summary
-
Migrating From Other API Styles
-
Generators
-
REST & GraphQL Alongside
-
Summary
-
Closing Thoughts