Sirva uma API REST de uma function apoiada no SQL Database
Implante uma function que serve todos os endpoints de uma API REST, lê o SQL Database por uma réplica e guarda a resposta de lista em cache.
Você implanta, com a Azion CLI, uma function que serve todos os endpoints de uma API REST sob /api/tasks: ela lê as linhas do SQL Database por uma read replica, grava-as pela Azion API e mantém a resposta de lista em cache por 60 segundos. Para adicionar gravações a uma function que você já executa, consulte Grave linhas no SQL Database a partir de uma function.
Pré-requisitos
- SQL Database habilitado na sua conta e a permissão Edit SQL Database. O produto está em Preview, então solicite acesso pelo Technical Support.
- Um banco de dados chamado
tasks-api, o seu identificador e a tabelataskscom duas linhas. O identificador é oidque a resposta de criação retorna. Para criá-los, consulte Crie um banco de dados usando a API e Crie tabelas e consulte dados. - O identificador do banco de dados e um personal token armazenados como as variáveis de ambiente
TASKS_DB_IDeTASKS_SQL_TOKEN, como Armazene o identificador do banco de dados e o token mostra. Uma variável só chega à function depois de um deploy, então crie as duas antes do deploy. - A Azion CLI instalada, com o seu personal token salvo. Para configurá-la, consulte Primeiros passos com a Azion CLI.
- Node.js e um gerenciador de pacotes, que a CLI usa para construir o projeto.
A function lê uma tabela criada com CREATE TABLE IF NOT EXISTS tasks (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, completed INTEGER NOT NULL DEFAULT 0);, com as linhas que INSERT INTO tasks (title, completed) VALUES ('Write the API spec', 0); e INSERT INTO tasks (title, completed) VALUES ('Deploy the API', 1); adicionam. completed é uma coluna inteira, 0 ou 1, porque a function a lê como número. Os exemplos chamam a API em api.example.com. Substitua esse domínio pelo que o deploy exibe, e os nomes pelos seus.
Escreva a function da API
A function é um handler ES Modules que implementa todos os endpoints sob /api/tasks. Ela lê com a classe Database do global Azion.Sql, envia cada gravação ao endpoint de query da Azion API com TASKS_DB_ID e TASKS_SQL_TOKEN e guarda a resposta de lista no cache tasks-api sob max-age=60. Todo POST e todo DELETE apaga essa lista guardada depois da gravação.
Para criar o projeto e adicionar a function:
Execute azion init, insira tasks-api como nome e selecione o preset Javascript e o template Hello World, como Faça o deploy de uma function com a Azion CLI mostra. Depois, vá para o diretório do projeto.
Substitua o conteúdo de index.js, o entrypoint que o build lê, pelo código abaixo.
O index.js do projeto agora tem a function da API. Um caminho fora de /api/tasks responde 404, um método que a function não trata responde 405, e uma gravação que falha responde 500 e registra a mensagem dela no log.
O caso de uso Criar APIs REST e GraphQL usa os valores deste exemplo.
Implante a API
Uma function serve todos os endpoints, então um deploy publica todos juntos. Para implantar a API, execute azion deploy no diretório do projeto. O comando constrói o projeto, cria a aplicação e a function, instancia a function e exibe o domínio que a serve. Para a saída do comando, consulte Faça o deploy do projeto.
A API responde no domínio que o deploy exibiu, todos os endpoints rodam na function, e a resposta de lista fica em cache por 60 segundos. O primeiro deploy pode levar vários minutos para responder em todas as localidades.
O caso de uso Criar APIs REST e GraphQL usa os valores deste exemplo.
Confirme que a API responde
Cada verificação chama a API no domínio dela. Um primeiro deploy que ainda não responde ainda está se propagando; espere alguns minutos e tente de novo.
-
O endpoint de lista lê o banco de dados. Requisite a lista:
A resposta traz
200e as duas linhas que a tabela guarda: -
A lista vem da cópia em cache. Repita a requisição em até 60 segundos. O header
x-tasks-cached-attraz o mesmo valor da primeira resposta. -
Uma gravação chega ao banco de dados. Crie uma tarefa:
ShellA resposta traz
201e o ID que o banco de dados atribuiu:Um
500aqui significa que a gravação falhou. Leia a mensagem que a function registrou no log, como Consultar logs de console de uma function mostra:Azion API answered 401aponta para o valor deTASKS_SQL_TOKEN, e uma mensagem de erro do banco de dados aponta para o statement. -
Uma gravação atualiza a lista. Requisite a lista de novo. A resposta traz um novo valor de
x-tasks-cached-ate três tarefas. -
Uma tarefa inexistente responde 404. Apague a mesma tarefa duas vezes:
A primeira chamada responde
{"message":"Task deleted"}, e a segunda responde404com{"error":"Task not found"}.
A API lê, grava e apaga tarefas, e serve a lista pela cópia em cache entre uma gravação e outra.
Estas verificações confirmam o caso de uso Criar APIs REST e GraphQL.