# Title
Table of Contents
Concepts
GraphQL is a specification for an API query language and server engine capable of executing such queries.
- Document has many operations or fragments (executables) or type system information
- Operation types may be queries, mutations, and subscriptions
Contrasting REST
- partials
- versions
- fields
Parsing
- Whitespace and line terminations are as expected
- Tokens
- The "query" keyword and name may not be present for [{ field }]
Operations
- query: read-only fetch
- mutation: write + fetch
- subscription: response to source events
Selection Sets
{
id
firstName
lastName
}
- Can contain aliases
Types
- ID
- String
- DateTime
Schemas
The SDL provides a language for describing the type system for GraphQL.
Schema Root
Fragments
query withFragments { user(id: 4) { friends(first: 10) { ...friendFields } mutualFriends(first: 10) { ...friendFields } } } fragment friendFields on User { id name profilePic(size: 50) }
Queries
Variables
Mutations
Enums
Abstract Types
interface Animal { name: String! } interface Plant { genus: String! species: String! }
Unions
union Entity = Plant | Animal
Federation
Maintaining GraphQL
Tools
GraphQL Playground
GraphQL Configuration
Mocking
npm install -g get-graphql-schema graphql-cli graphql-faker mkdir t && cd t # graphql init get-graphql-schema https://$HOST/graphql/ > schema.graphql graphql-faker schema.graphql open http://localhost:9002/editor
Reading
Production Ready GraphQL
An Introduction to GraphQL
[ ]An Introduction to GraphQL[ ]One-Size-Fits-All[ ]Let’s Go Back in Time[ ]Enter GraphQL[ ]Type System[ ]Introspection
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[ ]Designing for Static Queries[ ]Mutations[ ]Fine-Grained or Coarse-Grained[ ]Errors[ ]Schema Organization[ ]Asynchronous Behavior[ ]Data-Driven Schema vs Use-Case-Driven Schema
Implementing GraphQL Servers
[ ]GraphQL Server Basics[ ]Code First vs SchemaFirst[ ]Generating SDL Artifacts[ ]Resolver Design[ ]Schema Metadata[ ]Multiple Schemas[ ]Modular Schemas[ ]Testing
Security
[ ]Rate Limiting[ ]Blocking Abusive Queries[ ]Timeouts[ ]Authentication[ ]Authorization[ ]Blocking Introspection[ ]Persisted Queries
Performance & Monitoring
[ ]Monitoring[ ]The N+1 Problem and the Dataloader Pattern[ ]Caching[ ]Compiled Queries
Tooling
[ ]Linting[ ]Analytics
Workflow
[ ]Design[ ]Review[ ]Development[ ]Publish[ ]Analyze Ship
Public GraphQL APIs
[ ]Is GraphQL a Good Choice for Public APIs[ ]Lack of Conventions[ ]With Great Power comes Great Responsibility
GraphQL in a Distributed Architecture
[ ]GraphQL API Gateway[ ]GraphQL as a BFF[ ]Service Communication
Versioning
[ ]API Versioning is Never Fun[ ]Versioning GraphQL is Possible[ ]Continuous Evolution[ ]Change Management
Documenting GraphQL APIs
[ ]Documentation Generators[ ]The What, Not Just the How[ ]Workflows and Use Cases[ ]Example / Pre-Made Queries[ ]Changelogs[ ]Upcoming Changes
Migrating From Other API Styles
[ ]Generators[ ]REST & GraphQL Alongside
Videos
Conferences
GraphQL Summit 2020
Project Constellation; the future of Federation
GraphQL in Production
- Paypal, Shopify, Priceline, American
- Invest in tooling
- Look at the execution
- Measure timing
- Public APIs can be difficult
- How teams roll out GraphQL
- Schema design shouldn't just map REST
- Error handling
- Caching
- Providence of data and finding owner of data
- Collaborating on the features with Product and Engineering
- Duplicated data
- Be patient when evangelizing GraphQL