Сегодня расскажу про пакет, с помощью которого можно легко настроить запросы к вашему бэкенду — dart_frog. Он упрощает создание роутингов благодаря автоматической генерации кода. В этом посте покажу пару команд и расскажу основные моменты при работе с пакетом.
🐸 Как начать
Чтобы начать работу с dart_frog, сначала необходимо установить зависимость. Далее можно работать с командами пакета
Для создания проекта используйте:
dart_frog build
В результате у вас создастся структура проекта, которая включает в себя DockerFile.
Основная логика обработки запросов в Dart Frog строится на маршрутах (routes). Каждый маршрут соответствует определенному пути и методу HTTP, и чтобы его добавить необходимо создать файл-обработчик в директории routes/.
Например, чтобы добавить POST /api/localization_key/export, создайте файл вручную:
lib/routes/api/localization_key/export.dart
Или используйте команду:
dart_frog new route "/api/localization_key/export"
Далее внутри созданного роута реализуйте функцию:
Future<Response> onRequest(RequestContext context) async {
// Логика обработки запроса
return Response.json(body: {'message': 'Экспорт данных'});
}
RequestContext позволяет получить доступ к входящему запросу, а также к зависимостям, представленным контексту запроса.
🐸 Middleware
В Dart Frog middleware реализуется как функция, которая оборачивает обработчик маршрута и возвращает новый обработчик с дополнительной логикой.
Middleware добавляется в проект в виде файла с названием _middleware.dart.
Создать middleware можно также с помощью команды:
dart_frog new middleware 'NAME_OF_FOLDER'
После добавления или изменения middleware необходимо перезапустить генерацию кода для применения изменений.
Пару важных моментов:
◽️Если файл _middleware.dart находится в папке маршрута без вложенности, middleware применяется ко всем маршрутам на этом уровне
◽️Чтобы middleware применялся только к определенным маршрутам, необходимо создать _middleware.dart внутри соответствующей папки маршрутов
◽️ Если middleware создан в произвольной, не связанной с маршрутом папке, он применен не будет
Структура middleware выглядит таким образом:
Handler middleware(Handler handler) {
return handler.use(requestLogger());
}
Кроме маршрутов и middleware, часто нужно работать с заголовками запросов. В Dart Frog это реализуется так:
Response onRequest(RequestContext context) {
final request = context.request;
final headers = request.headers; // Map<String, dynamic>
...
}
Когда вы настроили маршруты, middleware и работу с заголовками, нужно сгенерировать код маршрутов, чтобы сервер мог их использовать.
Для этого используйте:
dart_frog build
Это создает сгенерированный код маршрутов в директории build/, который используется сервером (bin/server.dart).
❗️ При работе с dart_frog важно поддерживать правильную вложенность папок, чтобы маршруты сгенерировались корректно. Более подробно можно прочитать в документации Dart Frog.
