Skip to content
GitHub no longer supports this web browser. Learn more about the browsers we support.
Wiring your microservices to GraphQL without writing any code
Go JavaScript TypeScript Shell Dockerfile
Branch: master
Clone or download
Cannot retrieve the latest commit at this time.
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Standalone Agogos (#98) Sep 5, 2019
.vscode Added upstream AD authentication (#59) Jul 15, 2019
docs
e2e "exportAs" directive (#113) Oct 31, 2019
examples Add better service mocks (#91) Aug 28, 2019
grpc Security alerts fixes (#101) Sep 5, 2019
remote-sources Small fixes (#115) Dec 1, 2019
services Graphql directive improvements (#119) Jan 7, 2020
standalone
.gitignore Added ds_store to gitignore Feb 24, 2019
LICENSE
README.md Push docker images via CircleCI (#57) Jul 14, 2019
Tiltfile
docker-compose.yml
package.json Rename to agogos (#49) Jun 16, 2019
yarn.lock

README.md

agogos

CircleCI

General

It allows you to create a unified GraphQL API in a microservices architecture. Each microservice contributes to a single unified schema.

agogos is composed of these components:

  • registry - Continuously collects, validates and unifies all the schema parts
  • graphql-server - A single GraphQL API executed with the unified schema

Disclaimer

This deployment is NOT intended for a production environment. It is still a reference implementation and we plan to add some production-ready features like authentication & authorization soon.

Example

User Service

Rest service for User details

GET http://user/:id
{
  id: ...,
  firstName: ...,
  lastName: ...
}

POST http://user/:id
body {
  firstName: ...,
  lastName: ...
}

It would also contain a GQL file declaring this schema (notice the @http directive):

type User {
  id: ID!
  firstName: String
  lastName: String
}

type Query {
  user(id: ID!): User
  @http(url: "http://user/:id")
}

type Mutation {
  createUser(firstName: String!, lastName: String): String
  @http(url: "http://user/:id", method: "POST")
}

User Subscription service

Rest service for User Subscription details

GET http://user-subscription/:id
{
  plan: ...,
  expirationDate: ...
}

It would also contain a GQL file declaring a Subscription extension for the User type:

type SubscriptionPlan {
  plan: String!
  expirationDate: String
}

type User {
  subscription: SubscriptionPlan
  @http(url: "http://user-subscription/:id")
}

A query to the unified GraphQL schema could be as following

query {
  user('some-id') {
    firstName
    lastName
    subscription {
      plan
      expoirationDate
    }
  }
}

It is actually resolved from the two separated services! Each is responsible for the schema extension and its own piece of data.

Service support

  • Rest service
  • gRPC service - planned
  • Databases - planned

Platform support

  • Kubernetes - planned
  • Any platform with a custom CD
You can’t perform that action at this time.