This project is an example of GraphQL implementation for API Gateway that can interact with microservices.
Install the appropriate software:
- Docker Desktop.
- Git.
- PyCharm (optional).
Clone the repository to your computer:
git clone https://github.com/mnv/python-course-graphql-gatewayTo configure the application copy
.env.sampleinto.envfile:cp .env.sample .env
This file contains environment variables that will share their values across the application. The sample file (
.env.sample) contains a set of variables with default values. So it can be configured depending on the environment.Build the container using Docker Compose:
docker compose build
This command should be run from the root directory where
Dockerfileis located. You also need to build the docker container again in case if you have updatedrequirements.txt.To run the project inside the Docker container:
docker compose up
When containers are up server starts at http://127.0.0.1:8000/graphql. You can open it in your browser.
This project provides fixtures to test GraphQL. Fixtures are located in src/fixtures.
There are JSON-files for favorite places and countries information.
GraphQL application uses these fixtures to emulate REST API responses.
Query example to request a list of favorite places:
query {
places {
latitudelongitudedescriptioncitylocality
}
}Query example to request a list of favorite places with countries information:
query {
places {
latitudelongitudedescriptioncitylocalitycountry {
namecapitalalpha2codealpha3codecapitalregionsubregionpopulationlatitudelongitudedemonymareanumericCodeflagcurrencieslanguages
}
}
}This query will request additional information about related countries in optimal way using data loaders to prevent N + 1 requests problem.
The project contains a special Makefile that provides shortcuts for a set of commands:
Build the Docker container:
make build
Generate Sphinx documentation run:
make docs-html
Autoformat source code:
make format
Static analysis (linters):
make lint
Autotests:
make testThe test coverage report will be located at
src/htmlcov/index.html. So you can estimate the quality of automated test coverage.Run autoformat, linters and tests in one command:
make all
Run these commands from the source directory where Makefile is located.
The project integrated with the Sphinx documentation engine. It allows the creation of documentation from source code. So the source code should contain docstrings in reStructuredText format.
To create HTML documentation run this command from the source directory where Makefile is located:
make docs-htmlAfter generation documentation can be opened from a file docs/build/html/index.html.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.