storage
Documentação de Integração: Upload de Arquivos para o Mapa da Urbis
Introdução
Esta documentação detalha o processo de integração de requisições para envio de arquivos ao mapa da Urbis. O serviço permite o upload eficiente de arquivos e sua associação direta ao mapa, garantindo uma experiência fluida e otimizada para o usuário.
Motivação: serviço foi a necessidade de integração com o Map Data, permitindo que os arquivos enviados sejam processados e utilizados no contexto do mapa, ampliando suas funcionalidades.
Para consultar a especificação completa da API, incluindo endpoints, parâmetros e exemplos adicionais, acesse a documentação OpenAPI em:
https://api.mapa.urbis.sampa.br/swagger/docs
Autenticação
Todas as requisições à API requerem autenticação por meio de uma chave de API incluída no cabeçalho da requisição. A chave de API será fornecida pelo parceiro responsável pela integração. Para fins de teste, você pode usar a chave secret.
Exemplo de cabeçalho de autenticação:
-H 'X-API-Key: secret'
Certifique-se de substituir secret pela chave real fornecida pelo parceiro em um ambiente de produção.
Fluxo de Requisições
O processo de integração de upload de arquivos com o mapa da Urbis segue estas etapas principais:
- Obter uma URL assinada para upload: Solicite uma URL temporária para enviar o arquivo.
- Fazer o upload do arquivo: Use a URL assinada para enviar o arquivo como payload.
- Obter uma URL de download (opcional): Solicite uma URL para acessar o arquivo após o upload.
Abaixo, cada etapa é explicada em detalhes, incluindo como funcionam as URLs assinadas e exemplos de requisições. Os exemplos utilizam a base URL http://localhost:3000 para testes locais.
1. Obtenção da URL de Upload
Para iniciar o processo, você precisa obter uma URL assinada que será usada para o upload do arquivo. Essa URL é gerada por meio de uma requisição POST ao endpoint /files/upload-url.
Conceito: URL Assinada
Uma URL assinada é um endereço temporário que inclui parâmetros de autenticação e expiração. Ela permite o envio seguro do arquivo sem exigir autenticação adicional na requisição de upload, desde que usada dentro do período de validade (geralmente 15 minutos, conforme o parâmetro X-Amz-Expires).
Requisição
Endpoint:
POST http://localhost:3000/files/upload-url
Cabeçalhos:
X-API-Key: secret(chave de autenticação)Content-Type: application/json(tipo de conteúdo da requisição)accept: application/json(tipo de resposta esperada)
Corpo da Requisição:
{
"contentType": "image/jpeg"
}
contentType: Tipo MIME do arquivo a ser enviado (ex.:image/jpeg,application/pdf).
Exemplo de Requisição:
curl -X 'POST' \
'http://localhost:3000/files/upload-url' \
-H 'accept: application/json' \
-H 'X-API-Key: secret' \
-H 'Content-Type: application/json' \
-d '{
"contentType": "image/jpeg"
}'
Resposta:
A API retornará um JSON com a URL assinada e uma chave identificadora do arquivo:
{
"uploadURL": "https://api.mapa.urbis.sampa.br/storage/uploads/336d7b14-f746-48bb-aa03-590493c943b0.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AIA2ROSF5WQVV7UVT7%2F20250513%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250513T232534Z&X-Amz-Expires=900&X-Amz-Signature=a5adf9510c889c7230a1ae6e21563db4924894ecdee46419c03c7f13504070a7&X-Amz-SignedHeaders=host&x-amz-checksum-crc32=AAAAAA%3D%3D&x-amz-sdk-checksum-algorithm=CRC32&x-id=PutObject",
"key": "uploads/336d7b14-f746-48bb-aa03-590493c943b0.jpeg"
}
uploadURL: URL assinada para o upload.key: Identificador único do arquivo, usado posteriormente para referência.
2. Upload do Arquivo
Com a URL assinada (uploadURL) em mãos, faça uma requisição PUT para enviar o arquivo. O arquivo deve ser incluído como o payload da requisição.
Requisição
Método e URL:
Use o método PUT e a URL retornada no campo uploadURL.
Cabeçalhos:
Content-Type: Deve corresponder aocontentTypeinformado na etapa anterior (ex.:image/jpeg).
Payload: O arquivo binário a ser enviado.
Exemplo de Requisição:
curl -X 'PUT' \
'https://api.mapa.urbis.sampa.br/storage/uploads/336d7b14-f746-48bb-aa03-590493c943b0.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AIA2ROSF5WQVV7UVT7%2F20250513%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250513T232534Z&X-Amz-Expires=900&X-Amz-Signature=a5adf9510c889c7230a1ae6e21563db4924894ecdee46419c03c7f13504070a7&X-Amz-SignedHeaders=host&x-amz-checksum-crc32=AAAAAA%3D%3D&x-amz-sdk-checksum-algorithm=CRC32&x-id=PutObject' \
-H 'Content-Type: image/jpeg' \
--data-binary '@/caminho/para/o/arquivo.jpeg'
Nota: Substitua /caminho/para/o/arquivo.jpeg pelo caminho real do arquivo em seu sistema.
Resposta
Se bem-sucedido, o servidor retornará um código de status HTTP 200 sem corpo de resposta. Isso indica que o arquivo foi enviado com sucesso.
3. Obtenção da URL de Download (Opcional)
Após o upload, você pode solicitar uma URL assinada para acessar o arquivo enviado. Isso é feito com uma requisição GET ao endpoint /files/download-url.
Requisição
Endpoint:
GET http://localhost:3000/files/download-url?key=<chave_do_arquivo>
Parâmetros:
key: A chave do arquivo retornada na resposta da obtenção da URL de upload (ex.:uploads/336d7b14-f746-48bb-aa03-590493c943b0.jpeg).
Cabeçalhos:
X-API-Key: secret(chave de autenticação)accept: application/json(tipo de resposta esperada)
Exemplo de Requisição:
curl -X 'GET' \
'http://localhost:3000/files/download-url?key=uploads%2F336d7b14-f746-48bb-aa03-590493c943b0.jpeg' \
-H 'X-API-Key: secret' \
-H 'accept: application/json'
Nota: O valor do parâmetro key deve ser codificado em URL (por exemplo, / é substituído por %2F).
Resposta:
{
"downloadURL": "https://api.mapa.urbis.sampa.br/storage/uploads/336d7b14-f746-48bb-aa03-590493c943b0.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AIA2ROSF5WQVV7UVT7%2F20250513%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250513T232534Z&X-Amz-Expires=900&X-Amz-Signature=example-signature&X-Amz-SignedHeaders=host"
}
downloadURL: URL assinada para acessar o arquivo. Assim como a URL de upload, ela tem um tempo de expiração.
Considerações Finais
- Segurança: Mantenha a chave de API em segredo e substitua
secretpela chave real em produção. - Tempo de Expiração: As URLs assinadas expiram após o período especificado (ex.: 900 segundos). Realize as operações dentro desse prazo.
- Documentação OpenAPI: Consulte a especificação completa da API in [https://
https://api.mapa.urbis.sampa.br/swagger/docspara mais detalhes sobre endpoints e parâmetros. - Suporte: Para dúvidas ou problemas, contate o suporte técnico da Urbis.