Tout au long de cette documentation, vous rencontrerez des références aux [APIs standards du web](https://developer.mozilla.org/en-US/docs/Web/API) sur lesquelles se base SvelteKit. Plutôt que de réinventer la roue, nous _utilisons la plateforme_, ce qui signifie que vos compétences actuelles en développement web sont applicables à SvelteKit. De même, le temps passé à apprendre SvelteKit vous aidera à devenir un•e meilleur•e développeur ou développeuse web de manière générale. Ces APIs sont disponibles dans tous les navigateurs modernes et dans de nombreux environnements comme les Cloudflare Workers, Deno, et les Vercel Functions. Pendant votre développement, et au sein des [adaptateurs](adapters) pour environnements basés sur Node (AWS Lambda compris), ces APIs sont rendues disponibles via des polyfills lorsque nécessaires (pour le moment — Node met à jour rapidement son support des nouveaux standards du web). En particulier, vous allez vous familiariser avec les concepts suivants : ## APIs Fetch [!VO]Fetch APIs SvelteKit utilise [`fetch`](https://developer.mozilla.org/fr/docs/Web/API/fetch) pour récupérer des données depuis le réseau. Cette méthode est disponible dans les [hooks](hooks) et les [routes de serveur](routing#server) ainsi que dans le navigateur. > [!NOTE] Une version spéciale de `fetch` est disponible dans les fonctions [`load`](load), les > [hooks de serveur](hooks#Server-hooks) et les [routes d'API](routing#server) pour invoquer les > endpoints directement lors du rendu côté serveur, sans faire d'appel HTTP, tout en préservant les > données d'authentification. (Pour faire des appels authentifiés dans du code serveur en dehors de > `load`, vous devez passer explicitement `cookie` et/ou les headers d'`authorization`.) Cette > méthode vous permet aussi de faire des requêtes relatives, alors que le `fetch` serveur classique > requiert normalement une URL complète. En plus de `fetch` lui-même, l'[API Fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) inclut les interfaces suivantes : ### Request Une instance de [`Request`](https://developer.mozilla.org/fr/docs/Web/API/Request) est accessible dans les [hooks](hooks) et les [routes de serveur](routing#server) en tant que `event.request`. Elle contient des méthodes utiles comme `request.json()` et `request.formData()` pour récupérer les données qui ont été envoyées à un endpoint. ### Response Une instance de [`Response`](https://developer.mozilla.org/fr/docs/Web/API/Response) est renvoyée depuis `await fetch(...)` et depuis les gestionnaires de fichiers `+server.js`. Au fond, une application SvelteKit est une machine à transformer des `Request` en `Response`. ### Headers L'interface [`Headers`](https://developer.mozilla.org/fr/docs/Web/API/Headers) vous permet de lire les `request.headers` entrantes et de définir les `response.headers` sortantes. Par exemple, vous pouvez récupérer `request.headers` comme montré ci-dessous, et utiliser la [fonction utilitaire `json`](@sveltejs-kit#json) pour envoyer des `response.headers` modifiées : ```js // @errors: 2461 /// file: src/routes/what-is-my-user-agent/+server.js import { json } from '@sveltejs/kit'; /** @type {import('./$types').RequestHandler} */ export function GET({ request }) { // affiche toutes les en-têtes console.log(...request.headers); // crée une Response JSON en utilisant une en-tête reçue return json({ // récupère une en-tête précise userAgent: request.headers.get('user-agent') }, { // définit une en-tête sur la réponse headers: { 'x-custom-header': 'patate' } }); } ``` ## FormData Lorsque vous avez affaire à des soumissions de formulaire natives (en HTML), vous devrez manipuler des objets [`FormData`](https://developer.mozilla.org/fr/docs/Web/API/FormData). ```js // @errors: 2461 /// file: src/routes/hello/+server.js import { json } from '@sveltejs/kit'; /** @type {import('./$types').RequestHandler} */ export async function POST(event) { const body = await event.request.formData(); // affiche tous les champs console.log([...body]); return json({ // récupère la value d'un champ spécifique name: body.get('name') ?? 'world' }); } ``` ## APIs de stream [!VO]Stream APIs La plupart du temps, vos endpoints vont renvoyer des données complètes, comme dans l'exemple `userAgent` ci-dessus. Parfois, vous pourriez avoir besoin de renvoyer une réponse qui est trop grande pour être stockée en mémoire d'un envoi, ou qui doit être envoyée en morceaux ; pour ces situations, la plateforme fournit des [streams](https://developer.mozilla.org/fr/docs/Web/API/Streams_API) — [ReadableStream](https://developer.mozilla.org/fr/docs/Web/API/ReadableStream), [WritableStream](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream) et [TransformStream](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream). ## APIs d'URL [!VO]URL APIs Les URLs sont représentées par l'interface [`URL`](https://developer.mozilla.org/fr/docs/Web/API/URL), qui inclut des propriétés utiles comme `origin` et `pathname` (et, dans le navigateur, `hash`). On retrouve cette interface dans différents endroits — `event.url` dans les [hooks](hooks) et les [routes de serveur](routing#server), [`page.url`]($app-state) dans les [pages](routing#page), `from` et `to` dans [`beforeNavigate` et `afterNavigate`]($app-navigation), et ainsi de suite. ### URLSearchParams À chaque fois que vous rencontrez une URL, vous pouvez accéder aux paramètres de recherche via `url.searchParams`, qui est une instance de [`URLSearchParams`](https://developer.mozilla.org/fr/docs/Web/API/URLSearchParams) : ```js // @filename: ambient.d.ts declare global { const url: URL; } export {}; // @filename: index.js // ---cut--- const foo = url.searchParams.get('foo'); ``` ## Web Crypto L'API [Web Crypto API](https://developer.mozilla.org/fr/docs/Web/API/Web_Crypto_API) est rendu disponibles via la variable globale `crypto`. Elle est utilisée en interne pour les en-têtes de [Content Security Policy](configuration#csp), mais vous pouvez aussi vous en servir pour des choses comme la génération de UUIDs : ```js const uuid = crypto.randomUUID(); ```