Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building Federated GraphQL APIs in Flask

Adarsh D
December 16, 2023

Building Federated GraphQL APIs in Flask

Deck of my Flaskcon 2023 Talk on Building Federated GraphQL APIs in Flask (https://www.youtube.com/watch?v=UXJeBvYI9S0 )

Talk slides and demo code are available at https://github.com/adarshdigievo/talks/tree/main/Flaskcon%2023%20-%20Federated%20GraphQL

Adarsh D

December 16, 2023
Tweet

More Decks by Adarsh D

Other Decks in Programming

Transcript

  1. Operations REST GET: Fetch data POST, PUT, PATCH, DELETE: Add,

    edit, modify and delete operations GraphQL HTTP Method used is POST always. QUERY: Fetch data MUTATION: Modify, update, delete, etc. SUBSCRIPTION: Realtime persistent operations
  2. Scalars & Types in GraphQL • Int A signed 32‐bit

    integer. • Float A signed double-precision floating-point value. • String A UTF‐8 character sequence. • Boolean true or false. • ID The ID scalar type represents a unique identifier Other types/containers: List, NonNull, Enum, Union, Interface (source: graphql.org)
  3. Scalars & Types in GraphQL Enumeration enum Episode { NEWHOPE

    EMPIRE JEDI } Custom type type Character { name: String! appearsIn: [Episode]! } Union type union SearchResult = Human | Droid | Starship
  4. Overfetching Prevention Initial API Version Return a greeting message New

    Requirement For desktop web clients, return a greeting image along with the greeting message
  5. Overfetching Prevention REST - Option 1 Disadvantage: For mobile clients,

    an extra unused field is returned with the response
  6. Overfetching Prevention REST - Option 2 - Adding separate endpoint

    Disadvantage: Extra network call and complexity for web clients
  7. Introspection & Type system • Strongly typed and schema based

    • All supported operations by a server are returned by ‘introspection’ • Presence of tooling to auto generate client code • REST would require additional doc tools - ‘flasgger’ or ‘flask-rest-api’. • GraphQL development is centered around its schema
  8. Apollo Federation • A standard/spec for combining multiple independent GraphQL

    schemas • Combines multiple related schemas from microservices (subgraphs) to a single unified schema (supergraph) • Abstracts away the microservice design from clients
  9. When to use GraphQL & Federation • Use GraphQL where

    it shines - Example: internal APIs with diverse use cases • Use GraphQL Federation when it fits your architecture / when a monolith becomes unmanageable [ From “8 Years of GraphQL: Unraveling the Trade-Offs” Talk by Marc-Andre Giroux (GraphQL Conf 2023) ]
  10. Directives A directive decorates part of a GraphQL schema or

    operation with additional configuration. Denoted using ‘@’ - similar to decorators in Python
  11. Entity • An Entity in Federation is an object type

    that can resolve its fields across multiple subgraphs. • It can be thought of as a GraphQL type which appears across multiple microservice subgraphs.
  12. @key directive • Designates an object type as an entity.

    • The @key directive is used to indicate fields that can be used to uniquely identify and fetch an object.
  13. Federation Gateway/Router • Combines multiple microservice schemas and exposes a

    single combined endpoint • Intelligent - It holds the logic to resolve entities and shared types
  14. Reference resolver function The reference resolver function enables the Federation

    gateway's query planner to resolve a particular entity by its @key fields.
  15. References • Graphql Specification: https://spec.graphql.org/ • Graphql.org Docs: https://graphql.org/learn/ •

    Apollo Federation Docs: https://www.apollographql.com/docs/federation/ • Strawberry GraphQL Docs: https://strawberry.rocks/docs • 8 Years of GraphQL: Unraveling the Trade-Offs: Marc-Andre Giroux