Construa uma API de screenshot com Functions e Browserless
Faça o deploy de um projeto Hono em Functions que captura o screenshot de uma página pela API do Browserless e retorna a imagem PNG.
Neste tutorial, você vai construir uma API de screenshot que retorna uma página web como uma imagem PNG. Você vai criar o projeto a partir do template Hono, escrever a rota, armazenar o token da API, fazer o deploy do projeto e requisitar o endpoint.
A função não executa nenhum navegador próprio. Ela envia a URL de destino para Browserless, um serviço hospedado que renderiza a página e responde com a imagem. A função retorna esses bytes para o cliente.
Pré-requisitos
- Uma conta Azion. Para criar uma, consulte Como criar uma conta na Azion.
- Azion CLI instalada na sua máquina. Consulte Azion CLI.
- Node.js versão 18 ou superior.
- Uma conta no Browserless e o token de API dessa conta. Para criar uma, consulte Browserless.
- Conhecimento prático de JavaScript.
1. Autentique Azion CLI
Faça login na sua conta Azion pelo terminal:
Azion CLI abre um fluxo pelo navegador quando você omite as flags de credencial. Ela armazena as credenciais localmente, e elas autorizam todos os comandos seguintes.
2. Crie o projeto a partir do template Hono
Azion CLI inicializa o projeto a partir de um template inicial. Para criá-lo:
Execute o comando e responda aos prompts que aparecem:
O prompt lista um preset por framework:
O prompt aparece depois que Azion CLI obtém e configura o template:
A rota e o token da API ainda não estão prontos:
Azion CLI cria o diretório screenshot-api e escreve o projeto Hono nele. Acesse esse diretório:
Os comandos restantes são executados a partir dele.
3. Escreva a rota de screenshot
O campo entry do azion.config.js indica o arquivo de entrada do projeto. Abra esse arquivo e substitua o conteúdo dele pela rota que captura a página:
A rota lê a página de destino no parâmetro de consulta url e usa https://www.example.com como valor padrão. export default app é o padrão de handler ES Modules, que Azion recomenda em vez do padrão Service Worker. Para comparar os dois padrões, consulte Migre padrões de handler em Functions.
O projeto completo está no pacote browserless do repositório de exemplos de functions.
4. Armazene o token do Browserless em uma variável de ambiente
Uma variável de ambiente mantém o token fora do código da função e fora do controle de versão. Para criá-la:
Azion armazena a variável na conta, e Azion.env.get() retorna o valor dela em tempo de execução. Uma variável cuja chave contém password, pwd, secret, key, hash, encrypted, passcode, auth ou token é enviada como secret por padrão. A flag --secret true repete esse padrão aqui.
Uma alteração em uma variável não alcança uma função que já está em execução. Faça um novo deploy da função para o novo valor ter efeito. Azion Runtime também lê uma variável por process.env. Para as duas interfaces, os campos de uma variável e as outras interfaces de gerenciamento, consulte Variáveis de ambiente.
5. Faça o deploy do projeto
Construa o projeto e envie para Azion:
O comando faz upload do código da função e configura a aplicação e as regras de roteamento dela. Ele retorna um domínio de workload no formato https://xxxxxxx.map.azionedge.net.
A aplicação responde nesse domínio alguns minutos depois, quando a propagação de DNS termina.
6. Verifique a resposta com o screenshot
Requisite a rota com o endereço da página a ser capturada:
O comando imprime o tipo de conteúdo da resposta:
O arquivo screenshot.png contém a captura de https://www.example.com. Uma requisição sem o parâmetro url captura a mesma página, porque a rota usa esse valor padrão. Quando Browserless recusa uma requisição, a rota responde com o corpo e o código de status que Browserless retornou.