# README
Planets API
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.
Componentes
Business Core
- Listing
- Adding
Adapters
- Storage
- HTTP
- RESTful server
- Client
Dependências
Database
Ambiente de Desenvolvimento
Docker e docker-compose ou Go.
Go Modules
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
Como usar
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.
Variáveis de Ambiente
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 |
Docker-Compose
Para executar via docker-compose
$ docker-compose up --build -d
Live Demo
Uma demonstração da aplicação foi implantada no plano grátis do heroku em: https://swapi-golang-rest-api.herokuapp.com
Exemplos de Requisição
Adding Planet
$ 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"
}'
Getting Planet
$ curl --request GET \
--url https://swapi-golang-rest-api.herokuapp.com/api/planets/5f99b620ce4200066e7efed4
Listing Planet
$ curl --request GET \
--url 'https://swapi-golang-rest-api.herokuapp.com/api/planets?page=1&limit=5'
Testes
Testando
$ go test ./...
Cobetura
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% |
Licença
A aplicação está sob a licença MIT