Overview
We support every protocol
- gRPC — Thanks to Connect, all APIs are accessible to tools from the entire gRPC ecosystem, interoperating seamlessly with Envoy, grpcurl, gRPC Gateway, gRPC-Web, and every other gRPC implementation.
 - REST — Thanks to Vanguard, we seamlessly support REST.
 - GraphQL — Lastly, thanks to Tailcall, they are all accessible via GraphQL.
 
Services
- Tailcall GraphQL Mesh on port 8000
 - Workflow “Starter” on port 8081
 - Domain microservices
- Org µService on port 9090
 - User Profile µService on port 9091
 - License µService on port 9092
 
 
Each µService (“microservice”) supports basic CRUD operations.
Mutations
The recommended way of creating resources in batch is by using a Temporal workflow. GraphQL provides the faintest illusion of ACID properties, since it allows clients to issue multiple writes in one HTTP request; however, per the GraphQL spec, the selection set is executed serially. It is for this reason we recommend creating data through a Temporal workflow.
mutation CreateWorkflow {  createOnboardingWorkflow(    input: {      org: {        name: "Kevin's Org"      }      profile: {        fullName: "Kevin Chen"      }      license: {        start: "2024-01-01T15:50-04:00"        end: "2024-01-07T15:50-04:00"      }    }  ) {    workflowId    orgId    profileId    licenseId  }}mutation CreateData {  createOrg(    input: {      id: "00000000-0000-0000-0000-000000000000"      name: "Kevin's Org"    }  ) {    org {      id      name    }  }
  createProfile(    input: {      id: "00000000-0000-0000-0000-000000000000"      fullName: "Kevin Chen"      orgId: "00000000-0000-0000-0000-000000000000"    }  ) {    profile {      id      fullName      orgId    }  }
  createLicense(    input: {      id: "00000000-0000-0000-0000-000000000000"      start: "2024-01-01T15:50-04:00"      end: "2024-01-07T15:50-04:00"      userId: "00000000-0000-0000-0000-000000000000"    }  ) {    license {      id      start      end      userId    }  }}