Endpoints
O Astro permite que você crie endpoints customizados para servir e processar todo tipo de dados. Isso pode ser usado para gerar imagens, expor um arquivo RSS ou os usar como rotas de API para construir uma API completa para o seu site.
Em sites gerados de forma estática, seus endpoints customizados são chamados durante a fase de build para produzir arquivos estáticos. Já em sites usando o modo SSR seus endpoints customizados se tornarão endpoints reais executados a cada requisição. Endpoints estáticos e SSR são definidos de maneira similar, mas os endpoints SSR suportam funcionalidades adicionais.
Endpoints de Arquivos Estáticos
Para criar um endpoint customizado, adicione um arquivo .js
ou .ts
no diretório /pages
. A extensão do arquivo será removida durante o processo de build, portanto o nome do arquivo deve conter a extensão que você deseja que os dados usem, por exemplo src/pages/data.json.ts
se tornará a rota /data.json
.
Seus endpoints devem exportar uma função GET
(opcionalmente assíncrona) que recebe um objeto de contexto com propriedades similares a global Astro
. Aqui, ele retorna um objeto Response
com um name
e url
, que o Astro irá chamar durante a build e utilizar seu conteúdo para gerar o arquivo.
Desde o Astro v3.0, 0 objeto Response
retornado não tem mais que incluir a propriedade encoding
. Por exemplo, para produzir uma imagem binária png:
Também é possível adicionar validação de tipo à sua função com o tipo APIRoute
:
Roteamento dinâmico e a propriedade params
Os endpoints suportam as mesmas funcionalidades de roteamento dinâmico que as páginas. Nomeie seu arquivo com um nome de parâmetro entre colchetes e exporte uma função chamada getStaticPaths()
. Assim será possível acessar o parâmetro utilizando a propriedade params
passada para a função do endpoint.
Isso irá gerar quatro endpoints JSON durante a build: /api/0.json
, /api/1.json
, /api/2.json
e /api/3.json
. O roteamento dinâmico com endpoints funciona da mesma forma que nas páginas, porém, como um endpoint é uma função e não uma página, props não são suportadas.
request
Todos os endpoints recebem uma propriedade request
, porém no modo estático você só tem acesso a propriedade request.url
. Ela retorna o URL completo do endpoint atual e funciona da mesma forma que Astro.request.url funciona em páginas.
Endpoints do Servidor (Rotas de API)
Tudo descrito na seção de endpoints de arquivos estáticos também pode ser utilizado no modo SSR: arquivos podem exportar uma função GET
que recebe um objeto de contexto com propriedades similares a global Astro
.
Porém, diferente do modo static
, quando você configura o modo server
, os endpoints serão construídos no momento em que são requisitados. Isso desbloqueia novas funcionalidades que estão indisponíveis durante a build e permite que você construa rotas de API que respondem requisições e seguramente executam código no servidor em runtime.
Não se esqueça de habilitar o modo SSR no seu projeto antes de testar esses exemplos.
Os endpoints do servidor tem acesso a propriedade params
sem exportar a função getStaticPaths
e podem retornar um objeto Response
, permitindo que você defina códigos de status e cabeçalhos HTTP.
Esse código responderá a qualquer requisição que corresponda à rota dinâmica. Por exemplo, se navegarmos para /capacete.json
, params.id
será capacete
. Se capacete
existir no banco de dados, o endpoint irá criar um objeto Response
para responder com JSON e retornar um código de status HTTP de sucesso. Caso contrário, ele usará o objeto Response
para responder com um erro 404
.
No modo SSR, certos provedores requerem que o cabeçalho Content-Type
retorne uma imagem. Neste caso, utilize um objeto Response
para especificar uma propriedade headers
. Por exemplo, para produzir uma imagem .png
binária:
Métodos HTTP
Além da função GET
, você pode exportar uma função com o nome de qualquer método HTTP. Assim, quando uma requisição for recebida, o Astro irá checar o método e chamar a função correspondente.
Também é possível exportar uma função ALL
para corresponder a todos os métodos que já não tenham suas respectivas funções exportadas. Se houver uma requisição sem método correspondente, ela será redirecionada para a sua página de 404.
request
No modo SSR, a propriedade request
retorna um objeto Request
completamente utilizável que se refere a requisição atual. Isso permite que você aceite dados e cheque cabeçalhos:
Redirecionamentos
O contexto do endpoint exporta um utilitário redirect()
similar ao Astro.redirect
: