RESTINIO ist eine C ++ 17 -Bibliothek, die Ihnen einen eingebetteten HTTP/WebSocket -Server bietet. Es basiert auf der eigenständigen Version von ASIO und wird hauptsächlich für die asynchrone Verarbeitung von HTTP-Requests abzielt. Boost :: ASIO wird ebenfalls unterstützt.
Restinio selbst ist eine Nur-Header-Bibliothek, aber sie hängt von Nodejs/LLHTTP ab, der nicht nur Header ist.
Derzeit ist Rastinio in einem eher stabilen Zustand und wir denken, dass es seit V.0.4.0 bereit ist, die Produktion zu verwenden.
Berücksichtigen Sie die Aufgabe, eine C ++ - Anwendung zu schreiben, die eine REST -API unterstützen muss. RESTINIO repräsentiert unsere Lösung für diese Aufgabe.
Mal sehen, wie es sich im einfachsten Fall anfühlt:
# include < restinio/core.hpp >
int main ()
{
restinio::run (
restinio::on_this_thread ()
. port ( 8080 )
. address ( " localhost " )
. request_handler ([]( auto req) {
return req-> create_response (). set_body ( " Hello, World! " ). done ();
}));
return 0 ;
}Der Server läuft auf dem Haupt-Thread und antwortet auf alle Anfragen mit Hello-World-Nachricht. Natürlich haben Sie Zugriff auf die Struktur einer bestimmten HTTP -Anforderung, sodass Sie eine komplexe Logik für die Bearbeitung von Anforderungen anwenden können.
# include < restinio/core.hpp >
using namespace restinio ;
template < typename T>
std::ostream & operator <<(std::ostream & to, const optional_t <T> & v) {
if (v) to << *v;
return to;
}
int main () {
// Create express router for our service.
auto router = std::make_unique<router:: express_router_t <>>();
router-> http_get (
R"( /data/meter/:meter_id(d+) )" ,
[]( auto req, auto params) {
const auto qp = parse_query (req-> header (). query ());
return req-> create_response ()
. set_body (
fmt::format ( " meter_id={} (year={}/mon={}/day={}) " ,
cast_to< int >(params[ " meter_id " ]),
opt_value< int >(qp, " year " ),
opt_value< int >(qp, " mon " ),
opt_value< int >(qp, " day " )))
. done ();
});
router-> non_matched_request_handler (
[]( auto req){
return req-> create_response ( restinio::status_not_found ()). connection_close (). done ();
});
// Launching a server with custom traits.
struct my_server_traits : public default_single_thread_traits_t {
using request_handler_t = restinio::router:: express_router_t <>;
};
restinio::run (
restinio::on_this_thread<my_server_traits>()
. address ( " localhost " )
. request_handler ( std::move (router)));
return 0 ;
}RESTINIO wird unter der BSD-3-Klausel-Lizenz verteilt.
Die vollständige Dokumentation für Restinio finden Sie hier.