API para adicionar e listar planetas da franquia Star Wars.
Ao adicionar um novo planeta, a aplicação buscará na SWAPI quantas vezes o mesmo apareceu nos filmes.
O design se baseia em alguns conceitos do Domain-Driver Design, Eric Evans e da Hexagonal Architecture de Alistair Cockburn.
- Listing
- Adding
- Storage
- HTTP
- RESTful server
- Client
Docker e docker-compose ou Go.
O gerenciamento de pacotes é feito através de Go Modules no arquivo go.mod
. Os módulos utilizados como dependência são:
- govalidator como helper para validação e tratamento de erros de validação
- chi como roteador HTTP
- mongo-driver como driver do MongoDB
Para baixá-las com Go instalado na máquina:
$ go mod download
Este repositório provê um ambiente de execução Docker via Dockerfile e docker-compose com todas as dependências e configurações necessárias.
Além disso, possui uma especificação OpenAPI 3 openapi.yml.
Nome | Descrição |
---|---|
PORT | Porta do servidor HTTP |
DB_CONNECTION_URI | URI de conexão com MongoDB |
DB_TIMEOUT_MS | Tempo máximo de transação no MongoDB em milissegundos |
PLANETS_API_BASE_URL | URL base da API para buscar informações extras de planetas |
Para executar via docker-compose
$ docker-compose up --build -d
Uma demonstração da aplicação foi implantada no plano grátis do heroku em: https://swapi-golang-rest-api.herokuapp.com
$ curl --request POST \
--url https://swapi-golang-rest-api.herokuapp.com/api/planets \
--header 'content-type: application/json' \
--data '{
"name": "tatooine",
"climate": "arid",
"terrain": "desert"
}'
$ curl --request GET \
--url https://swapi-golang-rest-api.herokuapp.com/api/planets/5f99b620ce4200066e7efed4
$ curl --request GET \
--url 'https://swapi-golang-rest-api.herokuapp.com/api/planets?page=1&limit=5'
$ go test ./...
Package | Coverage |
---|---|
github.com/renanferr/planets-api/pkg/adding | 100.0% |
github.com/renanferr/planets-api/pkg/http/client | 86.1% |
github.com/renanferr/planets-api/pkg/http/rest | 100.0% |
github.com/renanferr/planets-api/pkg/http/rest/planets | 80.3% |
github.com/renanferr/planets-api/pkg/listing | 100.0% |
github.com/renanferr/planets-api/pkg/storage/mongo | 67.4% |
A aplicação está sob a licença MIT