Funciones (Deno)

Funciones serverless de TypeScript en su propio servidor. Escriba, despliegue e invoque mediante HTTPS.

Crear un servidor de funciones

Para crear un nuevo runtime de funciones:

  1. Vaya a Servidores de funciones en el panel de control de sh0.
  2. Haga clic en Crear servidor de funciones.
  3. Introduzca un nombre (por ejemplo, «my-api-functions»).
  4. Haga clic en Crear. sh0 despliega una instancia del runtime de Deno con SSL automático.

Cada servidor de funciones usa aproximadamente 256 MB de memoria y es accesible en https://<name>.sh0.app.

Escribir funciones

Las funciones usan el patrón estándar de las Web API: una exportación por defecto que recibe un Request y devuelve un 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' } },
);
}

Objeto Request

El objeto Request es el Request estándar de las Web API. Acceda a:

  • req.method — método HTTP (GET, POST, etc.)
  • req.url — URL completa de la solicitud
  • req.headers — encabezados de la solicitud
  • await req.json() — analiza el cuerpo JSON
  • await req.text() — texto sin procesar del cuerpo

Objeto Response

Devuelva un Response estándar de las Web API. Puede devolver cualquier tipo de contenido:

// 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 });

Desplegar

Despliegue su función subiendo el archivo TypeScript/JavaScript mediante:

  • Panel de control — pegue o suba su archivo de función en la página de detalle del servidor de funciones.
  • API — envíe el código de la función con POST al endpoint de la API de sh0 de su servidor de funciones.

Deno compila y almacena en caché la función en la primera solicitud. Las solicitudes posteriores se sirven desde la caché.

Tip
No se necesita ningún paso de compilación. Deno admite TypeScript de forma nativa. Solo escriba .ts y despliegue.

Invocar

Llame a su función en su 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\"}'

Usar paquetes npm

Deno permite importar paquetes npm directamente con el especificador 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')!);
// ...
}

También puede importar desde URL (https://deno.land/x/...) o usar import maps para importaciones más limpias.

Conectarse a bases de datos

Sus funciones pueden conectarse a cualquier servidor de bases de datos administrado por sh0. Use el nombre de host de la red interna de Docker para conexiones locales y rápidas:

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
Guarde las credenciales de la base de datos como variables de entorno, no codificadas en su función. Configúrelas en los ajustes del servidor de funciones.