web-dev-qa-db-fra.com

Comment implémenter un serveur API REST?

Je suis un étudiant universitaire avec un niveau intermédiaire d'expérience en programmation C++. Je voudrais implémenter une simple REST basée sur mon application aussi rapidement que possible.

J'ai regardé Casablanca et libWebSockets mais les exemples publiés sur leurs sites respectifs sont un peu au-dessus de ma tête. Existe-t-il une bibliothèque qui propose davantage de didacticiels pour les débutants sur la création d'un serveur API RESTFUL en C++?

Note: Je suis conscient que cette question a été posée plusieurs fois en C # mais les réponses ont plus d'un an ou deux et ne s'adressent généralement pas aux débutants . J'espère qu'un nouveau message donnera de nouvelles réponses!

14
Mason Itkin

Hé, j'étais également nouveau dans le jeu d'API tout récemment. J'ai trouvé que le déploiement d'une API Web ASP.NET avec Visual Studio était une excellente façon de commencer. Le modèle fourni par VS (j'utilise 2013) facilite la création de vos propres contrôleurs.

Si vous recherchez quelques tutoriels sur les méthodes HTTP, vous pouvez vraiment comprendre le moulage de vos contrôleurs selon vos besoins. Ils correspondent bien aux opérations CRUD que je suis sûr que vous cherchez à effectuer.

Vous devriez également pouvoir trouver une bibliothèque en C++ qui vous permettra d'appeler chacune de vos méthodes de contrôleur et de passer/recevoir des objets JSON/XML sérialisés. J'espère que cela vous a aidé, bonne chance! :)

2
vivek.s.patel

Restbed offre des capacités client/serveur asynchrones via ASIO et C++ 11. Nous avons beaucoup de exemples et la documentation sera disponible sous peu pour ceux qui n'aiment pas lire les fichiers d'en-tête.

#include <memory>
#include <cstdlib>
#include <restbed>

using namespace std;
using namespace restbed;

void post_method_handler( const shared_ptr< Session > session )
{
    const auto request = session->get_request( );

    int content_length = 0;
    request->get_header( "Content-Length", content_length );

    session->fetch( content_length, [ ]( const shared_ptr< Session > session, const Bytes & body )
    {
        fprintf( stdout, "%.*s\n", ( int ) body.size( ), body.data( ) );
        session->close( OK, "Hello, World!", { { "Content-Length", "13" } } );
    } );
}

int main( const int, const char** )
{
    auto resource = make_shared< Resource >( );
    resource->set_path( "/resource" );
    resource->set_method_handler( "POST", post_method_handler );

    auto settings = make_shared< Settings >( );
    settings->set_port( 1984 );
    settings->set_default_header( "Connection", "close" );

    Service service;
    service.publish( resource );
    service.start( settings );

    return EXIT_SUCCESS;
}

La prochaine fonctionnalité majeure permettra la possibilité d'injecter des couches d'application de dépendance.

auto settings = make_shared< Settings >( );

Service service;
service.add_application_layer( http_10_instance );
service.add_application_layer( http_11_instance );
service.add_application_layer( http2_instance );
service.add_application_layer( spdy_instance );
service.start( settings );
6
Ben Crowhurst

ngrest est un simple framework REST avec epoll, génération de code, outil de ligne de commande, extensions et autres sucre).

Il est facile à utiliser et convient aux débutants; écrit sur C++ 11 et utilise CMake pour la construction.

4
loentar

http://pistache.io/ me semble bien et moderne. Le monde bonjour ne fait que 9 lignes.

3
Djeefther Souza