Skip to content

mvdocouto/bff-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pokemon API

Abstração da Pokemon API para listagem dos pokemons informando se nome e as categorias (tipos) associados ao mesmo.

Arquitetura

Instalação

Todo o projeto esta dockerizado. Para roda-lo basta rodar o comando

docker-componse -f docker-compose.yml up

O docker-compose.yml contem os sequintes serviços:

  • mongo - Banco da dados em MongoDB.
  • mongo-seed - Script para a carga inicial do banco de dados.
  • colorapi - API que retorna as categorias (tipos) dos pokemons e suas respecitivas cores.
  • bffapi - API que abstrai a listagem de pokemons retornando seus nomes e tipos.

BFF API

API que retornas os Pokemons cadastrados em PokeAPI associando suas categorias (tipos) a cor correspondente na Color API.

  • Node
  • Express - Web Framework.
  • Mongoose - Biblioteca para interação com MongoDB.
  • joi - Biblioteca de validação de dados baseada em schemas.
  • dotenv - Biblioteca para utilização de variáveis de ambiente.
  • winston - biblioteca de padrão para criação de log.
  • eslint - Biblioteca de lint
  • jest - Framework para teste em Java Script.
  • supertest - Biblioteca para abstração para testes HTTP.
  • nock - Biblioteca para mock de requisições HTTP.

Instalação

Para instalar as dependencias basta acessar o terminal e rodar

yarn install

Na raiz do projeto existe o arquivo .env onde estão as configurações da url da PokeAPI, da url da ColorAPI e a porta onde a aplicação ira rodar. Coso não seja fornecdo uma porta o valor default é a 5000.

PORT=5000
POKEAPI_URL=https://pokeapi.co/api/v2/
COLOR_API_URL=http://colorapi:8000

Executando a API

O serviço possui os sequintes comandos para a execução:

yarn dev
yarn start
yarn test
yarn lint
  • start - executa o serviço em produção.
  • dev - executa em modo desenvolvimento reiniciando o serviço a cada alteração do código.
  • test - executa as suites de teste da aplicação.
  • lint - verfica o lint dos arquivos.

Observação:

O serviço não executa se as variáveis de ambiente não estiverem configuradas corretamente. Como no exemplo: Error: Config validation error: "POKEAPI_URL" is required

Endpoints

GET /

Lista os Pokémons e seus Tipos (categorias) com suas cores correspondentes. Por padrão a API retorna os 20 primeiros registros. Para alterar a quantidades necessário passar os parametros limt e offset por query string.

[
    {
        "name": "bulbasaur",
        "types": [
            {
                "name": "grass",
                "color": "#239B56"
            },
            {
                "name": "poison",
                "color": "#C39BD3"
            }
        ]
    },
    {
        "name": "charmander",
        "types": [
            {
                "name": "fire",
                "color": "#E74C3C"
            }
        ]
    }
]

Retorna os seguintes status:

  • 200 - Categorias listadas com sucesso
  • 500 - Erro ao tentar listar as categorias

GET /?limit={limitValue}&offset={offsetValue}

[
    {
        "name": "bulbasaur",
        "types": [
            {
                "name": "grass",
                "color": "#239B56"
            },
            {
                "name": "poison",
                "color": "#C39BD3"
            }
        ]
    }
]

Retorna os seguintes status:

  • 200 - Categorias listadas com sucesso
  • 500 - Erro ao tentar listar as categorias

GET /health

Retorna se aplicação esta running:

{
    status: 'ok'
}

Retorna os seguintes status:

  • 200 - Retorna que o serviço esta running

COLOR API

API que fornece as cores hexadecimais para cada uma das categorias (tipos) de Pokémons cadastrados em PokeAPI.

  • Node
  • Express - Web Framework.
  • Mongoose - Biblioteca para interação com MongoDB.
  • joi - Biblioteca de validação de dados baseada em schemas.
  • dotenv - Biblioteca para utilização de variáveis de ambiente.
  • winston - biblioteca de padrão para criação de log.
  • eslint - Biblioteca de lint.
  • jest - Framework para teste em Java Script.
  • supertest - Biblioteca para abstração para testes HTTP.
  • mongodb-memory-server - Biblioteca para mock MongoDB, criando um banco em memoria. Utilizada durante os testes.

Instalação

Para instalar as dependencias basta acessar o terminal e rodar

yarn install

Na raiz do projeto existe o arquivo .env onde estão as configurações da url do banco de dados e a porta onde a aplicação ira rodar. Coso não seja fornecdo uma porta o valor default é a 8000.

PORT=8000
DATABASE_URL=mongodb://localhost:27017/colors

Executando a API

O serviço possui os sequintes comandos para a execução:

yarn dev
yarn start
yarn test
yarn lint
  • start - executa o serviço em produção.
  • dev - executa em modo desenvolvimento reiniciando o serviço a cada alteração do código.
  • test - executa as suites de teste da aplicação.
  • lint - verfica o lint dos .

Observação:

O serviço não executa se as variáveis de ambiente não estiverem configuradas corretamente. Como no exemplo: Error: Config validation error: "DATABASE_URL" is required

Endpoints

GET /colors

Lista todas as categorias cadastradas e suas respectivas cores.

[
    {
        "_id": "5fe8a68b0a0f333989d727d3",
        "category": "normal",
        "color": "#3498DB"
    },
    {
        "_id": "5fe8a6980a0f333989d727d4",
        "category": "fighting",
        "color": "#ECF0F1"
    },
    {
        "_id": "5fe8a6a40a0f333989d727d5",
        "category": "flying",
        "color": "#2E86C1"
    },
    {
        "_id": "5fe8a6b00a0f333989d727d6",
        "category": "poison",
        "color": "#C39BD3"
    }
]

Retorna os seguintes status:

  • 200 - Categorias listadas com sucesso
  • 500 - Erro ao tentar listar as categorias

GET /colors?category={categoryValue}

Retorna os dados de uma categoria especifica. Exemplo http://localhost:8000/colors?category=fighting

[
    {
        "_id": "5fe8a6980a0f333989d727d4",
        "category": "fighting",
        "color": "#ECF0F1"
    }
]

Retorna os seguintes status:

  • 200 - Categoria listada com sucesso
  • 404 - Nenhuma categoria encontrada para este filtro
  • 500 - Erro ao exibir os dados da categoria

POST /colors

Recebe o seguinte payload no body:

{
    "category": "poison",
    "color": "#C39BD3"
}

Retorna o seguinte payload:

{
    "_id": "5fe8a6b00a0f333989d727d6",
    "category": "poison",
    "color": "#C39BD3",
    "__v": 0
}

Retorna os seguintes status:

  • 201 - Categoria cadastrada com sucesso
  • 500 - Erro ao cadastrar uma categoria

DELETE /colors/{categoriaID}

Retorna o seguinte payload:

{
    "message": "Category successfully deleted"
}

Retorna os seguintes status:

  • 200 - Categoria excluida com sucesso
  • 404 - Categoria não encontrada
  • 500 - Erro ao excluir uma categoria

GET /health

Retorna se aplicação esta running:

{
    status: 'ok'
}

Retorna os seguintes status:

  • 200 - Retorna que o serviço esta running

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published