2015-08-14 14 views
10

Ich bin ein Universitätsstudent mit einem mittleren Niveau von C++ - Programmiererfahrung. Ich möchte so schnell wie möglich eine einfache REST-basierte API für meine Anwendung implementieren.Wie implementiert man einen REST-API-Server?

Ich habe mir Casablanca und libWebSockets angesehen, aber die Beispiele auf ihren jeweiligen Seiten sind ein wenig über meinen Kopf. Gibt es eine Bibliothek, die Anfänger-orientierte Tutorials zum Erstellen eines RESTFUL-API-Servers in C++ bietet?

Hinweis: Ich bin mir bewusst, dass diese Frage ein paar Mal in C# gestellt wurde, aber die Antworten sind über ein Jahr oder zwei alt und meist nicht auf Anfänger ausgerichtet. Ich hoffe, dass ein neuer Beitrag einige frische Antworten liefern wird!

+1

Warum muss es C++ sein? Warum nicht [Laravel] (http://laravel.com/) oder [node.js] (http://nodejs.org) oder [Rails] (http://rubyonrails.org) verwenden? – erapert

+1

https://github.com/eidheim/Simple-Web-Server ist eigentlich ziemlich ordentlich, weil es C++ 11 Lambdas verwendet. –

+1

Es ist nicht schwer, REST zu verstehen. Lesen Sie einfach weiter, es wäre mein Rat. Wenn bestehende Lösungen für Ihr Projekt überdimensioniert sind, schreiben Sie einfach Ihren eigenen Server. Es ist nicht zu schwer. Sie können meine TCPSocket-Klasse verwenden, wenn Sie möchten :) https: // github.com/samredway/ssocks –

Antwort

2

Hey ich war auch vor nicht allzu langer Zeit neu im ganzen API-Spiel. Ich fand, dass die Bereitstellung einer ASP.NET-Web-API mit Visual Studio eine gute Möglichkeit zum Starten war. Die Vorlage von VS (ich benutze 2013) macht es sehr einfach, eigene Controller zu erstellen.

Wenn Sie ein paar Tutorials zu HTTP-Methoden nachschlagen, können Sie wirklich den Dreh raus bekommen, Ihre Controller auf Ihre Bedürfnisse abzustimmen. Sie zeichnen sich gut durch die CRUD-Operationen aus, die Sie sicher ausführen möchten.

Sie sollten auch in C++ eine Bibliothek finden, mit der Sie jede Ihrer Controller-Methoden aufrufen und serialisierte JSON/XML-Objekte übergeben/empfangen können. Hoffe das hat geholfen, viel Glück! :)

-1

Ich bin nicht bewusst, dass alle gängigen c/C++ Ruhe-Frameworks dies leicht zu erreichen.

im Allgemeinen, sind RESTful-Frameworks beliebter für höhere Programmiersprachen wie Java/.NET/JavaScript/Python/etc ...

einen RESTful-Schnittstelle implementieren, ohne einen Rahmen möglich ist, aber es ist wirklich nicht Ideal.

3

ngrest ist ein einfaches REST-Framework mit Epoll, Code-Generierung, Kommandozeilen-Tool, Erweiterungen und anderen Zucker.

Es ist einfach zu bedienen und für Anfänger geeignet; geschrieben in C++ 11 und verwendet CMake für Build.

+12

Sie sollten angeben, dass Sie der Entwickler des ngrest-Frameworks sind. – tambre

5

Restbed bietet asynchrone Client/Server-Funktionen über ASIO und C++ 11. Wir haben viele examples und Dokumentation wird in Kürze für diejenigen, die nicht gerne Header-Dateien lesen.

#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; 
} 

Die nächste wichtige Funktion ermöglicht die Abhängigkeit von Anwendungsschichten injizieren.

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); 
Verwandte Themen