Sign inSign up

paulolopes/poke-api

By paulolopes

Updated almost 7 years ago

poke-api

Image
0

141

paulolopes/poke-api repository overview

pokeapi

SOBRE O DESENVOLVIMENTO

A API foi desenvolvida com :

  • Python 3.6
  • Django 2.2.7
  • Postgres 11
  • Docker
  • Docker Compose

As ferramentas escolhidas dão agilidade no desenvolmento. A arquiteura do Django permite criar end-point que implementam rest full .

  • Listagem (GET)

  • Criação (POST)

  • Atualização (PUT)

  • Remoção (DELETE)

e além disso possui uma interface onde é possível fazer testes diretamento no browser. O versionamento de banco de dados fica transparente com uso de migrations.

Para atendimento dos requisitos foram feitos os modelos abaixo:

  • Type (id,name): Referentes aos tipos de pokemons
  • Pokemon (id,name,height,weight,xp,image, types[] ): Referente aos pokemons
  • Trainer (id,name): Referente aos treinadores
  • Team (id,name,pokemons[]): Referente aos times.

Ao fazer o build da aplicação o arquivo pokemon.json é importado para o banco de dados.

BUILD DA API

Ferramentas necessárias para build:

  • Docker
  • Docker Compose

Executando API:

Após fazer as instalações necessárias faça os seguintes passos via terminal:

  • Navegar até o diretório /composes
  • Executar o comando: docker-compose up
  • O docker irá fazer download das images com a versão mais atual da API.
  • Quando o download for concluído a api irá executar.

Teste API:

Não é necessário autenticação na API. O Django tem uma interface que pode ser usado para teste diretamento do browser.

Para testar basta acessar a url:

http://127.0.0.1:8001/api/pokemons/

Ao acessar a url acima o sistema exibe as rotas disponíveis com auxílio da interface do DJANGO.

"type": "http://127.0.0.1:8001/api/pokemons/type/",
"pokemon": "http://127.0.0.1:8001/api/pokemons/pokemon/",
"trainer": "http://127.0.0.1:8001/api/pokemons/trainer/",
"team": "http://127.0.0.1:8001/api/pokemons/team/"

Listar Tipos

Método GET:

http://127.0.0.1:8001/api/pokemons/type/

Response:

Exemplo de resultado:

[
    {
        "id": 6,
        "name": "bug"
    },
    {
        "id": 18,
        "name": "dark"
    } 
]

Listar Pokemons

Método GET

    http://127.0.0.1:8001/api/pokemons/pokemon/
  • A api retorna a lista de todos os pokemons .

Response:

Code:200

Exemplo de resultado:

[
 {
        "id": 460,
        "name": "abomasnow",
        "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/460.png"
    },
    {
        "id": 63,
        "name": "abra",
        "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/63.png"
    },
        {
        "id": 359,
        "name": "absol",
        "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/359.png"
    }
]

Filtrar Pokemons

Por nome

Método GET

http://127.0.0.1:8001/api/pokemons/pokemon/?name={name}
  • A api retorna a lista de todos os pokemons.

Exemplo de URL:

    http://127.0.0.1:8001/api/pokemons/pokemon/?name=pikachu

Response:

Code:200

Exemplo de resultado:

[
    {
        "id": 25,
        "name": "pikachu",
        "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/25.png"
    }
]

Por Tipo

Método GET

    http://127.0.0.1:8001/api/pokemons/pokemon/?name={name}
    
  • A api retorna a lista de todos os pokemons .

Exemplo de URL:

http://127.0.0.1:8001/api/pokemons/pokemon/?type=eletric

Response:

Code:200

Exemplo de resultado:

[
 {
        "id": 460,
        "name": "abomasnow",
        "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/460.png"
    },
    {
        "id": 63,
        "name": "abra",
        "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/63.png"
    },
    {
        "id": 359,
        "name": "absol",
        "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/359.png"
    }
]

Detalhe de um Pokemons

Método GET:

    http://127.0.0.1:8001/api/pokemons/pokemon/{id}
  • A api retorna a dados de um pokemon especifico .

Response:

Code:200

Exemplo de resultado:

{
    "id": 25,
    "name": "pikachu",
    "type_list": [
        {
            "id": 8,
            "name": "electric"
        }
    ],
    "height": 0.4,
    "weight": 6.0,
    "xp": 112,
    "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/25.png",
    "types": [
        8
    ]
}

Criar Treinador

Método POST

    http://127.0.0.1:8001/api/pokemons/pokemon/

Media type: application/json
Exemplo de Body

{
    "name": "Treinador 1"
}

Response:

Code:201

Exemplo de resultado:

{
    "id": 1,
    "name": "Treinador 1"
}

Criar Time

Método POST

    http://127.0.0.1:8001/api/pokemons/team/

Media type: application/json
Exemplo de Body

{
    "name": "Meliuz Team",
    "trainer": 1,
    "pokemons": [1,2,3,4,5,6]
}

Response:

Code:201

Exemplo de resultado:

{
    "id": 1,
    "name": "Meliuz Team",
    "trainer_obj": {
        "id": 1,
        "name": "Treinador 1"
    },
    "pokemons_list": [
        {
            "id": 1,
            "name": "bulbasaur",
            "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png"
        },
        {
            "id": 2,
            "name": "ivysaur",
            "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/2.png"
        },
        {
            "id": 3,
            "name": "venusaur",
            "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/3.png"
        },
        {
            "id": 4,
            "name": "charmander",
            "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/4.png"
        },
        {
            "id": 5,
            "name": "charmeleon",
            "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/5.png"
        },
        {
            "id": 6,
            "name": "charizard",
            "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/6.png"
        }
    ],
    "trainer": 1,
    "pokemons": [
        1,
        2,
        3,
        4,
        5,
        6
    ]
}

EXCEÇÕES

Nome do time com menos que 5 carateres

Método POST

    http://127.0.0.1:8001/api/pokemons/team/

Media type: application/json
Exemplo de Body

{
    "name": "mel",
    "trainer": 1,
    "pokemons": [1,2,3,4,5,6]
}

Response:

Code:400
{
    "name": [
        "Ensure this field has at least 5 characters."
    ]
}

Time com mais de 6 pokemons

Método POST

    http://127.0.0.1:8001/api/pokemons/team/

Media type: application/json
Exemplo de Body

{
    "name": "Cash back team",
    "trainer": 2,
    "pokemons": [10,11,12,13,14,15,16,17]
}

Response:

Code:400
{
    "pokemons": [
        "Can't add more than 6 pokemons"
    ]
}

Tag summary

Content type

Image

Digest

Size

511.4 MB

Last updated

almost 7 years ago

docker pull paulolopes/poke-api