DEV Community

Cover image for Schema first workflows for Graphql development using codegen and Typescript
Rahul Ballal
Rahul Ballal

Posted on

Schema first workflows for Graphql development using codegen and Typescript

Introduction

A strictly typed schema is one of the great benefits of using Graphql. This schema acts as a contract between the backend and the frontend. When working on products that use Graphql as the backend API layer, I observed 2 types of working arrangements between team members :

  1. Same developer owns the backend work and the front end work. In this scenario the graphql schema evolves alongside the front end code and requirements.
  2. Multiple (2 or more) developers of same or different teams collaborate on different parts of frontend and backend

This write-up aims to address the second point where developers working on different parts of the app or feature need to do the following things:

  1. Understand the UI needs
  2. Understand the data needs of the UI
  3. Define a Graphql schema that acts as a data contract between frontend and Graphql code.
  4. Repeat #3 if there is a change in #1 and/or #2

This way of working is not new. Same can be applied if the API speaks REST (via a Swagger Spec) or gRPC (via ProtoBuf definition). We will focus only for the case where Graphql is the technology chosen.

Workflow

Lets imagine a simple Graphql Schema that defines data and operation for a Super Hero and Villain catalogue

enum Affiliation {
  GOOD
  EVIL
  UNDECIDED
}
type Character {
  id: ID!
  name: String!
  affiliation: Affiliation!
  rank: Int!
}
type Query {
   characters: [Character]!
   character(id: ID!): Character!   
}
input NewCharacterInput {
  name: String!
  affiliation: Affiliation!
  rank: Int!
}
input CharacterUpdateInput {
  id: ID!
  name: String
  affiliation: Affiliation
  rank: Int
}
type Mutation {
   addCharacter(newCharacter: NewCharacterInput!): Character!
   updateCharacter(update: CharacterUpdateInput!): Character!
}
type Subscription {
   characterAdded: Character!
}
Enter fullscreen mode Exit fullscreen mode

The front end developer workflow

Lets assume we want to build the front end using React and Typescript. We have chosen to use Apollo as the library to talk to the API.
✨✨✨✨
🦾 Enter Graphql Code Generator

The API/Backend developer workflow

On the backend it is paramount that we abide by the Graphql schema as the contract and use that contract as the basis for ensuring the type safety of the request, response and resolver types in our graphql code.
✨✨✨✨
🦾 Once again Graphql Code Generator saves a lot of work for us

Top comments (0)