{"id":22080153,"url":"https://github.com/lucaspanizio/url-shortener","last_synced_at":"2026-04-29T13:36:11.972Z","repository":{"id":264394919,"uuid":"891824902","full_name":"lucaspanizio/url-shortener","owner":"lucaspanizio","description":"Encurtador de URL Java com AWS Lambda, Amazon S3 e Amazon Api Gateway.","archived":false,"fork":false,"pushed_at":"2024-11-26T01:13:54.000Z","size":12,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-04T05:33:31.943Z","etag":null,"topics":["amazon-api-gateway","amazon-s3","aws-lambda","java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lucaspanizio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-21T02:43:27.000Z","updated_at":"2024-11-26T01:13:58.000Z","dependencies_parsed_at":"2025-06-03T22:12:47.733Z","dependency_job_id":null,"html_url":"https://github.com/lucaspanizio/url-shortener","commit_stats":null,"previous_names":["lucaspanizio/url-shortener"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lucaspanizio/url-shortener","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspanizio%2Furl-shortener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspanizio%2Furl-shortener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspanizio%2Furl-shortener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspanizio%2Furl-shortener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucaspanizio","download_url":"https://codeload.github.com/lucaspanizio/url-shortener/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspanizio%2Furl-shortener/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32427881,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T13:34:34.882Z","status":"ssl_error","status_checked_at":"2026-04-29T13:34:29.830Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amazon-api-gateway","amazon-s3","aws-lambda","java"],"created_at":"2024-11-30T23:12:41.497Z","updated_at":"2026-04-29T13:36:11.967Z","avatar_url":"https://github.com/lucaspanizio.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv\u003e\n  \u003ch1 align=\"left\"\u003eUrl Shortener\u003c/h1\u003e\n\u003c/div\u003e\n\u003cp align=\"left\"\u003e  Aplicação back-end em Java que utiliza AWS Lambda, Amazon S3 e Amazon API Gateway para encurtamento de URLs. A aplicação gera um código único para cada URL fornecida e também realiza o processo inverso, retornando a URL original com base no código fornecido.\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-pré-requisitos\"\u003e☝ Pré-requisitos\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#-como-configurar\"\u003e🛠️ Como configurar\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#-como-utilizar\"\u003e⚡Como utilizar\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;  \n  \u003ca href=\"#-licença\"\u003e📜 Licença\u003c/a\u003e   \n  \u003cbr\u003e\u003cbr\u003e\n\n## ☝ Pré-Requisitos\n\n➡️ [Ter uma conta na AWS](https://signin.aws.amazon.com/signin?client_id=arn%3Aaws%3Asignin%3A%3A%3Aconsole%2Fcanvas\u0026redirect_uri=https%3A%2F%2Fconsole.aws.amazon.com%2Fconsole%2Fhome%3FhashArgs%3D%2523%26isauthcode%3Dtrue%26nc2%3Dh_ct%26oauthStart%3D1732579892312%26src%3Dheader-signin%26state%3DhashArgsFromTB_us-east-2_ca9e6689173b76fc\u0026page=resolve\u0026code_challenge=6KycKHmPxwXqzDIu0vUFPo-8kLixJnzAut9Hx4fq-3Y\u0026code_challenge_method=SHA-256\u0026backwards_compatible=true) \u003cbr\u003e\n➡️ [Ter o JDK 17 ou posterior instalado](https://adoptium.net/) \u003cbr\u003e\n\u003cbr\u003e\u003cbr\u003e\n\n## 🛠️ Como configurar\n\nClone este repositório\n\n```bash\ngit clone https://github.com/lucaspanizio/url-shortener.git\n```\n\nAcesse o diretório da aplicação\n\n```bash\ncd url-shortener\n```\n\nInstale as dependências. Pode fazer isso por meio da IDE ou por meio de linha de comando se tiver o mvn instalado de forma global.\n\n```bash\nmvn clean install\n```\n\nCompile a aplicação. Novamente isso pode ser feito via IDE ou linha de comando.\n\n```bash\nmvn clean package\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003eConfigurações AWS\u003c/summary\u003e\n\n#### 1. Criação de um Bucket S3\n\nCrie um bucket no **Amazon S3** com as **configurações padrão**.\n\n---\n  \n#### 2. Criação da Função Lambda `ShortUrlGenerator`\n\nCrie uma função Lambda chamada **`ShortUrlGenerator`** com a linguagem **Java**.\n\n⚠️ Certifique-se de selecionar a versão do Java compatível com o projeto. Por padrão, o projeto utiliza **Java 17**, mas você pode ajustar essa configuração no arquivo `pom.xml`.\n\n**Configurações**:\n   - Habilite a URL da função Lambda.\n   - Tipo de autenticação: **NONE** (sem autenticação).\n   - Utilize as demais configurações padrão.\n   - Modifique o manipulador da função para:  \n   **`com.rocketseat.ShortUrlGenerator::handleRequest`**.\n   - Acesse o **papel de execução (IAM Role)** associado à função e **Criar política em linha** com permissões para:\n     - `s3:GetObject`\n     - `s3:PutObject`\n     - `s3:ListBucket`\n   - Especifique a ARN do bucket criado na etapa anterior.\n   - Compile a aplicação e faça upload do arquivo **`.jar`** gerado.\n\n---\n\n#### 2.1. Criação da Função Lambda `ShortUrlResolver`\n\nRepita os passos acima para criar uma segunda função Lambda chamada **`ShortUrlResolver`**. A única diferença deve ser o **manipulador da função**, para esta função defina-o como:  \n**`com.rocketseat.ShortUrlResolver::handleRequest`**.\n\n---\n\n#### 3. Configuração de Variáveis de Ambiente\n\n1. Para ambas as funções Lambda (`ShortUrlGenerator` e `ShortUrlResolver`), adicione uma variável de ambiente chamada **`S3_BUCKET_NAME`** e valor igual ao nome do bucket S3 definido no **passo 1**.\n\n---\n\n#### 4. Configuração do API Gateway\n\n1. Crie uma instância do **Amazon API Gateway** do tipo **HTTP** com as opções padrão.\n\n2. Configure as rotas na API Gateway:\n   - **POST /**:\n     - Integração: Função Lambda.\n     - ARN: **Função Lambda `ShortUrlGenerator`**.\n   - **GET /{urlCode}**:\n     - Integração: Função Lambda.\n     - ARN: **Função Lambda `ShortUrlResolver`**.\n\n3. Conceda permissão em ambas as integrações ao **API Gateway** para invocar as funções Lambda.\n\n\u003c/details\u003e\n\u003cbr\u003e\n\n## ⚡Como utilizar\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/794a9a4d-7ed3-474b-b01f-172bb0b5979e\" alt=\"POST para criar o short code da URL\"\u003e\n  \u003cp\u003e\u003cem\u003eRecebe a URL original e o timestamp em segundos da data de expiração do short code que será gerado.\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/184fb536-4e64-48a2-9e8c-d3da999167a7\" alt=\"GET para obter a URL original (sem param query)\"\u003e\n  \u003cp\u003e\u003cem\u003eRecebe como param path o short code da URL e retorna o link original.\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/f662932f-f6dc-473b-970a-580925d8c2a0\" alt=\"GET para obter a URL original (com param query)\"\u003e\n  \u003cp\u003e\u003cem\u003eCom o param query  redirect=T  você será automaticamente redirecionado para o link original.\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/345e5e23-b443-4d31-ab7e-6e43e441c7c4\" alt=\"GET com time expirado)\"\u003e\n  \u003cp\u003e\u003cem\u003eApós o tempo de expiração estipulado ao criar o short code, a resposta será essa.\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n## 📜 Licença\n\n\u003cp\u003eEsse projeto está sob a \u003ca href=\"https://github.com/lucaspanizio/url-shortener/blob/main/LICENSE\"\u003elicença MIT\u003c/a\u003e.\u003cbr\u003e\n\u003cimg alt=\"License\" src=\"https://img.shields.io/static/v1?label=license\u0026message=MIT\u0026color=49AA26\u0026labelColor=000000\"\u003e\n\u003c/p\u003e\n\n#### Desenvolvido por José Lucas Panizio 🖖\n\n[![Linkedin Badge](https://img.shields.io/badge/-LinkedIn-blue?style=flat-square\u0026logo=Linkedin\u0026logoColor=white\u0026link=https://www.linkedin.com/in/lucaspanizio/)](https://www.linkedin.com/in/lucaspanizio/)\n[![Gmail Badge](https://img.shields.io/badge/-Gmail-ff0000?style=flat-square\u0026labelColor=ff0000\u0026logo=gmail\u0026logoColor=white\u0026link=mailto:lucaspanizio@gmail.com)](mailto:lucaspanizio@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucaspanizio%2Furl-shortener","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucaspanizio%2Furl-shortener","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucaspanizio%2Furl-shortener/lists"}