• Caching • Static types :( • Performance insights & analytics • What is REST and what is a RESTful service? • Filters? ?filter=foo ?filter=[foo, bar] ?????? • API versioning sucks (for the API consumer) • Analytics server side are quite limited, no per field insights etc.
with and still focused on client needs • Supports queries, mutations and subscriptions • You can combine different data sources (SQL, GQL, REST apis, my_data.txt)
handling boilerplate. • Client available for all the modern web and mobile environments ◦ Bindings for React, Vue, Angular, Android, iOS, Ember & Meteor • Static type generation ◦ TypeScript, Flowtype, Scala.js, Swift & Java • Optimistic UI updates • Pagination support with cursors or offsets, not limited to Apollo Client • Schema stitching (on Apollo server) • Caching is handled in the GraphQL spec
is nice to read and write • GraphiQL is great (like swagger but it comes for free) • Caching per field possible • Possible to limit queries to only fields you need • Less HTTP calls • Improved performance (less joins) Cons: • Less commonplace and familiar • Single point of failure for client applications for API calls • Less mature tools, the spec might still evolve • Some APIs might be harder to describe as graphs • Backend support is currently best in Node • Less conventions used (status codes, etc)
You don’t use too cool for school techs • You understand the benefits of static typing • You want client devs to have a good time and are willing to discuss with them how the apis should look like • You want less boilerplate in frontend code • And you can use both REST and GraphQL if you like. They can co-exist :)