API LAB // V1-TESTE

Uma API simples para aprender consumindo.

Sem framework no backend, sem mágica escondida e sem pular etapa. Você recebe um token, copia um exemplo, troca o token e executa.

BASE URL
https://apigeek.geekdev.com.br/api/v1-teste

GET3 endpoints
PUT2 endpoints
AuthBearer Token
01 // Primeiros passos

Faça exatamente nesta ordem

  1. Solicite um token. Coloque seu nome e seu e-mail no formulário logo abaixo.
  2. Abra seu e-mail. Quando o professor aprovar, você receberá uma chave começando com gk_.
  3. Escolha um endpoint. Se você só quer testar, comece pelo primeiro GET: /animes.
  4. Escolha sua linguagem. Cada endpoint tem exemplo pronto em Vue.js, Python e PHP.
  5. Troque apenas SEU_TOKEN. Execute o código e observe o JSON recebido.
02 // Acesso

Solicitar token

O token não é criado na hora. A solicitação vai para o professor, que aprova e envia o acesso para o e-mail informado.

Use um e-mail que você realmente consegue abrir.
03 // Autenticação

Onde o token entra?

Em todas as rotas de dados, coloque o token no cabeçalho HTTP chamado Authorization.

Authorization: Bearer SEU_TOKEN
Não coloque o token na URL. Não use ?token=.... Nos exemplos abaixo ele já está no lugar correto.
04 // Endpoints

Os cinco endpoints da atividade

Para cada um: veja o endereço, o corpo quando existir, uma resposta esperada e o código na sua linguagem.

GET /animes

1. Listar todos os animes

Retorna todos os animes cadastrados, incluindo estúdio e gêneros.

URL usada no exemplo
https://apigeek.geekdev.com.br/api/v1-teste/animes
HTTP esperado
200 OK
Se o token estiver correto e os dados forem válidos.
Resposta aproximada
{
    "success": true,
    "count": 5,
    "data": [
        {
            "id": 1,
            "titulo_original": "Naruto",
            "status": "finalizado",
            "estudio": "Studio Pierrot"
        }
    ]
}
Vue.js: coloque este código dentro de um método ou função do seu componente. Se estiver começando do zero, você pode usar Vue 3 por CDN.
<!-- Exemplo completo com Vue 3 via CDN -->
<div id="app">
  <button @click="testarApi">Testar endpoint</button>
  <pre>{{ resultado }}</pre>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
Vue.createApp({
  data() {
    return {
      token: 'SEU_TOKEN',
      resultado: 'Clique no botão para testar.'
    };
  },
  methods: {
    async testarApi() {
      const resposta = await fetch('https://apigeek.geekdev.com.br/api/v1-teste/animes', {
        method: 'GET',
        headers: {
          'Authorization': `Bearer ${this.token}`
        }
      });

      const dados = await resposta.json();
      this.resultado = JSON.stringify(dados, null, 2);
    }
  }
}).mount('#app');
</script>
Python: instale primeiro pip install requests. Depois salve como teste.py e rode python teste.py.
import requests

token = "SEU_TOKEN"
url = "https://apigeek.geekdev.com.br/api/v1-teste/animes"

headers = {
    "Authorization": f"Bearer {token}"
}

resposta = requests.get(url, headers=headers)
print(resposta.status_code)
print(resposta.json())
PHP: o exemplo usa cURL. Salve em um arquivo PHP com a extensão cURL habilitada e execute.
<?php
$token = 'SEU_TOKEN';
$url = 'https://apigeek.geekdev.com.br/api/v1-teste/animes';

$ch = curl_init($url);

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $token
    ]
]);

$resposta = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "HTTP: " . $status . PHP_EOL;
echo $resposta;
GET /animes/{id}

2. Buscar um anime pelo ID

Troque o número 1 pelo ID desejado. Além do anime, retorna gêneros e personagens relacionados.

