Vibe.d erlaubt es schnell ein JSON webservice zu erstellen.
Wenn man eine JSON-Ausgabe im folgenden Format für eine
Anfrage an /api/v1/chapters implementieren will:
[
{
"title": "Hello",
"id": 1,
"sections": [
{
"title": "World",
"id": 1
}
]
},
{
"title": "Advanced",
"id": 2,
"sections": []
}
]
erstellt man zuerst ein Interface, welches die
getChapters() Funktion definiert und D
structs, welche 1:1 serialisiert werden:
interface IRest
{
struct Section {
string title;
int id;
}
struct Chapter {
string title;
int id;
Section[] sections;
}
@path("/api/v1/chapters")
Chapter[] getChapters();
}
Um die Daten wirklich zu füllen wird eine Klasse erstellt, die dieses Interface implementiert und die eigentliche Logik beinhaltet:
class Rest: IRest {
Chapter[] getChapters() {
// fill
}
}
Nun kann eine Instanz der Rest Klasse auf einem
URLRouter objekt registriert werden. Das Interface
funktioniert somit schon.
auto router = new URLRouter;
router.registerRestInterface(new Rest);
Vibe.d REST-Interface Generatoren unterstützen
auch POST-Anfragen, bei denen die Anfrageparameter
auf die Funktionsargumente übersetzt werden.
Das interface kann nun zusätzlich als Client
verwendet werden, um Anfragen an einen beliebigen
Server mit dieser API zu senden und die Daten zu
deserialisieren. Hiermit kann man Code zwischen Server
und Client teilen.
auto api = new RestInterfaceClient!IRest("http://127.0.0.1:8080/");
// Sendet GET /api/v1/chapters und deserialisiert
// die Antwort zu einem IRest.Chapter[]
auto chapters = api.getChapters();