Menu

REST-интерфейс на базе JSON

Vibe.d позволяет быстро реализовать веб-сервис на основе JSON. Если необходимо получить следующий вывод по HTTP запросу с адресом /api/v1/chapters:

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

Сначала определяется интерфейс, реализующий соответствующие функции и структуры, которые сериализуются 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);

Генератор REST-интерфейсов vibe.d также поддерживает запросы 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