Crie uma API RESTful de tarefas com Functions e SQL Database
Crie um banco de dados em SQL Database, escreva rotas CRUD com Hono e faça o deploy de uma API de tarefas que roda como uma função.
Neste tutorial, você vai construir uma API RESTful de tarefas que roda como uma função e mantém seus registros em SQL Database. Você vai criar o banco de dados e sua tabela, escrever a camada de dados e as rotas Hono, fazer o deploy do projeto com Azion CLI e chamar cada endpoint.
O projeto finalizado é o exemplo restful-tasks no GitHub.
Pré-requisitos
- Uma conta Azion. Para criar uma, consulte Como criar uma conta na Azion.
- Azion CLI instalada. Consulte Azion CLI.
- Um personal token para as requisições de API. Para criar um, consulte Como criar um personal token.
- Node.js versão 18 ou superior.
1. Crie o banco de dados
A camada de dados acessa o banco de dados pelo nome e usa tasks como valor padrão quando nenhum nome está configurado. Nomeie o banco de dados como tasks para que esse valor padrão funcione.
Envie uma requisição POST para o endpoint de bancos de dados, substituindo [TOKEN VALUE] pelo seu personal token:
A resposta traz o identificador do banco de dados e seu status:
Guarde o id. Todas as requisições seguintes acessam o banco de dados por esse valor.
2. Crie a tabela tasks
A API armazena uma linha por tarefa, com um título, um indicador de conclusão e dois timestamps.
As duas requisições enviam um POST para o endpoint de query. Substitua <your-database-id> pelo id do seu banco de dados:
A resposta informa um objeto de resultado por statement:
Os endpoints precisam de linhas para retornar:
Três statements retornam três objetos de resultado:
O banco de dados contém a tabela tasks e três linhas.
3. Crie o projeto
Azion CLI monta o projeto a partir de um template Hono.
Execute o comando de login e siga os prompts:
A CLI armazena as credenciais localmente e autoriza todos os comandos seguintes na sua conta.
Execute o comando init:
Aceite o nome sugerido ou digite o seu:
A CLI cria o diretório do projeto com o código do template. Os comandos build, dev e deploy rodam de dentro dele.
4. Escreva a camada de dados
A camada de dados chama useQuery e useExecute da biblioteca azion/sql. As duas recebem o nome do banco de dados como primeiro argumento e um array de statements SQL como segundo. Para a superfície completa da biblioteca, consulte Biblioteca SQL da Azion.
Substitua o conteúdo de src/db.ts:
O arquivo exporta uma função por operação: getTasks, getTask, createTask, updateTask e deleteTask. DATABASE_NAME usa tasks como valor padrão. Para ler um banco de dados com outro nome, defina DATABASE_NAME no arquivo .env do projeto.
5. Escreva as rotas da API
Hono vincula cada método HTTP e caminho a um handler. Cada handler envolve sua chamada de dados em um bloco try e retorna 500 com um erro JSON quando a chamada falha.
Substitua o conteúdo de src/app.ts:
O arquivo cobre cinco rotas:
| Método e caminho | Resultado |
|---|---|
GET /tasks | Retorna todas as tarefas como um array JSON. |
GET /tasks/:id | Retorna uma tarefa ou 404 com { "error": "Task not found" }. |
POST /tasks | Cria uma tarefa a partir de title e completed e a retorna com 201. |
PUT /tasks/:id | Atualiza title e completed e retorna a tarefa armazenada. |
DELETE /tasks/:id | Remove a tarefa e retorna { "message": "Task deleted" }. |
6. Exporte o handler da função
Azion executa o handler ES Modules: um objeto com um método fetch, exportado como default do arquivo de entrada. Hono fornece esse método na instância do app. Para o padrão e a alternativa legada que ele substitui, consulte Migre padrões de handler em Functions.
Substitua o conteúdo de src/index.ts:
O arquivo de entrada exporta o app, então cada requisição chega ao roteador Hono, que a compara com as cinco rotas.
7. Faça o deploy do projeto
Execute o comando de deploy a partir do diretório do projeto:
Azion abre Azion Console no navegador, onde os logs do deployment rodam até o build terminar. Se o navegador não abrir, siga o link que a CLI imprime.
Azion constrói o projeto e faz o deploy na Azion Web Platform. O deployment retorna um domínio de workload no formato https://xxxxxxx.map.azionedge.net. A propagação leva alguns minutos, então espere antes de enviar a primeira requisição.
8. Verifique os endpoints
Substitua <your-azion-domain> pelo domínio de workload do deployment.
A resposta traz as três linhas inseridas na tabela:
A resposta traz um único objeto:
A resposta retorna 201 com a tarefa armazenada e o identificador que o banco de dados atribuiu:
A resposta traz a tarefa com os novos valores:
A resposta confirma a remoção:
A API cria, lê, atualiza e exclui tarefas pela função em execução. Cada escrita chega ao banco de dados.