URL usada no exemplo
https://apigeek.geekdev.com.br/api/v1-teste/animes/1
HTTP esperado
200 OK
Se o token estiver correto e os dados forem válidos.
Resposta aproximada
{
    "success": true,
    "data": {
        "id": 1,
        "titulo_original": "Naruto",
        "personagens": [
            {
                "nome": "Naruto Uzumaki"
            }
        ]
    }
}
Vue.js: coloque este código dentro de um método ou função do seu componente. Se estiver começando do zero, você pode usar Vue 3 por CDN.
<!-- Exemplo completo com Vue 3 via CDN -->
<div id="app">
  <button @click="testarApi">Testar endpoint</button>
  <pre>{{ resultado }}</pre>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
Vue.createApp({
  data() {
    return {
      token: 'SEU_TOKEN',
      resultado: 'Clique no botão para testar.'
    };
  },
  methods: {
    async testarApi() {
      const resposta = await fetch('https://apigeek.geekdev.com.br/api/v1-teste/animes/1', {
        method: 'GET',
        headers: {
          'Authorization': `Bearer ${this.token}`
        }
      });

      const dados = await resposta.json();
      this.resultado = JSON.stringify(dados, null, 2);
    }
  }
}).mount('#app');
</script>
Python: instale primeiro pip install requests. Depois salve como teste.py e rode python teste.py.
import requests

token = "SEU_TOKEN"
url = "https://apigeek.geekdev.com.br/api/v1-teste/animes/1"

headers = {
    "Authorization": f"Bearer {token}"
}

resposta = requests.get(url, headers=headers)
print(resposta.status_code)
print(resposta.json())
PHP: o exemplo usa cURL. Salve em um arquivo PHP com a extensão cURL habilitada e execute.
<?php
$token = 'SEU_TOKEN';
$url = 'https://apigeek.geekdev.com.br/api/v1-teste/animes/1';

$ch = curl_init($url);

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $token
    ]
]);

$resposta = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "HTTP: " . $status . PHP_EOL;
echo $resposta;
GET /personagens?anime_id={id}

3. Listar personagens

Retorna personagens. O filtro anime_id é opcional; no exemplo usamos anime_id=4.

URL usada no exemplo
https://apigeek.geekdev.com.br/api/v1-teste/personagens?anime_id=4
HTTP esperado
200 OK
Se o token estiver correto e os dados forem válidos.
Resposta aproximada
{
    "success": true,
    "count": 2,
    "data": [
        {
            "nome": "Tanjiro Kamado",
            "anime": "Kimetsu no Yaiba"
        }
    ]
}
Vue.js: coloque este código dentro de um método ou função do seu componente. Se estiver começando do zero, você pode usar Vue 3 por CDN.
<!-- Exemplo completo com Vue 3 via CDN -->
<div id="app">
  <button @click="testarApi">Testar endpoint</button>
  <pre>{{ resultado }}</pre>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
Vue.createApp({
  data() {
    return {
      token: 'SEU_TOKEN',
      resultado: 'Clique no botão para testar.'
    };
  },
  methods: {
    async testarApi() {
      const resposta = await fetch('https://apigeek.geekdev.com.br/api/v1-teste/personagens?anime_id=4', {
        method: 'GET',
        headers: {
          'Authorization': `Bearer ${this.token}`
        }
      });

      const dados = await resposta.json();
      this.resultado = JSON.stringify(dados, null, 2);
    }
  }
}).mount('#app');
</script>
Python: instale primeiro pip install requests. Depois salve como teste.py e rode python teste.py.
import requests

token = "SEU_TOKEN"
url = "https://apigeek.geekdev.com.br/api/v1-teste/personagens?anime_id=4"

headers = {
    "Authorization": f"Bearer {token}"
}

resposta = requests.get(url, headers=headers)
print(resposta.status_code)
print(resposta.json())
PHP: o exemplo usa cURL. Salve em um arquivo PHP com a extensão cURL habilitada e execute.
<?php
$token = 'SEU_TOKEN';
$url = 'https://apigeek.geekdev.com.br/api/v1-teste/personagens?anime_id=4';

$ch = curl_init($url);

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $token
    ]
]);

