Este projeto, que está em sua primeira versão, possui temática do universo Pokemon. Ele consiste numa API REST escrita em Typescript que retorna objetos JSON de acordo com a rota acessada, com o intuito de reproduzir algumas funcionalidades de um Pokedex.
https://project-pokedex-api-production.up.railway.app/
Servidor: [Typescript] Node, Express, API REST
Banco de dados: postgres (SQL) com ORM Prisma
Deploy: back-end + banco de dados no railway
Padronização de código: Prettier e Eslint
POST /api/sign-up
{
"email": "ash@email.com",
"password": "12345678",
"confirmPassword": "12345678"
}
Status Code: 201
User ash@gmail.com has been registered successfully.
POST /api/sign-in
{
"email": "ash@email.com",
"password": "12345678"
}
Status Code: 200
User ash@gmail.com has successfully logged in.
User token: (JSON web token)
O token de autenticação é enviado ao header Authentication se o login for válido.
GET /api/pokemons
Parâmetro | Tipo | Descrição |
---|---|---|
token |
string |
Requerido. Chave de usuário logado passada através do header Authentication com valor Bearer ${token} |
[
{
"id": 1,
"name": "bulbasaur",
"number": 1,
"image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png",
"weight": 69,
"height": 7,
"baseExp": 64,
"description": "no description available",
"inMyPokemons": false
}, ...
]
POST /api/my-pokemons/:id/add
Parâmetro | Tipo | Descrição |
---|---|---|
token |
string |
Requerido. Chave de usuário logado passada através do header Authentication com valor Bearer ${token} |
id |
integer |
Requerido. Id do Pokemon passado como queryParams no lugar de :id |
Status Code: 200
The (pokemon_name) has been successfully added to your Pokedex.
POST /api/my-pokemons/:id/remove
Parâmetro | Tipo | Descrição |
---|---|---|
token |
string |
Requerido. Chave de usuário logado passada através do header Authentication com valor Bearer ${token} |
id |
integer |
Requerido. Id do Pokemon passado como queryParams no lugar de :id |
Status Code: 200
The (pokemon_name) has been successfully removed from your Pokedex.
- Scripts de testes unitários e de integração para cada uma das rotas criadas.
- Estrutura de armazenamento de memória cache para requisições repetidas, porém sem atualização de dados, utilizando o Redis.
- Uma rota que retorne apenas os Pokemons adicionados na Pokedex pessoal do mestre Pokemon.
- Uma rota alternativa para adição de Pokemon pelo seu nome.
- Uma rota que, ao fornecer uma lista de características, retorne todos os Pokemons registrados no Pokedex global que sejam compatíveis.
- Uma rota que, ao fornecer uma lista de características, retorne todos os Pokemons registrados no Pokedex pessoal que sejam compatíveis.
Para a execução dos testes manuais, é necessário o auxílio de uma extensão de testes, como por exemplo, Insomnia, ThunderClient, entre outras.
De posse de uma extensão de testes, seguindo as instruções e métodos habilitados para cada rota e complementando o URL da rota com o link de deploy da API, é possível utilizar as rotas da API apresentadas anteriormente, conforme exemplo a seguir:
https://project-pokedex-api-production.up.railway.app/api/sign-up
Uma requisição, em método POST, carregando um objeto JSON dentro das regras da rota.
Para executar este projeto numa máquina pessoal, após clonar o projeto, é necessário adicionar as seguintes variáveis de ambiente ao seu arquivo .env:
-
Para conexão com o banco de dados necessita-se da variável
DATABASE_URL
, com valorpostgres://<postgres_user>:<postgres_password>@<url_host>:<url_port>/<postgres_database>
, substituindo os campos conforme os dados pessoais do seu postgres. Em localhost, o trecho<url_host>:<url_port>
fica comolocalhost:5432
. -
A variável
SALT
, com valor numérico inteiro e positivo, auxilia na encriptação de senha. -
As variáveis
JWT_SECRET
,JWT_EXPIRES_IN
eJWT_ALGORITHM
, onde a primeira variável é uma senha pessoal para geração de token de formato jwt encriptado, e as demais variáveis são configurações que constam na documentação da biblioteca jwt, nas quais recomenda-se utilizar os valores1d
para expiração do token após 1 dia eHS256
como padrão de criptografia, respectivamente.
Abra o seu terminal e clone o projeto.
git clone https://github.com/marcos-asdes/project-Pokedex-API.git
O projeto se encontrará na pasta padrão de usuário da sua máquina.
Entre na pasta do projeto.
cd project-Pokedex-API
Instale as dependências do projeto.
npm install
Insira as variáveis de ambiente no seu arquivo .env.
Chame o ORM Prisma para que ele crie as tabelas do banco de dados.
npm run migrate
or
npx prisma migrate dev
Inicie o servidor.
npm run build
npm run start
or
npm run ts:start
or
npm run dev