Sumário
Mostrar conteúdo
Introdução
Enquanto aprendia sobre desenvolvimento Backend com Java e Spring Boot, decidi criar um projeto simples, mas não tão simples. A ideia principal era desenvolver uma API parecida com PokeAPI - Uma API de Pokémone SWAPI - Uma API de Star Wars.
Na época, a quarta temporada de Stranger Things havia sido lançada, e eu não encontrei uma API interessante sobre a série. Defini algumas características essenciais para o projeto:
- Ser Open Source
- Suportar múltiplos idiomas
- Ter um bom suporte a filtros
O que é HawAPI
HawAPI é uma API Gratuita e Open Sourceprojetada para a série Stranger Things. Ela oferece várias informações sobre a série, incluindo atores, personagens, episódios, jogos, localizações e temporadas, por meio de uma API RESTful que permite acesso a esses dados.
Todas essas informações estão disponíveis via uma API RESTful implementada com Java (Spring Boot) + PostgreSQL e servida em JSON, facilitando a criação de aplicativos desktop, web e mobile - HawAPI/docs
O nome HawAPI vem de:
- Haw: Referindo-se a Hawkins, a cidade rural fictícia apresentada em Stranger Things.
- API: Uma abreviação para Application Programming Interface (Interface de Programação de Aplicações, em português).
Internacionalização (i18n)
O suporte a múltiplos idiomas era uma característica fundamental do projeto desde o início.
A versão atual do projeto suporta apenas Inglês (en-US) e Português (pt-BR). Em breve, com o lançamento da versão 1.3.0, ela também oferecerá suporte para Francês (fr-FR) e Espanhol (es-ES).
Escopo | en-US | pt-BR | fr-FR | es-ES |
---|---|---|---|---|
Atores | — | — | — | — |
Personagens | — | — | — | — |
Episódios | Sim | Sim | Em breve! | Em breve! |
Jogos | Sim | Sim | Em breve! | Em breve! |
Locais | Sim | Sim | Em breve! | Em breve! |
Temporadas | Sim | Sim | Em breve! | Em breve! |
Trilhas | — | — | — | — |
Exemplos de respostas:
- /api/v1/episodes/bce28964-fcfa-4a8c-9df0-413d4648d661?language=en-US
- /api/v1/episodes/bce28964-fcfa-4a8c-9df0-413d4648d661?language=pt-BR
1{2 "uuid": "bce28964-fcfa-4a8c-9df0-413d4648d661",3 "href": "/api/v1/episodes/bce28964-fcfa-4a8c-9df0-413d4648d661",4 "sources": [5 "https://www.netflix.com/title/80057281"6 ],7 "thumbnail": "https://s6.imgcdn.dev/xtSpy.jpg",8 "title": "The Bathtub",9 "description": "Eleven struggles to reach Will, while Lucas warns that \"the bad men are coming.\" Nancy and Jonathan show the police what Jonathan caught on camera.",10 "language": "en-US",11 "duration": 2580000,12 "season": "/api/v1/seasons/3b980ad3-aef8-4663-a7a9-64cb4979500a",13 "created_at": "2023-07-23T20:19:29.908",14 "updated_at": "2023-07-23T20:19:29.908",15 "episode_num": 7,16 "next_episode": "/api/v1/episodes/cf90565d-c906-4e2c-a992-b190b5d117f8",17 "prev_episode": "/api/v1/episodes/b664d023-2f2e-4d11-8af7-00d21bd565dd"18}
1{2 "uuid": "bce28964-fcfa-4a8c-9df0-413d4648d661",3 "href": "/api/v1/episodes/bce28964-fcfa-4a8c-9df0-413d4648d661",4 "sources": [5 "https://www.netflix.com/title/80057281"6 ],7 "thumbnail": "https://s6.imgcdn.dev/xtSpy.jpg",8 "title": "A banheira",9 "description": "Onze tenta chegar a Will, mas Lucas dá o alerta de perigo. Nancy e Jonathan mostram à polícia as imagens capturadas pela câmera.",10 "language": "pt-BR",11 "duration": 2580000,12 "season": "/api/v1/seasons/3b980ad3-aef8-4663-a7a9-64cb4979500a",13 "created_at": "2023-07-23T20:19:29.908",14 "updated_at": "2023-07-23T20:19:29.908",15 "episode_num": 7,16 "next_episode": "/api/v1/episodes/cf90565d-c906-4e2c-a992-b190b5d117f8",17 "prev_episode": "/api/v1/episodes/b664d023-2f2e-4d11-8af7-00d21bd565dd"18}
Por padrão, o idioma inglês (en-US) será usado.
Filtros
A capacidade de realizar buscas e filtros foi essencial, mas eu queria mais do que um endpoint básico de busca.
Base da busca da HawAPI:
Campo | Exemplo | Padrão | Opções |
---|---|---|---|
sort | [..]?sort=first_name,ASC | — | campo, ASC ou DESC |
page | [..]?page=1 | 1 | 1..X |
size | [..]?size=12 | 10 | 1..20 |
language | [..]?language=en-US | en-US | I18N |
Exemplo avançado de busca usando símbolos de modificação:
Modification | Type(s) | Symbol |
---|---|---|
LIKE | * | * |
NOT_LIKE | * | !* |
BETWEEN | Número, Data | :: |
NOT_IN | * | !: |
IN | * | : |
GREATER_OR_EQUALS_TO | Número, Data | >= |
LESS_OR_EQUALS_TO | Número, Data | <= |
GREATER_THAN | Número, Data | > |
LESS_THAN | Número, Data | < |
NOT_EQUALS | * | ! |
EQUALS | * |
Com esse poder, podemos criar pesquisas de API robustas e complexas como:
Todos os personagens com sobrenome
parecido com
Wheeler, gêneroigual a
1 e data de nascimentomaior ou igual a
1967-01-01
Como usar a API com JavaScript
Nesta seção, veremos como buscar informações do HawAPI usando a API Fetche o pacote @hawapi/js-sdk:
Fetch API
Veja como usar com a API nativa Fetch:
- Usando then/catch:
1fetch('https://hawapi.theproject.id/api/v1/characters/')2 .then((response) => response.json())3 .then((data) => {4 console.log(data);5 })6 .catch((error) => console.error(error));
- Usando async/await:
1async function fetchAndLogCharacters() {2 try {3 const response = await fetch(4 'https://hawapi.theproject.id/api/v1/characters/'5 );6 const data = await response.json();7 console.log(data);8 } catch (error) {9 console.error('Error:', error);10 }11}12
13fetchAndLogCharacters();
HawAPI SDK
Podemos usar o SDK do HawAPI em JavaScript para melhorar o código:
- Instale o SDK:
npm install @hawapi/js-sdk
yarn add @hawapi/js-sdk
- Crie a instância e faça solicitações:
1import { EpisodeModel, createClient } from '@hawapi/js-sdk';2// const { EpisodeModel, createClient } = require('@hawapi/js-sdk');3
4const client = createClient();5
6async function fetchAndLogCharacters() {7 const res = await client.getRandom<EpisodeModel>('episodes');8 console.log(res);9}10
11fetchAndLogCharacters();
O SDK também pode ser usado no navegador com a tag <script>.
Veja mais em HawAPI/js-sdk#examples/web
Hawbrary
A Hawbrary é uma “biblioteca” que exibe todas as informações fornecidas pela HawAPI. Foi desenvolvida com React (NextJs) + Typescript, hospedada no GitHub Pages e utiliza o SDK oficial @hawapi/js-sdk.
Veja a demo Hawbrarye o repositório no GitHub
Conclusão
Nesta publicação, exploramos o histórico e os recursos do projeto HawAPI, incluindo o projeto Hawbrary.
Se você achar a API útil, dê uma estrela ao repositório GitHub e aproveite o #StrangerThingsDay para criar um projeto novo!