Points de terminaison
Astro vous autorise à créer des points de terminaison (ou endpoint) personnalisés pour servir tout type de données. Vous pouvez les utiliser pour générer des images, exposer un document RSS ou les utiliser comme routes d’API pour construire une API complète pour votre site.
Pour les sites générés statiquement, vos endpoints personnalisés sont appelés au moment de la construction de votre site, afin de produire des fichiers statiques. Si vous optez pour le mode de rendu SSR, les endpoints personnalisés se transforment en endpoints de serveur en direct qui sont appelés à chaque requête. Les endpoints statiques et SSR sont définis de manière similaire, mais les endpoints SSR prennent en charge des fonctionnalités supplémentaires.
Points de terminaison des fichiers statiques
Titre de la section Points de terminaison des fichiers statiquesPour créer des endpoint personnalisés, ajoutez un fichier .js
ou .ts
à votre dossier /pages
. L’extension .js
ou .ts
sera supprimée pendant le processus de construction, donc le nom du fichier doit inclure l’extension des données que vous souhaitez créer. Par exemple, src/pages/data.json.ts
générera un endpoint /data.json
.
Les points de terminaison exportent une fonction GET
(optionnellement async
) qui reçoit un objet de contexte avec des propriétés similaires à celles de l’objet global Astro
. Ici, elle retourne un objet Response avec un champ name
et url
, et Astro l’appellera au moment de la construction et utilisera le contenu du body pour générer le fichier.
Depuis Astro v3.0, l’objet Response
retourné n’a plus besoin d’inclure la propriété encoding
. Par exemple, pour produire une image png binaire :
Vous pouvez aussi typer vos fonctions d’endpoints en utilisant le type APIRoute
:
params
et routage dynamique
Titre de la section params et routage dynamiqueLes endpoints supportent les même fonctions de routage dynamique que celles des pages. Nommez votre fichier avec un nom de paramètre entre crochets et exportez une fonction getStaticPaths()
. Vous pouvez ensuite accéder au paramètre en utilisant la propriété params
passée à la fonction de l’endpoint :
Cela va générer 4 points de terminaison JSON au moment du build : /api/0.json
, /api/1.json
, /api/2.json
et /api/3.json
. Le routage dynamique avec les endpoints fonctionne de la même manière qu’avec les pages, mais parce que l’endpoint est une fonction et non un composant, les props ne sont pas supportées.
request
Titre de la section requestTous les endpoints reçoivent une propriété request
, mais dans le mode statique, vous n’avez accès qu’à request.url
. Cela renvoie l’URL complète du point de terminaison actuel et fonctionne de la même manière que Astro.request.url pour les pages.
Points de terminaison du serveur (Routes API)
Titre de la section Points de terminaison du serveur (Routes API)Tout ce qui est décrit dans la section sur les endpoints des fichiers statiques peut également être utilisé en mode SSR : les fichiers peuvent exporter une fonction GET
qui reçoit un objet de contexte avec des propriétés similaires à celles de l’objet global Astro
.
Mais, contrairement au mode static
, lorsque vous activez le mode de rendu à la demande pour une route, le point de terminaison sera construit lorsqu’il sera demandé. Cela débloque de nouvelles fonctionnalités qui ne sont pas disponibles au moment de la construction, et vous permet de construire des routes d’API qui écoutent les requêtes et exécutent du code de manière sécurisée sur le serveur au moment de l’exécution.
Vos routes seront affichées à la demande par défaut dans le mode server
. En mode hybrid
, vous devez désactiver le pré-rendu pour chaque endpoint personnalisé avec export const prerender = false
.
Veillez à activer le mode de rendu à la demande avant d’essayer ces exemples, et ne pas utiliser le pré-rendu en mode “hybrid”.
Les points de terminaison du serveur peuvent accéder à params
sans exporter getStaticPaths
, et ils peuvent retourner un objet Response
, vous permettant de définir les codes d’état et les en-têtes :
Cela répondra à toute requête qui correspond à la route dynamique. Par exemple, si nous naviguons vers /helmet.json
, params.id
sera mis à helmet
. Si helmet
existe dans la base de données de produits fictifs, l’endpoint utilisera un objet Response
pour répondre avec du JSON et retournera un code d’état HTTP (EN). Sinon, il utilisera un objet Response
pour répondre avec un 404
.
En mode SSR, certains fournisseurs exigent l’en-tête Content-Type
pour renvoyer une image. Dans ce cas, utilisez un objet Response
pour spécifier une propriété headers
. Par exemple, pour produire une image binaire .png
:
Méthodes HTTP
Titre de la section Méthodes HTTPEn plus de la fonction GET
, vous pouvez exporter une fonction avec le nom de n’importe quelle méthode HTTP. Lorsqu’une requête arrive, Astro vérifie la méthode et appelle la fonction correspondante.
Vous pouvez également exporter une fonction ALL
pour correspondre à n’importe quelle méthode qui n’a pas de fonction exportée correspondante. Si une requête ne correspond à aucune méthode, elle sera redirigée vers la page 404 de votre site.
request
Titre de la section requestEn mode de rendu SSR, la propriété request
renvoie un objet Request
entièrement utilisable qui fait référence à la requête en cours. Cela vous permet d’accepter des données et de vérifier les en-têtes :
Redirections
Titre de la section RedirectionsLe contexte de l’endpoint exporte un utilitaire redirect()
similaire à Astro.redirect
: