Interface REST JSON

Vibe.d permet de créer rapidement un service web JSON. Si on veut implémenter la sortie JSON suivante pour répondre à la requête HTTP sur /api/v1/chapitres:

[
    {
        "title": "Coucou",
        "id": 1,
        "sections": [
            {
                "title": "Le monde",
                "id" 1
            }
        ]
    },
    {
        "title": "Avancé",
        "id": 2,
        "sections": []
    }
]

On définit d'abord une interface qui implémente les fonctions correspondantes et les structs D qui vont être sérialisés:

interface IRest
{
    struct Section
    {
        string title;
        int id;
    }

    struct Chapter
    {
        string title;
        int id;
        Section[] sections;
    }

    @path("/api/v1/chapters")
    Chapter[] getChapters();
}

Pour remplir effectivement les structures de données, on doit hériter de cette interface et implémenter la logique métier:

class Rest: IRest
{
    Chapter[] getChapters()
    {
        // remplir
    }
}

À partir d'un URLRouter, on enregistre une instance de Rest et tout fonctionne!

auto router = new URLRouter;
router.registerRestInterface(new Rest);

Le générateur d'interface REST de vibe.d permet aussi de faire la même chose dans l'autre sens avec des requêtes POST qui transforment un objet JSON reçu en structure D.

L'interface REST peut être utilisée pour générer un client REST qui envoie des requêtes JSON à un serveur de façon transparente. C'est très utile lorsque le code est partagé entre le client et le serveur.

auto api = new RestInterfaceClient!IRest("http://127.0.01:8000");
// envoie un GET /api/v1/chapters et désérialise
// la réponse dans IRest.Chapter[]
auto chapters = api.getChapters();

rdmd playground.d