Presented at ReactSF on 8/30/2017, this was a talk about GraphQL, its benefits for client developers, and how GraphQL makes it easier to build product!
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL Some issues with data at Coursera 5 Backends can easily break clients API contracts are not automatically enforced on the client or server API Discoverability Finding the right REST endpoint is difficult. Knowing the expected request and response formats is even harder.
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL Some issues with data at Coursera 6 It’s hard for backend devs to build the perfect API Either you end up building a view-specific API or modular endpoints that need to be joined on the client. Performance Traversing through five entities requires five round-trips.
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 13 query CoursePage { course(slug: "machine-learning") { title description } } <Course />
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 14 query CoursePage { course(slug: "machine-learning") { title description } } <Course /> university { name logo } <University />
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 15 query CoursePage { course(slug: "machine-learning") { title description } } <Course /> university { name logo } <University /> instructor { name title } <Instructor />
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 16 query CoursePage { course(slug: machine-learning") { title description } } <Course /> university { name logo } <University /> instructor { name title } <Instructor /> profile { photo } <ProfilePhoto />
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 20 All data is available in one place Clients don’t know (or care) about where data actually comes from All data is typed No longer will you have to guess what is provided by an endpoint. GraphQL enforces typing of all data. Its a single entry point for all your data
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 22 You get exactly what you want, and only what you want Request exactly the data you need for your product. GraphQL is declarative Worry about what your product needs, not how it gets there. Data usage evolves with the product Data declarations are composable, just like React. Use the same mental model! Inverting API control back to client developers
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 23 Every field in your query is validated All fields (even traversals between different models) are validated while writing code. Editor autocompletion against available backend data Modern editors can now autocomplete against server-side fields, so there’s no more guessing as to whether or not something exists. Code generation of static types for query allows validation of actual data usage, not just existence. We can generate Typescript and Flow bindings to ensure correct type usage at compile time. Providing schemas to client-side code
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 27 GraphQL is product-centric Think less about where your data comes from, and more about using that data. Query complexity should match product complexity Anything beyond this is a warning sign that something is wrong, and that more work can be delegated to the server. Think about your product!
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 29 GraphQL is product-centric Think less about where your data comes from, and more about using that data. Query complexity should match product complexity Anything beyond this is a warning sign that something is wrong, and that more work can be delegated to the server. Schema-first development Client developers and backend developers can work in parallel once a schema is developed. Think about your product!
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 31 Run your GraphQL server in the browser Your React application can use GraphQL today by running GraphQL itself in the client. Or use launchpad.graphql.com! Create a GraphQL server that delegates to existing endpoints. Packages like apollo-server make it super simple to build servers that can consume your downstream services. Backend-as-a-service Scaphold and Graph.cool both provide GraphQL backends in the cloud Trying GraphQL out
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 32 Data declarations Specify exactly what data you need, wherever you use it. Caching Clients like Relay Modern and Apollo deal with caching out of the box, making it simple to build performant React / GraphQL applications. Drop-in support for GraphQL Clients makes it straightforward to make the best use of GraphQL throughout your application. Using a GraphQL client
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 33 We often don’t have the luxury of building from scratch. Trying to convince client and server developers to stop what they’re doing and use GraphQL is difficult. Opt for incremental adoption where possible. GraphQL clients provide drop-in support Avoid disruption of backend services GraphQL is a layer on top of your backend services, not a replacement for them. Innovate in place
Chapter 3: Why We Love GraphQL Chapter 4: Getting Started with GraphQL 34 GraphQL.org The homepage of GraphQL is beautiful and contains a ton of in- depth materials on the in’s and out’s of GraphQL. launchpad.graphql.com Stand up a GraphQL server from your browser! You can even hit this server from your local GraphQL Apollo, GraphQL Slack Join the Apollo and GraphQL slacks for the latest about GraphQL. Resources