Esta API, construída com Cloudflare Workers, permite o upload de imagens para o R2, recuperação de imagens, validação de relatos no Firestore, listagem de usuários e análise de imagens via uma API externa.
https://mapazzz-backend.mapzzz.workers.dev
Envia uma imagem para o bucket R2.
Formato da Requisição: multipart/form-data com campo image.
Resposta: Texto simples (ex.: "Imagem nome.jpg salva no R2!")
"Imagem teste.jpg salva no R2!"
Recupera uma imagem do R2 pelo nome do arquivo.
Parâmetro: :filename (ex.: "imagens/teste.jpg")
Resposta: Imagem binária com Content-Type apropriado.
Valida um relato no Firestore com base em votos.
Formato da Requisição: JSON com reportId (string) e votes (number).
{"reportId": "relato123", "votes": 75}
Resposta: Texto simples (ex.: "Relato atualizado")
Lista os usuários do Firestore.
Resposta: Array JSON com campos dos usuários.
[{ "nome": { "stringValue": "João" }, "idade": { "integerValue": "30" } }]
Analisa uma imagem usando uma API externa.
Formato da Requisição: multipart/form-data com campo image.
Resposta: JSON com resultados da análise.
{
"analise_imagem": {
"tipo_conteudo": "Local",
"descricao_geral": "Área com água parada",
"avaliacao_risco_malaria": { "nivel_risco": "Alto" }
}
}
const BASE_URL = 'https://mapazzz-backend.mapzzz.workers.dev';
// /upload
async function uploadImage(file) {
const formData = new FormData();
formData.append('image', file);
const response = await fetch(`${BASE_URL}/upload`, { method: 'POST', body: formData });
console.log(await response.text());
}
// /image/:filename
async function fetchImage(filename) {
const response = await fetch(`${BASE_URL}/image/${filename}`);
const blob = await response.blob();
const imgUrl = URL.createObjectURL(blob);
document.body.appendChild(Object.assign(document.createElement('img'), { src: imgUrl }));
}
// /validate
async function validateReport(reportId, votes) {
const response = await fetch(`${BASE_URL}/validate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ reportId, votes })
});
console.log(await response.text());
}
// /users
async function fetchUsers() {
const response = await fetch(`${BASE_URL}/users`);
console.log(await response.json());
}
// /analyze
async function analyzeImage(file) {
const formData = new FormData();
formData.append('image', file);
const response = await fetch(`${BASE_URL}/analyze`, { method: 'POST', body: formData });
console.log(await response.json());
}
// Exemplo de uso
uploadImage(document.querySelector('input[type="file"]').files[0]);
fetchImage('imagens/teste.jpg');
validateReport('relato123', 75);
fetchUsers();
analyzeImage(document.querySelector('input[type="file"]').files[0]);
import requests
BASE_URL = 'https://mapazzz-backend.mapzzz.workers.dev'
# /upload
def upload_image(file_path):
with open(file_path, 'rb') as f:
files = {'image': f}
response = requests.post(f'{BASE_URL}/upload', files=files)
print(response.text)
# /image/:filename
def fetch_image(filename):
response = requests.get(f'{BASE_URL}/image/{filename}')
with open('downloaded_image.jpg', 'wb') as f:
f.write(response.content)
# /validate
def validate_report(report_id, votes):
data = {'reportId': report_id, 'votes': votes}
response = requests.post(f'{BASE_URL}/validate', json=data)
print(response.text)
# /users
def fetch_users():
response = requests.get(f'{BASE_URL}/users')
print(response.json())
# /analyze
def analyze_image(file_path):
with open(file_path, 'rb') as f:
files = {'image': f}
response = requests.post(f'{BASE_URL}/analyze', files=files)
print(response.json())
# Exemplo de uso
upload_image('teste.jpg')
fetch_image('imagens/teste.jpg')
validate_report('relato123', 75)
fetch_users()
analyze_image('teste.jpg')
# /upload
curl -X POST -F "image=@teste.jpg" https://mapazzz-backend.mapzzz.workers.dev/upload
# /image/:filename
curl -o downloaded_image.jpg https://mapazzz-backend.mapzzz.workers.dev/image/imagens/teste.jpg
# /validate
curl -X POST -H "Content-Type: application/json" -d '{"reportId": "relato123", "votes": 75}' https://mapazzz-backend.mapzzz.workers.dev/validate
# /users
curl https://mapazzz-backend.mapzzz.workers.dev/users
# /analyze
curl -X POST -F "image=@teste.jpg" https://mapazzz-backend.mapzzz.workers.dev/analyze
Os endpoints retornam erros com códigos de status HTTP:
| Código | Descrição |
|---|---|
| 400 | Requisição inválida (ex.: sem imagem) |
| 404 | Imagem ou recurso não encontrado |
| 405 | Método não suportado |
| 500 | Erro interno do servidor |