$resposta = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "HTTP: " . $status . PHP_EOL;
echo $resposta;
PUT /animes

4. Inserir um novo anime

Recebe um JSON e cria um novo anime. Nesta API didática, PUT foi escolhido para criação conforme a atividade da turma.

URL usada no exemplo
https://apigeek.geekdev.com.br/api/v1-teste/animes
HTTP esperado
201 Created
Se o token estiver correto e os dados forem válidos.
JSON enviado
{
    "titulo_original": "Yu Yu Hakusho",
    "titulo_portugues": "Yu Yu Hakusho",
    "sinopse": "Yusuke Urameshi se torna um Detetive Espiritual.",
    "ano_lancamento": 1992,
    "status": "finalizado",
    "episodios": 112,
    "estudio_id": 1,
    "generos": [
        1,
        2,
        6
    ]
}
Resposta aproximada
{
    "success": true,
    "message": "Anime inserido com sucesso.",
    "data": {
        "id": 6,
        "titulo_original": "Yu Yu Hakusho"
    }
}
Vue.js: coloque este código dentro de um método ou função do seu componente. Se estiver começando do zero, você pode usar Vue 3 por CDN.
<!-- Exemplo completo com Vue 3 via CDN -->
<div id="app">
  <button @click="testarApi">Enviar dados</button>
  <pre>{{ resultado }}</pre>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
Vue.createApp({
  data() {
    return {
      token: 'SEU_TOKEN',
      resultado: 'Clique no botão para enviar.'
    };
  },
  methods: {
    async testarApi() {
      const dados = {
    "titulo_original": "Yu Yu Hakusho",
    "titulo_portugues": "Yu Yu Hakusho",
    "sinopse": "Yusuke Urameshi se torna um Detetive Espiritual.",
    "ano_lancamento": 1992,
    "status": "finalizado",
    "episodios": 112,
    "estudio_id": 1,
    "generos": [
        1,
        2,
        6
    ]
};

      const resposta = await fetch('https://apigeek.geekdev.com.br/api/v1-teste/animes', {
        method: 'PUT',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${this.token}`
        },
        body: JSON.stringify(dados)
      });

      const retorno = await resposta.json();
      this.resultado = JSON.stringify(retorno, null, 2);
    }
  }
}).mount('#app');
</script>
Python: instale primeiro pip install requests. Depois salve como teste.py e rode python teste.py.
import requests

token = "SEU_TOKEN"
url = "https://apigeek.geekdev.com.br/api/v1-teste/animes"

dados = {
    "titulo_original": "Yu Yu Hakusho",
    "titulo_portugues": "Yu Yu Hakusho",
    "sinopse": "Yusuke Urameshi se torna um Detetive Espiritual.",
    "ano_lancamento": 1992,
    "status": "finalizado",
    "episodios": 112,
    "estudio_id": 1,
    "generos": [
        1,
        2,
        6
    ]
}

headers = {
    "Authorization": f"Bearer {token}",
    "Content-Type": "application/json"
}

resposta = requests.put(url, json=dados, headers=headers)
print(resposta.status_code)
print(resposta.json())
PHP: o exemplo usa cURL. Salve em um arquivo PHP com a extensão cURL habilitada e execute.
<?php
$token = 'SEU_TOKEN';
$url = 'https://apigeek.geekdev.com.br/api/v1-teste/animes';

$dados = json_decode('{
    \"titulo_original\": \"Yu Yu Hakusho\",
    \"titulo_portugues\": \"Yu Yu Hakusho\",
    \"sinopse\": \"Yusuke Urameshi se torna um Detetive Espiritual.\",
    \"ano_lancamento\": 1992,
    \"status\": \"finalizado\",
    \"episodios\": 112,
    \"estudio_id\": 1,
    \"generos\": [
        1,
        2,
        6
    ]
}', true);

$ch = curl_init($url);

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'PUT',
    CURLOPT_POSTFIELDS => json_encode($dados, JSON_UNESCAPED_UNICODE),
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $token,
        'Content-Type: application/json'
    ]
]);

$resposta = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "HTTP: " . $status . PHP_EOL;
echo $resposta;
PUT /personagens

5. Inserir um novo personagem

Recebe anime_id, nome, papel e descrição. O anime_id precisa existir no banco.

URL usada no exemplo
https://apigeek.geekdev.com.br/api/v1-teste/personagens
HTTP esperado
201 Created
Se o token estiver correto e os dados forem válidos.
JSON enviado
{
    "anime_id": 4,
    "nome": "Inosuke Hashibira",
    "papel": "coadjuvante",
    "descricao": "Caçador de demônios que utiliza a Respiração da Besta."
}
Resposta aproximada
{
    "success": true,
    "message": "Personagem inserido com sucesso.",
    "data": {
        "id": 9,
        "nome": "Inosuke Hashibira"
    }
}
Vue.js: coloque este código dentro de um método ou função do seu componente. Se estiver começando do zero, você pode usar Vue 3 por CDN.
<!-- Exemplo completo com Vue 3 via CDN -->
<div id="app">
  <button @click="testarApi">Enviar dados</button>
  <pre>{{ resultado }}</pre>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
Vue.createApp({
  data() {
    return {
      token: 'SEU_TOKEN',
      resultado: 'Clique no botão para enviar.'
    };
  },
  methods: {
    async testarApi() {
      const dados = {
    "anime_id": 4,
    "nome": "Inosuke Hashibira",
    "papel": "coadjuvante",
    "descricao": "Caçador de demônios que utiliza a Respiração da Besta."
};

      const resposta = await fetch('https://apigeek.geekdev.com.br/api/v1-teste/personagens', {
        method: 'PUT',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${this.token}`
        },
        body: JSON.stringify(dados)
      });

      const retorno = await resposta.json();
      this.resultado = JSON.stringify(retorno, null, 2);
    }
  }
}).mount('#app');
</script>
Python: instale primeiro pip install requests. Depois salve como teste.py e rode python teste.py.
import requests

