RESTinio — это небольшая C++14 библиотека, которая позволяет встраивать HTTP/WebSockets сервер в C++ приложения. В своей реализации использует http-parser (из nodejs) и Asio (как standalone, так и Boost-овский вариант). В последний раз мы о RESTinio рассказывали здесь.
Со времени последнего анонса в RESTinio было исправлено несколько ошибок и было добавлено несколько новых фич. В частности, в версии 0.5.0 добавлена возможность работы RESTinio с кастомизированными версиями библиотеки http-parser. Это позволяет реализовать обработку в RESTinio нестандартных HTTP-методов.
Допустим, что следует написать REST-сервис, который должен реагировать на нестандартные методы ENCODE и DECODE. Для этого потребуется:
- сделать форк http-parser, в котором реализуется распознавание методов ENCODE и DECODE (в результате чего в кастомизированном http-parser появляются значения HTTP_ENCODE и HTTP_DECODE);
- определить в своем коде две константы типа restinio::http_method_id_t:
constexpr const restinio::http_method_id_t http_encode{HTTP_ENCODE, "ENCODE"}; constexpr const restinio::http_method_id_t http_decode{HTTP_DECODE, "DECODE"};
- определить собственный тип, внутри которого должен быть единственный статический метод from_nodejs следующего вида:
struct my_http_mehods_mapping { inline static constexpr restinio::http_method_id_t from_nodejs(int method_code) noexcept { switch(method_code) { case HTTP_ENCODE: return http_encode; case HTTP_DECODE: return http_decode; default: return restinio::default_http_methods_t::from_nodejs(method_code); } } };
- указать имя собственного типа с методом from_nodejs в свойствах HTTP-сервера:
struct my_server_traits : public restinio::default_traits_t { using http_methods_mapper_t = my_http_methods_mapping; };
После этого можно будет использовать константы http_encode и http_decode при работе с RESTinio, например:
auto make_request_handler() {
auto router = std::make_unique< restinio::router::express_router_t<> >();
router->add_handler(http_encode, "/data", [](auto req, auto params) {...});
router->add_handler(http_decode, "/data", [](auto req, auto params) {...});
...
return router;
}
Примечание. Для реализации этой функциональности из RESTinio был удален тип http_method_t, а вместо него введен тип http_method_id_t. Если в вашем коде использовался http_method_t, то при обновлении на v.0.5.0 вам придется внести изменения в свой код.
Также в версии 0.5.0 был удален ряд вещей, которые были помечены как «deprecated» в предыдущих версиях RESTinio.
Сам RESTinio живет на BitBucket-е с зеркалом на GitHub.
Документацию можно найти здесь, а здесь находится сгенерированный Doxygen-ом справочник по API.
В общем-то, в последнее время в RESTinio попадает то, о чем просят пользователи. Так что если вы хотите увидеть что-то в RESTinio, то дайте нам знать.