Table of Contents
- 1. Concepts
- 2. Federation
- 3. Maintaining GraphQL
- 4. Tools
- 5. Reading
- 5.1. Production Ready GraphQL
- 5.1.1. An Introduction to GraphQL
- 5.1.2. GraphQL Schema Design
- 5.1.3. Implementing GraphQL Servers
- 5.1.4. Security
- 5.1.5. Performance & Monitoring
- 5.1.6. Tooling
- 5.1.7. Workflow
- 5.1.8. Public GraphQL APIs
- 5.1.9. GraphQL in a Distributed Architecture
- 5.1.10. Versioning
- 5.1.11. Documenting GraphQL APIs
- 5.1.12. Migrating From Other API Styles
- 5.1. Production Ready GraphQL
- 6. Videos
- 7. Conferences
1 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
1.1 Contrasting REST
- partials
- versions
- fields
1.2 Parsing
- Whitespace and line terminations are as expected
- Tokens
- The "query" keyword and name may not be present for [{ field }]
1.3 Operations
- query: read-only fetch
- mutation: write + fetch
- subscription: response to source events
1.4 Selection Sets
{ id firstName lastName }
- Can contain aliases
1.5 Types
- ID
- String
- DateTime
1.6 Schemas
The SDL provides a language for describing the type system for GraphQL.
1.7 Schema Root
1.8 Fragments
query withFragments { user(id: 4) { friends(first: 10) { ...friendFields } mutualFriends(first: 10) { ...friendFields } } } fragment friendFields on User { id name profilePic(size: 50) }
1.9 Queries
1.9.1 Variables
1.10 Mutations
1.11 Enums
1.12 Abstract Types
interface Animal { name: String! } interface Plant { genus: String! species: String! }
1.13 Unions
union Entity = Plant | Animal
2 Federation
3 Maintaining GraphQL
4 Tools
4.1 GraphQL Playground
4.2 GraphQL Configuration
4.3 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
5 Reading
5.1 Production Ready GraphQL
5.1.1 An Introduction to GraphQL
[ ]
An Introduction to GraphQL[ ]
One-Size-Fits-All[ ]
Let’s Go Back in Time[ ]
Enter GraphQL[ ]
Type System[ ]
Introspection
5.1.2 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
5.1.3 Implementing GraphQL Servers
[ ]
GraphQL Server Basics[ ]
Code First vs SchemaFirst[ ]
Generating SDL Artifacts[ ]
Resolver Design[ ]
Schema Metadata[ ]
Multiple Schemas[ ]
Modular Schemas[ ]
Testing
5.1.4 Security
[ ]
Rate Limiting[ ]
Blocking Abusive Queries[ ]
Timeouts[ ]
Authentication[ ]
Authorization[ ]
Blocking Introspection[ ]
Persisted Queries
5.1.5 Performance & Monitoring
[ ]
Monitoring[ ]
The N+1 Problem and the Dataloader Pattern[ ]
Caching[ ]
Compiled Queries
5.1.6 Tooling
[ ]
Linting[ ]
Analytics
5.1.7 Workflow
[ ]
Design[ ]
Review[ ]
Development[ ]
Publish[ ]
Analyze Ship
5.1.8 Public GraphQL APIs
[ ]
Is GraphQL a Good Choice for Public APIs[ ]
Lack of Conventions[ ]
With Great Power comes Great Responsibility
5.1.9 GraphQL in a Distributed Architecture
[ ]
GraphQL API Gateway[ ]
GraphQL as a BFF[ ]
Service Communication
5.1.10 Versioning
[ ]
API Versioning is Never Fun[ ]
Versioning GraphQL is Possible[ ]
Continuous Evolution[ ]
Change Management
5.1.11 Documenting GraphQL APIs
[ ]
Documentation Generators[ ]
The What, Not Just the How[ ]
Workflows and Use Cases[ ]
Example / Pre-Made Queries[ ]
Changelogs[ ]
Upcoming Changes
5.1.12 Migrating From Other API Styles
[ ]
Generators[ ]
REST & GraphQL Alongside
6 Videos
7 Conferences
7.1 GraphQL Summit 2020
7.1.1 Project Constellation; the future of Federation
7.1.2 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