Einleitung: API – das ist nicht beängstigend, sondern sehr praktisch
\n\nStellen Sie sich vor, Sie bestellen eine Pizza. Sie rufen im Restaurant an, diktieren die Adresse und die Zutaten – und 30 Minuten später steht der Lieferant vor der Tür. Eine API in der Programmierung funktioniert genauso: Es ist dieser „Telefonanruf“, mit dem ein Programm mit einem anderen kommuniziert. Nur dass statt der Stimme HTTP-Anfragen verwendet werden und statt der Pizza – Daten.
\n\nIn der Welt der C#-Entwicklung sind APIs die Grundlage. Jedes moderne Projekt, sei es eine Webanwendung, ein mobiles Backend oder ein Unternehmensdienst, „ruft“ auf die eine oder andere Weise externe Dienste auf. Und dann stellt sich die Hauptfrage: Welches Protokoll soll man wählen? REST, GraphQL oder gRPC? Jedes ist auf seine Weise gut, aber jedes für seine eigene Aufgabe.
\n\nIn diesem Artikel analysieren wir die Arbeit mit APIs in C# anhand realer Beispiele. Sie erfahren, wie Sie HTTP-Anfragen senden, wie Sie C# mit GraphQL und gRPC verbinden, und vor allem – Sie werden verstehen, wann Sie was verwenden sollten. Los geht's!
\n\n\n\n
1. REST API in C#: ein Klassiker, der nie alt wird
\n\nREST (Representational State Transfer) ist ein Architekturstil, der seit vielen Jahren der De-facto-Standard ist. Einfach, verständlich, arbeitet über HTTP. Wenn Sie jemals Code geschrieben haben, der GET- oder POST-Anfragen sendet – dann haben Sie bereits mit REST gearbeitet.
\n\nWie man REST-Anfragen in C# sendet
\n\nIn C# wird für die Arbeit mit REST am häufigsten die Klasse HttpClient verwendet. Sie ist in .NET integriert und kann alles: von einfachen GET-Anfragen bis hin zu komplexen POST-Anfragen mit JSON-Body.
So sieht eine typische Anfrage an eine REST-API in C# aus:
\n\nusing System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nclass Program\n{\n static async Task Main(string[] args)\n {\n using HttpClient client = new HttpClient();\n client.BaseAddress = new Uri("https://api.example.com/");\n \n HttpResponseMessage response = await client.GetAsync("users/1");\n if (response.IsSuccessStatusCode)\n {\n string json = await response.Content.ReadAsStringAsync();\n Console.WriteLine(json);\n }\n }\n}\n\n\nKurz und klar. HttpClient lebt lange, daher wird es normalerweise einmal erstellt und wiederverwendet (in realen Projekten über einen DI-Container).
Wann REST Ihre Wahl ist
\n- \n
- Sie schreiben eine öffentliche API für das Web oder mobile Anwendungen. \n
- Die Clients sind Browser, mobile Geräte, IoT. \n
- Sie benötigen Einfachheit und Caching auf HTTP-Ebene. \n
Nachteile von REST: Datenredundanz (oft kommt mehr an als nötig) und das N+1-Problem, bei dem für den Abruf zusammenhängender Daten mehrere Aufrufe getätigt werden müssen.
\n\n\n\n
2. GraphQL in C#: Fordern Sie nur das an, was Sie brauchen
\n\nGraphQL ist eine von Facebook entwickelte Abfragesprache. Ihr Hauptvorteil: Der Client entscheidet selbst, welche Felder er benötigt. Keine überflüssigen Informationen, keine Dutzende von Endpunkten – eine Anfrage, eine Antwort.
\n\nGraphQL-Abfrage aus C# senden
\n\nFür die Arbeit mit GraphQL in C# können Sie HttpClient direkt verwenden, aber bequemer ist es, die Bibliothek GraphQL.Client (NuGet-Paket GraphQL.Client) zu nutzen.
Beispiel einer Abfrage an eine GraphQL-API:
\n\nusing System;\nusing System.Threading.Tasks;\nusing GraphQL;\nusing GraphQL.Client.Http;\nusing GraphQL.Client.Serializer.Newtonsoft;\n\nclass Program\n{\n static async Task Main(string[] args)\n {\n using var client = new GraphQLHttpClient("https://api.example.com/graphql", new NewtonsoftJsonSerializer());\n\n var request = new GraphQLRequest\n {\n Query = @"\n {\n user(id: 1) {\n name\n email\n posts {\n title\n }\n }\n }"\n };\n\n var response = await client.SendQueryAsync<dynamic