JSON REST Інтерфейс

Vibe.d дозволяє швидко реалізувати веб-сервіс на основі JSON. Якщо ми хочемо отримати наступний JSON-об'єкт за допомогою HTTP-запиту, треба звернутися до /api/v1/chapters:

[
  {
    "title": "Hello",
    "id": 1,
    "sections": [
      {
        "title": "World",
        "id": 1
      }
    ]
  },
  {
    "title": "Advanced",
    "id": 2,
    "sections": []
  }
]

Спочатку слід визначити інтерфейс, який реалізує відповідні функції і D структури, які серіалізовані за принципом 1:1:

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() {
      // заповнити
    }
}

Надсилаючи копію до URLRouter, ми реєструємо копію класу Rest і готово!

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

Vibe.d генератор REST інтерфейсу також підтримує запити POST, де дочірні модулі опублікованих JSON об'єктів зіставляються з параметрами функції.

На основі REST інтерфейсу можна створити клієнтський об'єкт REST, який прозоро відправляє запити з JSON об'єктами на сервер, використовуючи ті ж самі функції, що і на серверній стороні. Це вигідно тоді, коли код розподілений між клієнтом і сервером.

auto api = new RestInterfaceClient!IRest("http://127.0.0.1:8080/");
// відправляє GET /api/v1/chapters і десеріалізує
// відповідь у IRest.Chapter[]
auto chapters = api.getChapters();

rdmd playground.d