Мы выпустили RESTinio 0.6.1!
2019.11.13
Эта версия содержит вспомогательные инструменты для упрощения работы с HTTP-полями.
В предыдущих версиях в RESTinio были только средства проверки наличия конкретного HTTP-поля и получения этого поля в первоначальном, еще неразобранном виде. Проверка корректности формата значения поля и разбор значения на отдельные составляющие ложилась на самого пользователя.
Начиная с версии 0.6.1 RESTinio предоставляет ряд вспомогательных средств, которые выполняют разбор содержимого HTTP-полей. Например, вот так теперь можно получить доступ к содержимому поля Content-Type:
#include <restinio/all.hpp> #include <restinio/helpers/http_field_parsers/content-type.hpp> ... auto on_request(const restinio::request_handle_t & req) { namespace hfp = restinio::http_field_parsers; // Get the content of Content-Type field and parse it. const auto content_type = hfp::content_type_value_t::try_parse( // value_of will throw if there is no Content-Type. req->header().value_of(restinio::http_field::content_type)); if(content_type) { // Now we can access values of Content-Type directly. if("text" == content_type->media_type.type && "plain" == content_type->media_type.subtype) { // It is text/plain content. Try to detect charset for it. const auto charset = hfp::find_first( content_type->media_type.parameters, "charset"); if(charset) { ... // Handling existing charset value. } else { ... // Handling missing charset value. } ... // Some processing. } else if("application" == content_type->media_type.type && "json" == content_type->media_type.subtype) { // It is application/json content. ... // Some processing. } } else { // There is some error with parsing of Content-Type value. ... // Some error handling code. } }
В версии 0.6.1 таким образом реализована поддержка HTTP-полей Accept, Cache-Control, Content-Encoding, Content-Disposition, Content-Type. Средства разбора других HTTP-полей будут добавляться в последующих версиях RESTinio. Вы можете повлиять на скорость этого процесса если сообщите нам, поддержку каких HTTP-полей вы хотели бы видеть в RESTinio в первую очередь.
С помощью этих средств в RESTinio был добавлен набор вспомогательных функций для работы с multipart телами запросов. Так, в версии 0.6.1 пройтись по всем частям multipart тела можно посредством вспомогательной функции enumerate_parts из пространства имен restinio::multipart_body:
#include <restinio/all.hpp> #include <restinio/helpers/multipart_body.hpp> ... auto on_post(const restinio::request_handle_t & req) { using namespace restinio::multipart_body; const auto result = enumerate_parts( *req, [](parsed_part_t part) { ... // Some actions with the current part. return handling_result_t::continue_enumeration; }, "multipart", "form-data" ); if(result) { ... // Producing positive response. } else { ... // Producing negative response. } return restinio::request_accepted(); }
Одно из применений запросов с multipart телами -- это загрузка файлов на сервер. RESTinio 0.6.1 предлагает средства для упрощения реализации этой операции (но сама реализация все-таки остается задачей пользователя). Вспомогательная функция enumerate_parts_with_files из пространства имен restinio::file_upload позволяет перечислить все части multipart тела, в которых выполняется загрузка файла согласно RFC1867:
#include <restinio/all.hpp> #include <restinio/helpers/file_upload.hpp> ... auto on_post(const restinio::request_handle_t & req) { using namespace restinio::file_upload; const auto result = enumerate_parts_with_files( *req, [](part_description_t part) { ... // Some actions with the current uploaded file. return handling_result_t::continue_enumeration; } ); if(result) { ... // Producing positive response. } else { ... // Producing negative response. } return restinio::request_accepted(); }
В состав штатных примеров RESTinio теперь входит пример file_upload, который демонстрирует простой сценарий использования enumerate_parts_with_files.
Мы старались сделать все эти возможности максимально удобными для наших пользователей. Но мы понимаем, что это самая первая версия новой функциональности, возможны какие-то огрехи и недочеты. Поэтому мы приглашаем всех заинтересовавшихся попробовать новую версию RESTinio и поделиться с нами своими впечатлениями.
Новая версия RESTinio доступна в основном репозитории на github, а так же через системы управления зависимостями vcpkg и conan.
Документация находится здесь.
Также доступна Doxygen документация: RESTinio-0.6 API Reference.
Если вам чего-то не хватает в RESTinio и вы хотели бы увидеть в RESTinio нужную вам функциональность, то можете сообщить нам об этом через Issues на github или Google-группу, либо же написав на info@stiffstream.com. Вы так же можете заказать у нас доработку RESTinio под свои нужды.