Здравствуйте, so5team, Вы писали:
S>Да вы своим ослоумием и "полезными" комментариями здесь резко выделяетесь, так что продолжайте. Публике нужны развлечения.
А что ты так завелся? Ты же искал своей поделке внимание — ну так вот оно, что не так? кстати, интересно за "ослоумие" тебя забанят или ты и есть специальный шут, которому позволительно хамить?
Re[5]: v.0.5.0: возможность работы с кастомными версиями http-parser
Здравствуйте, Denis Ivlev, Вы писали:
DI>А что ты так завелся?
Кто завелся?
DI>Ты же искал своей поделке внимание — ну так вот оно, что не так?
Идиотский комментарий от человека, уже успевшего себя зарекомендовать специфическим образом.
В двух словаях: не каждый фидбэк одинаково полезен.
DI> кстати, интересно за "ослоумие" тебя забанят или ты и есть специальный шут, которому позволительно хамить?
А вы пожалуйстесь модератору, посмотрите, что получится.
Re[6]: v.0.5.0: возможность работы с кастомными версиями http-parser
Со времени последнего анонса в RESTinio произошли следующие изменения:
* добавлено понятие connection state listener-а. В версии 0.6.0 для connection state listener добавлена возможность получить доступ к параметрам TLS-соединения;
* добавлено понятие IP-blocker-а;
* обновлены зависимости: Asio 1.14.0 (Asio 1.12 так же поддерживается), optional-lite 3.2.0, variant-lite 1.2.2. Добавлена поддержка fmtlib-6.0.0, но сам RESTinio пока использует fmtlib-5.3.0;
* добавлены макросы RESTINIO_VERSION, RESTINIO_VERSION_MAJOR, RESTINIO_VERSION_MINOR, RESTINIO_VERSION_PATCH, RESTINIO_VERSION_MAKE.
Версия 0.6.0 ломает совместимость с версией 0.5 в части API для connection state listener-ов. Поэтому при переходе на 0.6.0 может потребоваться правка кода, использующего RESTinio.
Разработка RESTinio теперь ведется только на GitHub, оттуда же можно забрать свежую версию. RESTinio-0.6.0 так же доступна через Conan и vcpkg.
Можно отметить, что такие вещи, как connection state listener и IP-blocker, изначально не предполагались. Они были добавлены в RESTinio по просьбам пользователей. Так что если вам чего-то не хватает в RESTinio, то дайте нам об этом знать. Либо через Issues на GitHub-е, либо через Google-группу.
Мы внимательно прислушиваемся к замечаниям и просьбам пользователей. Например, функциональность для поддержки file upload появилась в результате такой просьбы. Так что если вам чего-то не хватает в RESTinio, то дайте нам об этом знать. Либо через Issues на GitHub-е, либо через Google-группу.
Намедни мы выкатили очередную версию 0.6.6, в которой, среди улучшений и исправлений, следует отметить две новых фичи.
Самая простая из них – это возможность повесить один обработчик сразу для нескольких методов при обращении к одному ресурсу. Например:
// Обработчик будет вызван для методов LOCK и UNLOCK.
router->add_handler(
restinio::router::any_of_methods(
restinio::http_method_lock(), restinio::http_method_unlock()),
"/api/v1/resources/:rid",
[](const auto & req, const auto & params) {...});
// Обработчик будет вызван для всех методов за исключением GET, POST и DELETE.
router->add_handler(
restinio::router::none_of_methods(
restinio::http_method_get(),
restinio::http_method_post(),
restinio::http_method_delete()),
"/api/v1/users/:user",
[](const auto & req, const auto & params) {...});
Но самое важное нововведение – это новый безопасный по типам роутер запросов, который может использоваться вместо привычного express-роутера. При этом новый роутер использует возможности C++ для выявления в compile-time ошибок, которые при использовании express-роутера проявляются только в run-time.
Выпустили очередное обновление для RESTinio. В версии 0.6.7.1, кроме нескольких баг-фиксов, добавились:
Дополнительные опции для настройки CMake-сборок: RESTINIO_USE_EXTERNAL_EXPECTED_LITE, RESTINIO_USE_EXTERNAL_OPTIONAL_LITE, RESTINIO_USE_EXTERNAL_STRING_VIEW_LITE, RESTINIO_USE_EXTERNAL_VARIANT_LITE.
Вспомогательная функция run_async для упрощения запуска RESTinio-сервера на отдельном пуле потоков или отдельной рабочей нити:
int main() {
auto server = restinio::run_async(
// Задаем io_context для использования.
// В данном случае у сервера будет собственный io_context.
restinio::own_io_context(),
// Параметры для HTTP-сервера.
restinio::server_settings_t{}
.address("127.0.0.1")
.port(8080)
.request_handler(...),
// Размер пула рабочих нитей для HTTP-сервера.
16);
// Если оказались здесь и run_async не выбросил исключения,
// значит HTTP-сервера запущен.
... // Какие-то другие действия.
// Здесь нет необходимости останавливать HTTP-сервер
// вручную, это будет сделано автоматически в
// деструкторе переменной 'server'.
}
Добавлены новые вспомогательные функции для работа значений HTTP-заголовков. На этот раз заголовков Authorization и Proxy-Authorization.
Так же добавлены вспомогательные функции для извлечения из Authorization параметров для Basic и Bearer аутентификаций. Например, для Basic-аутентификации:
#include <restinio/all.hpp>
#include <restinio/http_field_parser/basic_auth.hpp>
...
auto on_request(const restinio::request_handle_t & req) {
using namespace restinio::http_field_parsers::basic_auth;
const auto auth_params = try_extract_params(*req,
restinio::http_field::authorization);
if(auth_params) { // Параметры успешно извлечены.if(is_valid_user(auth_params->username, auth_params->password)) {
...
}
}
...
}
Вышел очередной релиз RESTinio, о котором можно рассказать, потому что в свежей версии 0.6.13 появилось парочка новых и важных фич.
Первая фича -- это возможность провязать несколько обработчиков в цепочку. Какое-то приближение к middleware из EpressJS. При получении нового запроса обработчики из цепочки будут вызываться последовательно. Тем самым каждый обработчик может отвечать только за свою операцию (логирование параметров запроса, проверка значений в HTTP-заголовках, аутентификация и т.д.) и нужная приложению функциональность набирается посредством формирования соответствующей цепочки обработчиков.
Вторая фича, которая очень нужна для вышеупомянутых цепочек, -- это возможность внедрить объект нужного пользователю типа в объект-запрос, который создается внутри RESTinio при получении нового входящего запроса. Такой объект может использоваться для передачи дополнительной информации от одной стадии обработки запроса к другой.
Более подробно все это описано в статье на Хабре. Там же изложены и некоторые соображения о том, куда RESTinio может двигаться дальше.
Так же хочется поблагодарить всех, кто проявил конструктивный интерес к RESTinio и, особенно, тех, кто рискнул и применил RESTinio у себя. Конечно же, отдельное спасибо тем, кто нашел возможность и время поделиться с нами своими впечатлениями, соображениями и обнаруженными недостатками.
Для тех, кто про RESTinio слышит впервые: это небольшая C++ библиотека для встраивания в C++ приложения HTTP(s)/WebSocket сервера (только сервера, HTTP-клиента в RESTinio нет). Распространяется под лицензией BSD-3-CLAUSE.
Сама библиотека header-only вследствие активного использования шаблонов (в том числе трех- и более этажных), но зависит от библиотек, которые нуждаются в компиляции. В качестве зависимостей используются fmtlib, nodejs/llhttp, expected-lite и Asio (как standalone, так и Boost.Asio).
* теперь нужен C++17;
* теперь используется nodejs/llhttp вместо оставшегося без поддержки nodejs/http-parser;
* переделаны CMake-скрипты. Теперь для конфигурирования используется новый набор CMake-овских опций/переменных.
* добавлена возможность выстраивать цепочки асинхронных обработчиков. В версии 0.6.13 были добавлены цепочки синхронных обработчиков, теперь еще и асинхронные поддерживаются. Цепочки обработчиков -- это что-то вроде middleware из EpressJS;
* выброшены некоторые классы/методы/функции, которые ранее были помечены как deprecated.