Modernes C++ in der Welt der APIs: REST, GraphQL und gRPC in der Praxis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit APIs in C++: REST, GraphQL, gRPC



Wenn es um das Erstellen oder Konsumieren von APIs geht, greifen viele Entwickler aus Gewohnheit zu Python, Node.js oder Go. Aber was ist, wenn Sie maximale Leistung, Low-Level-Speicherkontrolle benötigen oder in einem Legacy-System arbeiten, in dem C++ der König ist? Die Antwort ist einfach: C++ lebt nicht nur – es gedeiht in der Welt der APIs. Lassen Sie uns die drei wichtigsten Ansätze durchgehen, die jeder C++-Entwickler kennen sollte: klassisches REST, modernes GraphQL und leistungsstarkes gRPC.



Dieser Artikel ist kein trockenes Nachschlagewerk, sondern ein praktischer Leitfaden, geschrieben für diejenigen, die echten Code schreiben möchten. Wir betrachten, wie diese Technologien in C++ eingesetzt werden, geben Beispiele mit gängigen Bibliotheken und helfen Ihnen, das richtige Werkzeug für Ihre Aufgabe auszuwählen.



1. REST API in C++: Klassiker in moderner Ausführung



REST (Representational State Transfer) bleibt der am weitesten verbreitete API-Stil. Er wird wegen seiner Einfachheit, der Lesbarkeit von JSON und seiner Vielseitigkeit geschätzt. In C++ haben wir mehrere leistungsstarke Werkzeuge für die Arbeit mit REST, und eines der beliebtesten ist cpprestsdk (auch bekannt als Casablanca) von Microsoft.



Einen REST-Client in C++ schreiben



Stellen Sie sich vor, wir müssen Wetterdaten von einer öffentlichen API abrufen. So sieht das mit cpprestsdk aus:



#include <cpprest/http_client.h>#include <cpprest/filestream.h>#include <iostream>

using namespace web;using namespace web::http;using namespace web::http::client;

int main() { // HTTP-Client erstellen http_client client(U("https://api.openweathermap.org/data/2.5"));

// GET-Anfrage mit Parametern erstellen uri_builder builder(U("/weather")); builder.append_query(U("q"), U("Moscow")); builder.append_query(U("appid"), U("YOUR_API_KEY")); builder.append_query(U("units"), U("metric"));

// Anfrage senden und Antwort erhalten client.request(methods::GET, builder.to_string()) .then([](http_response response) { if (response.status_code() == status_codes::OK) { return response.extract_json(); } throw std::runtime_error("Failed to fetch data"); }) .then([](json::value jsonData) { std::cout << "Temperature: " << jsonData[U("main")][U("temp")].as_double() << "°C" << std::endl; }) .wait();

return 0;}


Wichtige Punkte:

  • Asynchronität: cpprestsdk verwendet die PPL (Parallel Patterns Library) und Futures, ideal für C++.
  • JSON-Verarbeitung: Der integrierte Parser json::value ermöglicht eine einfache Datenmanipulation.
  • Plattformunabhängigkeit: Die Bibliothek funktioniert unter Windows, Linux und macOS.


Wann REST wählen?

REST in C++ ist ideal für:

  • Einfache CRUD-Operationen
  • Integration mit Webdiensten (soziale Netzwerke, Zahlungssysteme)
  • Prototyping und Microservices mit geringer Auslastung


2. GraphQL: Abfrageflexibilität in C++



GraphQL löst das Hauptproblem von REST – Overfetching (Abrufen unnötiger Daten) und Underfetching (Notwendigkeit mehrerer Anfragen, um vollständige Informationen zu erhalten). In C++ wird für die Arbeit mit GraphQL am häufigsten die Bibliothek cppgraphql verwendet oder ein eigener Client auf Basis von libcurl geschrieben.



Beispiel einer GraphQL-Abfrage in C++



Angenommen, wir müssen ein Benutzerprofil und seine letzten Beiträge abrufen – in REST wären dafür zwei Anfragen nötig, in GraphQL nur eine:



#include <iostream>#include <curl/curl.h>#include <nlohmann/json.hpp>

using json = nlohmann::json;

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) { ((std::string*)userp)->a

Blogs

Buchempfehlungen