token = "SEU_TOKEN"
url = "https://apigeek.geekdev.com.br/api/v1-teste/personagens"

dados = {
    "anime_id": 4,
    "nome": "Inosuke Hashibira",
    "papel": "coadjuvante",
    "descricao": "Caçador de demônios que utiliza a Respiração da Besta."
}

headers = {
    "Authorization": f"Bearer {token}",
    "Content-Type": "application/json"
}

resposta = requests.put(url, json=dados, headers=headers)
print(resposta.status_code)
print(resposta.json())
PHP: o exemplo usa cURL. Salve em um arquivo PHP com a extensão cURL habilitada e execute.
<?php
$token = 'SEU_TOKEN';
$url = 'https://apigeek.geekdev.com.br/api/v1-teste/personagens';

$dados = json_decode('{
    \"anime_id\": 4,
    \"nome\": \"Inosuke Hashibira\",
    \"papel\": \"coadjuvante\",
    \"descricao\": \"Caçador de demônios que utiliza a Respiração da Besta.\"
}', true);

$ch = curl_init($url);

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'PUT',
    CURLOPT_POSTFIELDS => json_encode($dados, JSON_UNESCAPED_UNICODE),
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $token,
        'Content-Type: application/json'
    ]
]);

$resposta = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "HTTP: " . $status . PHP_EOL;
echo $resposta;
05 // Quando der errado

Erros que você provavelmente vai encontrar

StatusSignificaO que conferir
400JSON inválidoVírgulas, aspas e chaves do JSON enviado.
401Problema com o tokenSe escreveu Bearer, deu um espaço e colou o token inteiro.
404Rota ou ID não encontradoURL, nome do endpoint e ID informado.
422Dados recusadosCampos obrigatórios, status/papel aceitos e IDs relacionados.
500Problema no servidorAvise o professor; normalmente é configuração do servidor/banco.
Detalhe importante: em APIs REST, POST é frequentemente usado para criar novos recursos. Aqui os dois cadastros usam PUT porque essa é a regra desta atividade didática.