среда, 5 апреля 2017 г.

[prog.c++] Альфа-версия RESTinio, инструмента для реализации REST API на C++

Мы долго смотрели по сторонам на то, что есть в C++ для разработки HTTP-сервисов и REST-сервисов в частности. И решили все-таки попробовать сделать что-то свое. Попробовали. Сегодня выкатываем в мир первую альфа-версию небольшого, header-only, кросс-платформенного инструмента под названием RESTinio. Его главная задача -- упростить асинхронную обработку запросов. Чтобы, грубо говоря, обработчик спокойно мог потратить 15 секунд на формирование ответа, но это бы не влияло на параллельные запросы.

В основе лежит Asio и http_parser из NodeJS. SObjectizer для работы RESTinio не нужен. Но обработка запросов легко может делегироваться из RESTinio в SObjectizer. Пример того, как это делается можно найти в репозитории.

Все это началось с задачки, где для обработки одного запроса нужно было провзаимодействовать с несколькими внешними системами и все это могло занять от нескольких секунд до нескольких десятков секунд. Интеграция с внешними системами должна была лечь на SObjectizer, но наружу нужно было выставить RESTful API. Который нужно было на чем-то сделать. Причем сделать так, чтобы длительная обработка отдельных запросов не мешала обслуживанию запросов от большого числа пользователей.

Ну и это еще одно подтверждение того, что мы уже несколько раз говорили на конференциях в статьях: мы больше смотрим в сторону того, чтобы дать возможность агентам общаться с внешним миром посредством де-факто стандартных протоколов, вроде HTTP ;) При этом планов привязать RESTinio намертво к SObjectizer-у у нас нет. Тут все просто: из SObjectizer должно быть удобно пользоваться RESTinio, но самому RESTinio SObjectizer для работы не нужен.

В общем, все, что у нас получилось, на данный момент лежит тут. Есть планы по дальнейшему развитию. В том числе и смена лицензии в последующих версиях, которые будут более пригодны для продакшена. Ну а пока любые замечания, предложения, соображения и т.д., всячески приветствуются :)

Отправить комментарий