Servidor web

Vibe.d permite escribir servidores web HTTP(S) en muy poco tiempo:

auto settings = new HTTPServerSettings;
settings.port = 8080;
listenHTTP(settings, &foo);

Este código inicia un servidor web en el puerto 8080 donde todas las peticiones son gestionadas por la función foo:

void foo(HTTPServerRequest req,
    HTTPServerResponse res) { ... }

Para facilitar el uso típico y la configuración de diferentes rutas se proporciona la clase URLRouter, que permite registrar funciones miembro para gestionar las peticiones GET, POST, etc. de la forma .get("path", handler), .post("path", handler), etc. Además, también permite registrar una clase personalizada para gestionar la interfaz web implementando las rutas de las URL como funciones miembro:

auto router = new URLRouter;
router.registerWebInterface(new WebService);
listenHTTP(settings, router);

Las funciones de la clase WebService que se ejecutarán según las rutas introducidas se deducen según un esquema muy simple:

  • index() gestionará las peticiones a /index.
  • getName() gestionará las peticiones GET a la ruta /name.
  • postUsername() gestionará las peticiones POST a la ruta /username.

Además se pueden asignar rutas personalizadas a funciones mediante el atributo @path("/hola/mundo"). Los parámetros de las peticiones POST están disponibles dentro de la función en nombres de variables con el prefijo _. Incluso es posible especificar parámetros directamente en la ruta:

@path("/my/api/:id")
void foo(int _id)

No se necesita pasar las clases HTTPServerResponse ni HTTPServerRequest como parámetro a cada función. Vibe.d comprueba de forma estática si estos parámetros están en la lista de parámetros de la función y las pasa si se necesitan.

rdmd playground.d