🇧🇷 Versão em Português do Brasil
A Tide API Go é um serviço de alta performance para consulta de tábuas de marés, projetado com foco em precisão geográfica e eficiência de custos. Construída em Go e utilizando processamento geoespacial avançado via PostGIS, a API fornece dados precisos de marés (alta/baixa) baseados em coordenadas em tempo real ou busca por localidade.
A ideia surgiu da necessidade de ter uma API de marés que fosse rápida, precisa e que pudesse ser usada em qualquer lugar do mundo.
A Tábua de Maré é uma ferramenta muito utilizada em praticamente todas as áreas litorâneas, como esportes náuticos, pesca, turismo, e etc. Minha família se utiliza muito da informação das tábuas para nossos passeios pela belíssima praia de Boa Viagem, em Recife - Pernambuco.
Juntando o útil ao agradável: desenvolvi essa API com o objetivo de atender essa demanda e compartilhar as descobertas e aprendizados obtidos no processo. Também é parte de um trabalho de faculdade. Também é um desafio pessoal, pois há muito não colocava um sofware Open Source sozinho em produção - utilizando ferramentas que não eram de meu domínio, como a linguagem Go.
- Busca por localidade: Busca de marés por nome da localidade
- Busca por coordenadas: Busca de marés por coordenadas geográficas
- Tabela de marés: Exibição da tabela de marés por dia
- Busca Geoespacial (KNN): Localização instantânea da estação de maré mais próxima via latitude/longitude utilizando o operador
<->e índices GIST, garantindo performance mesmo com grandes volumes de dados. - Queries Timezone-Aware: Lógica de filtragem executada no motor do banco de dados (PostgreSQL), respeitando o fuso horário local de cada estação para definir o "início e fim do dia".
- SARGable Queries: Implementação de filtros de data que preservam a eficiência dos índices de banco de dados, otimizando o consumo de CPU no Google Cloud Run.
- Arquitetura Serverless: Deploy automatizado via GitHub Actions para o Google Cloud Run, com injeção de segredos via GCP Secret Manager.
- Segurança & Precisão: Autenticação via JWT e uso de tipos decimais de precisão fixa (
shopspring/decimal) para evitar erros de arredondamento em cálculos de altura.
- Linguagem: Go (Golang)
- Banco de Dados: PostgreSQL + PostGIS
- Infraestrutura: Google Cloud Platform (Cloud Run, Artifact Registry)
- CI/CD: GitHub Actions
- Documentação: ApiDog / OpenAPI 3.0
- Docker & Docker Compose
- Go 1.26+
- Clone o repositório:
git clone https://github.com/casimiroarruda/go-tide-table-api.git cd tide-api-go - Configuração de Ambiente:
Crie um arquivo
.envbaseado no exemplo:DATABASE_URL=postgres://user:pass@localhost:5432/tide_db?sslmode=disable JWT_SECRET=sua_chave_secreta_aqui
- Subir Ambiente:
O banco de dados não executará as migrações automaticamente, incluindo a ativação do PostGIS. Você deve executá-las manualmente. Siga as instruções do arquivo
docker-compose up -d
docs/DEPLOY.md.
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/api/auth/token |
Geração de token JWT. |
GET |
/api/location |
Lista localidades ou busca por ?name=. |
GET |
/api/location?lat=&lon= |
Busca localidade mais próxima via coordenadas. |
GET |
/api/location/{id}/tides/{day} |
Tábua de marés filtrada por dia e fuso local. |
O projeto utiliza uma abordagem inspirada em Clean Architecture, garantindo que a lógica de domínio (marés e geolocalização) seja independente de frameworks externos ou drivers de banco de dados.
O pipeline de CI/CD garante que cada alteração na branch main seja testada e disponibilizada em produção no GCP em poucos minutos, sem intervenção manual.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para detalhes.
*Desenvolvido como parte do projeto TIPPE, para atender à necessidade de consulta de tábuas de marés em tempo real em qualquer lugar do mundo.
Também é parte do projeto TIPPE:
Extrator de dados de tábuas de marés a partir da documentação da Marinha do Brasil: https://github.com/casimiroarruda/chm-tide-reader
Este projeto foi desenvolvido com foco em` aprendizado e aprimoramento profissional*
Feito com 💙 por Anderson Casimiro