|
| 1 | +# AstroVista API |
| 2 | + |
| 3 | +API para gerenciar dados da NASA APOD (Astronomy Picture of the Day) com recursos avançados de documentação interativa, sistema de cache e suporte a múltiplos idiomas. |
| 4 | + |
| 5 | +## Recursos |
| 6 | + |
| 7 | +- **Documentação interativa** com Swagger/OpenAPI |
| 8 | +- **Sistema de cache** com Redis para melhor performance |
| 9 | +- **Internacionalização (i18n)** com suporte a múltiplos idiomas - Inglês (padrão) |
| 10 | + - Português do Brasil |
| 11 | + - Espanhol |
| 12 | + - Francês |
| 13 | + - Alemão |
| 14 | + - Italiano |
| 15 | + - Suporte para adicionar novos idiomas facilmente |
| 16 | + |
| 17 | +## Configuração |
| 18 | + |
| 19 | +### Requisitos |
| 20 | + |
| 21 | +- Go 1.18 ou superior |
| 22 | +- MongoDB (para armazenamento de dados) |
| 23 | +- Redis (opcional, para cache) |
| 24 | + |
| 25 | +### Variáveis de ambiente |
| 26 | + |
| 27 | +- `PORT` - Porta do servidor (padrão: 8081) |
| 28 | +- `MONGODB_URI` - URI de conexão com o MongoDB |
| 29 | +- `REDIS_URL` - URL do servidor Redis (opcional) |
| 30 | +- `REDIS_PASSWORD` - Senha do Redis (opcional) |
| 31 | +- `GOOGLE_TRANSLATE_API_KEY` - Chave da API do Google Translate (opcional) |
| 32 | +- `DEEPL_API_KEY` - Chave da API DeepL para traduções (opcional) |
| 33 | + |
| 34 | +## Serviços de Tradução |
| 35 | + |
| 36 | +A API pode utilizar diferentes serviços de tradução: |
| 37 | + |
| 38 | +### Google Translate |
| 39 | + |
| 40 | +Para usar o Google Translate, você precisa: |
| 41 | + |
| 42 | +1. Criar uma conta no [Google Cloud Platform](https://cloud.google.com/) |
| 43 | +2. Criar um novo projeto |
| 44 | +3. Ativar a Cloud Translation API |
| 45 | +4. Criar uma chave de API |
| 46 | +5. Definir a variável de ambiente `GOOGLE_TRANSLATE_API_KEY` |
| 47 | + |
| 48 | +```bash |
| 49 | +export GOOGLE_TRANSLATE_API_KEY="sua-chave-aqui" |
| 50 | +``` |
| 51 | + |
| 52 | +### DeepL |
| 53 | + |
| 54 | +Para usar o DeepL, você precisa: |
| 55 | + |
| 56 | +1. Criar uma conta no [DeepL API](https://www.deepl.com/pro-api) |
| 57 | +2. Obter sua chave de autenticação |
| 58 | +3. Definir a variável de ambiente `DEEPL_API_KEY` |
| 59 | + |
| 60 | +```bash |
| 61 | +export DEEPL_API_KEY="sua-chave-aqui" |
| 62 | +``` |
| 63 | + |
| 64 | +### Simulação (Mock) |
| 65 | + |
| 66 | +Se nenhuma chave de API for configurada, a API usará um serviço de tradução simulado para desenvolvimento. |
| 67 | + |
| 68 | +## Sistema de Cache de Traduções |
| 69 | + |
| 70 | +Para melhorar a performance e evitar requisições repetidas às APIs de tradução, implementamos um sistema de cache em dois níveis: |
| 71 | + |
| 72 | +1. **Cache em memória**: Armazena traduções recentes na memória para acesso rápido |
| 73 | +2. **Cache Redis**: Se o Redis estiver disponível, as traduções também são armazenadas de forma persistente |
| 74 | + |
| 75 | +As traduções são armazenadas por 30 dias no cache Redis, reduzindo significativamente o número de chamadas às APIs externas. |
| 76 | + |
| 77 | +## Executando a API |
| 78 | + |
| 79 | +```bash |
| 80 | +# Clone o repositório |
| 81 | +git clone https://github.com/seu-usuario/astrovista-api.git |
| 82 | +cd astrovista-api |
| 83 | + |
| 84 | +# Instale as dependências |
| 85 | +go get -u |
| 86 | + |
| 87 | +# Execute a API |
| 88 | +go run main.go |
| 89 | +``` |
| 90 | + |
| 91 | +## Endpoints |
| 92 | + |
| 93 | +### Documentação |
| 94 | + |
| 95 | +- `/swagger/` - Documentação interativa Swagger |
| 96 | + |
| 97 | +### Principais endpoints |
| 98 | + |
| 99 | +- `GET /apod` - Obtém o APOD mais recente |
| 100 | +- `GET /apod/{date}` - Obtém um APOD por data específica |
| 101 | +- `GET /apods` - Lista todos os APODs cadastrados |
| 102 | +- `GET /apods/search` - Pesquisa avançada com filtros |
| 103 | +- `GET /apods/date-range` - Busca APODs por intervalo de datas |
| 104 | +- `GET /languages` - Lista idiomas suportados |
| 105 | +- `POST /apod` - Adiciona um novo APOD |
| 106 | + |
| 107 | +## Suporte a idiomas |
| 108 | + |
| 109 | +Para obter respostas em um idioma específico, você pode: |
| 110 | + |
| 111 | +1. Enviar o cabeçalho `Accept-Language` na requisição |
| 112 | + |
| 113 | + ``` |
| 114 | + Accept-Language: pt-BR |
| 115 | + ``` |
| 116 | +
|
| 117 | +2. Ou adicionar o parâmetro `lang` na URL |
| 118 | + ``` |
| 119 | + /apod?lang=pt-BR |
| 120 | + ``` |
| 121 | +
|
| 122 | +## Cache |
| 123 | +
|
| 124 | +As respostas da API incluem o cabeçalho `X-Cache` para indicar se o resultado veio do cache: |
| 125 | +
|
| 126 | +- `X-Cache: HIT` - Resposta recuperada do cache |
| 127 | +- `X-Cache: MISS` - Resposta obtida do banco de dados |
| 128 | +
|
| 129 | +## Licença |
| 130 | +
|
| 131 | +MIT |
0 commit comments