Vibe.dによってJSONウェブサービスの素早い実装ができます。
/api/v1/chapters
へのHTTPリクエストに対する下記のJSON出力を実装したいときは:
[
{
"title": "Hello",
"id": 1,
"sections": [
{
"title": "World",
"id": 1
}
]
},
{
"title": "Advanced",
"id": 2,
"sections": []
}
]
まず対応する関数を実装するインターフェースと、
1対1にシリアライズされるDのstruct
を定義します:
interface IRest
{
struct Section {
string title;
int id;
}
struct Chapter {
string title;
int id;
Section[] sections;
}
@path("/api/v1/chapters")
Chapter[] getChapters();
}
実際にデータ構造体を埋めるには、インターフェースから継承し、 ビジネスロジックを実装する必要があります:
class Rest: IRest {
Chapter[] getChapters() {
// 埋める
}
}
Rest
クラスのインスタンスを登録するURLRouter
インスタンスで終わりです!
auto router = new URLRouter;
router.registerRestInterface(new Rest);
Vibe.d RESTインターフェースジェネレータはpostされたJSONオブジェクトの子要素が メンバ関数のパラメータにマップされたPOSTリクエストもサポートしています。
RESTインターフェースは定められたサーバに、バックエンド側で使うのと同じメンバ関数を使って、 透過的にJSONリクエストを送るRESTクライアントインスタンスを生成するのに使えます。 これはコードがクライアントとサーバーで共有される時に便利です。
auto api = new RestInterfaceClient!IRest("http://127.0.0.1:8080/");
// GET /api/v1/chapters を送りデシリアライズする
// IRest.Chapter[] へのレスポンス
auto chapters = api.getChapters();