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
struct
s, 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();