This is an example of using GraphQL federation with python. This includes multiple python graphql servers and a federated gateway.
Each server is made up of a default set of components
- app.py - This is a generic Flask based application file to serve the GraphQL service. This does not need to be modified outside of the Flask Port.
- schema/schema.graphql - This is the standard schema file where you define and document your service.
- schema/schema.py - This is the Class that you will use most. This allows you to create your resolvers and return the final schema to the Flask App
- schema/data_interface.py - This is just me stubbing out a data service so you can test this. You would create your own access to a DB or you could have this access a REST Api if you want.
All data asociated with the User User - http://localhost:8300
All data asociated with the Photo Photo - http://localhost:8301
All data asociated with the Review Review - http://localhost:8302
Gateway - http://localhost:4000
To run this demo
docker-compose up --buildThe Query Browser will run at http://localhost:4000 this is where you can test queries.
The config will also allow you yo use the individual GraphQL servers.
- User - http://localhost:8300
- Photo - http://localhost:8301
- Review - http://localhost:8302
This will connect all of the GraphQL Schemas with one query.
query { users(first_name:"Han"){ id first_name last_name photos{ id url reviews{ id title body } } } }{ "data": { "users": [ { "id": "100", "first_name": "Han", "last_name": "Solo", "photos": [ { "id": "1000", "url": "https://upload.wikimedia.org/wikipedia/en/thumb/b/be/Han_Solo_depicted_in_promotional_image_for_Star_Wars_%281977%29.jpg/220px-Han_Solo_depicted_in_promotional_image_for_Star_Wars_%281977%29.jpg", "reviews": [ { "id": "10000", "title": "Great Photo", "body": "Lorem Ipsum Set Adore, Lorem Ipsum Set Adore, Lorem Ipsum Set Adore, Lorem Ipsum Set Adore, Lorem Ipsum Set Adore, " } ] }, { "id": "1001", "url": "https://pbs.twimg.com/media/BlrdTeMIQAAN1rv.jpg", "reviews": [ { "id": "10001", "title": "Great Photo", "body": "Lorem Ipsum Set Adore, Lorem Ipsum Set Adore, Lorem Ipsum Set Adore, Lorem Ipsum Set Adore, Lorem Ipsum Set Adore, " } ] } ] } ] } }