Docs/ Backend as a Service/ Fonctions (Deno)

Fonctions (Deno)

Des fonctions TypeScript serverless sur votre propre serveur. Écrivez, déployez et invoquez par HTTPS.

Créer un serveur de fonctions

Pour créer un nouveau runtime de fonctions :

  1. Ouvrez Serveurs de fonctions dans le tableau de bord sh0.
  2. Cliquez sur Créer un serveur de fonctions.
  3. Saisissez un nom (par exemple « my-api-functions »).
  4. Cliquez sur Créer. sh0 déploie une instance du runtime Deno avec SSL automatique.

Chaque serveur de fonctions utilise environ 256 Mo de mémoire et est accessible à l'adresse https://<name>.sh0.app.

Écrire des fonctions

Les fonctions suivent le modèle standard des API Web : un export par défaut qui reçoit une Request et renvoie une Response.

export default async function(req: Request) {
const url = new URL(req.url);
const name = url.searchParams.get('name') ?? 'world';
return new Response(
JSON.stringify({ hello: name }),
{ headers: { 'Content-Type': 'application/json' } },
);
}

Objet Request

L'objet Request est la Request standard des API Web. Vous y accédez à :

  • req.method — méthode HTTP (GET, POST, etc.)
  • req.url — URL complète de la requête
  • req.headers — en-têtes de la requête
  • await req.json() — analyse le corps JSON
  • await req.text() — texte brut du corps

Objet Response

Renvoyez une Response standard des API Web. Vous pouvez renvoyer n'importe quel type de contenu :

// JSON
return new Response(JSON.stringify(data), {
headers: { 'Content-Type': 'application/json' }
});
// HTML
return new Response('<h1>Hello</h1>', {
headers: { 'Content-Type': 'text/html' }
});
// Status codes
return new Response('Not found', { status: 404 });

Déployer

Déployez votre fonction en envoyant le fichier TypeScript/JavaScript par :

  • Tableau de bord — collez ou envoyez votre fichier de fonction sur la page de détail du serveur de fonctions.
  • API — envoyez le code de la fonction par POST à l'endpoint de l'API sh0 de votre serveur de fonctions.

Deno compile la fonction et la met en cache à la première requête. Les requêtes suivantes sont servies depuis le cache.

Tip
Aucune étape de build n'est nécessaire. Deno prend en charge TypeScript nativement. Écrivez simplement du .ts et déployez.

Invoquer

Appelez votre fonction sur son endpoint HTTPS :

# GET request
curl https://my-api-functions.sh0.app/?name=sh0
# POST with JSON body
curl -X POST https://my-api-functions.sh0.app/ \
-H "Content-Type: application/json" \
-d '{\"action\": \"process\"}'

Utiliser des paquets npm

Deno permet d'importer directement des paquets npm avec le spécificateur npm: :

import Stripe from "npm:stripe";
import { z } from "npm:zod";
export default async function(req: Request) {
const stripe = new Stripe(Deno.env.get('STRIPE_KEY')!);
// ...
}

Vous pouvez aussi importer depuis des URL (https://deno.land/x/...) ou utiliser des import maps pour des imports plus lisibles.

Se connecter aux bases de données

Vos fonctions peuvent se connecter à n'importe quel serveur de base de données géré par sh0. Utilisez le nom d'hôte du réseau Docker interne pour des connexions locales et rapides :

import postgres from "npm:postgres";
const sql = postgres({
host: 'my-postgres-server', // Docker network name
port: 5432,
database: 'mydb',
username: 'user',
password: Deno.env.get('DB_PASSWORD'),
});
export default async function(req: Request) {
const users = await sql`SELECT * FROM users LIMIT 10`;
return new Response(JSON.stringify(users));
}
Warning
Stockez les identifiants de base de données dans des variables d'environnement, pas en dur dans votre fonction. Configurez-les dans les paramètres du serveur de fonctions.