Jeder kann coden / Programmieren & TicTacToe / Objektorientierte Programmierung
Was sind Web APIs?¶
Einleitung¶
Web APIs (Application Programming Interfaces) ermöglichen es Softwareanwendungen, über das Internet miteinander zu kommunizieren. Sie definieren Schnittstellen, über die Programme Daten austauschen oder Funktionen auf entfernten Systemen aufrufen können – oft unabhängig von Programmiersprache oder Plattform.
Stell dir eine Web API wie ein digitales Service-Terminal vor: Du sendest eine Anfrage (z. B. „Gib mir alle Nutzer“) und bekommst eine strukturierte Antwort zurück (z. B. als JSON oder XML). Dabei läuft die Kommunikation meist über das HTTP-Protokoll, so wie bei Webseiten – nur für Maschinen statt für Menschen.
Zwei der bekanntesten Arten, wie Web APIs gestaltet sein können, sind:
- REST (leichtgewichtig, URL-basiert, oft mit JSON)
- SOAP (standardisiert, XML-basiert, für komplexe Anforderungen)
Beide verfolgen unterschiedliche Ansätze und haben jeweils ihre typischen Einsatzbereiche – und genau darum geht’s im Folgenden.
REST (Representational State Transfer)¶
Was ist REST?¶
REST ist ein Architekturstil für Webservices, der auf den Standards und Protokollen des Internets basiert, insbesondere auf HTTP. Er wurde 2000 von Roy Fielding in seiner Dissertation beschrieben.
Grundprinzipien von REST¶
REST ist kein Protokoll, sondern ein Architekturstil mit folgenden Prinzipien:
- Client-Server-Modell: Trennung von Benutzeroberfläche (Client) und Datenverarbeitung (Server).
- Zustandslosigkeit (Statelessness): Jeder Request vom Client muss alle Informationen enthalten, die der Server braucht. Der Server speichert keinen Zustand des Clients zwischen zwei Aufrufen.
- Cachebarkeit: Antworten können als cachebar oder nicht cachebar markiert werden.
- Einheitliche Schnittstelle (Uniform Interface):
- Ressourcen werden durch URIs identifiziert.
- Die Manipulation von Ressourcen erfolgt über standardisierte HTTP-Methoden (GET, POST, PUT, DELETE, PATCH).
- Repräsentationen: Ressourcen werden über Repräsentationen (z. B. JSON, XML) übertragen.
- Schichtenarchitektur: System kann aus mehreren Schichten bestehen (z. B. Load Balancer, Caches, Gateways).
Beispiel für REST-API¶
GET /api/users → Liste aller Nutzer
GET /api/users/42 → Details von Nutzer mit ID 42
POST /api/users → Neuen Nutzer anlegen
PUT /api/users/42 → Nutzer 42 aktualisieren
DELETE /api/users/42 → Nutzer 42 löschen
Vorteile von REST¶
- Leichtgewichtig (insbesondere mit JSON)
- Einfach verständlich
- Gut test- und debugbar
- Skalierbar
- Breite Unterstützung in Webtechnologien
Nachteile von REST¶
- Keine standardisierte Beschreibung wie bei SOAP (es gibt jedoch OpenAPI/Swagger)
- Sicherheits- und Transaktionsanforderungen müssen manuell definiert werden
- Weniger geeignet für komplexe Operationen und Standardisierung
Was ist JSON?¶
JSON steht für JavaScript Object Notation und ist ein leichtgewichtiges Datenformat, das Menschen gut lesen und Maschinen leicht verarbeiten können. Es wird oft für den Datenaustausch zwischen Server und Client verwendet – zum Beispiel bei Web APIs.
Aufbau¶
JSON stellt Daten in Schlüssel-Wert-Paaren dar und ähnelt dabei den Objekten in JavaScript. Es unterstützt:
- Zeichenketten (
string
) - Zahlen
- Wahrheitswerte (
true
/false
) - Arrays (Listen)
- Objekte (geschachtelte Strukturen)
null
-Werte
Beispiel:¶
{
"id": 1,
"title": "Hello World",
"completed": false,
"tags": ["json", "api", "example"]
}
Typische Einsatzgebiete¶
- Web APIs (z. B. REST)
- Konfigurationsdateien
- Datenübertragung in Webanwendungen und mobilen Apps
JSON ist heute eines der am weitesten verbreiteten Formate für Daten im Web – weil es einfach, klar strukturiert und in nahezu jeder Programmiersprache nutzbar ist.
SOAP (Simple Object Access Protocol)¶
Was ist SOAP?¶
SOAP ist ein standardisiertes Protokoll für den Nachrichtenaustausch, das auf XML basiert und für komplexere Enterprise-Anwendungen entwickelt wurde. Es war lange der De-facto-Standard für Webservices, vor allem in Unternehmensumgebungen.
Eigenschaften von SOAP¶
- XML-basiert: Alle Nachrichten werden als XML-Dokumente übertragen.
- Streng standardisiert: SOAP ist eng definiert durch WSDL (Web Services Description Language) und verwendet standardisierte Protokolle für Sicherheit, Transaktionen und Routing.
- Transportprotokoll-unabhängig: Kann über HTTP, SMTP, JMS, etc. kommunizieren (häufig jedoch HTTP).
- Envelope-Struktur: Jede Nachricht besteht aus einem Envelope, Header und Body.
Beispiel SOAP-Request (verkürzt)¶
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ex="http://example.com/">
<soapenv:Header/>
<soapenv:Body>
<ex:GetUser>
<ex:UserId>42</ex:UserId>
</ex:GetUser>
</soapenv:Body>
</soapenv:Envelope>
Vorteile von SOAP¶
- Sehr formell und standardisiert
- Unterstützt komplexe Sicherheit (WS-Security), Transaktionen, Routing, etc.
- Gute Integration mit Unternehmenssystemen (z. B. .NET, Java EE)
- Beschreibung durch WSDL für automatische Generierung von Clients/Servern
Nachteile von SOAP¶
- Komplexität und Overhead durch XML
- Weniger geeignet für einfache Web-APIs
- Schwerer zu debuggen (wegen verschachtelter XML-Strukturen)
- Geringere Performance (langsamer als REST)
REST vs. SOAP – Vergleichstabelle¶
Merkmal | REST | SOAP |
---|---|---|
Stil | Architekturstil | Protokoll |
Datenformat | Beliebig (meist JSON oder XML) | XML |
Standardisierung | Locker (z. B. mit OpenAPI) | Stark (WSDL, WS-*) |
Sicherheit | HTTPS, OAuth, JWT | WS-Security |
Transaktionen | Nicht nativ | Ja, z. B. ACID möglich |
Performance | Leichtgewichtig, schneller | Schwergewichtiger, langsamer |
Komplexe Workflows | Nicht direkt unterstützt | Besser geeignet |
Verbreitung | Modernes Web, Mobile, Microservices | Enterprise-Anwendungen, B2B |
Wann solltest du REST oder SOAP verwenden?¶
Situation | Empfehlung |
---|---|
Mobile App oder Web App | REST |
Einfache CRUD-APIs | REST |
Integration mit alten Unternehmenssystemen | SOAP |
Sicherheit auf Nachrichtenniveau notwendig | SOAP |
Du brauchst Transaktionen oder Messaging | SOAP |
Du willst eine leichtgewichtige API | REST |
Du willst eine stark beschriebene API (WSDL) | SOAP |
Begriffe und Abkürzungen¶
HTTP-bezogene Begriffe¶
Abkürzung | Bedeutung | Erklärung |
---|---|---|
HTTP | HyperText Transfer Protocol | Protokoll für die Kommunikation im Web, z. B. für Webseiten oder APIs. |
URI | Uniform Resource Identifier | Eine eindeutige Adresse für eine Ressource (z. B. https://example.com/api/users/42 ). |
URL | Uniform Resource Locator | Spezielle Form eines URI, die auch das Protokoll und den Pfad enthält. |
GET | - | HTTP-Methode, um Daten abzurufen. |
POST | - | HTTP-Methode, um neue Daten zu senden/erstellen. |
PUT | - | HTTP-Methode, um Daten vollständig zu aktualisieren. |
DELETE | - | HTTP-Methode, um Daten zu löschen. |
PATCH | - | HTTP-Methode, um Daten teilweise zu aktualisieren. |
REST/SOAP/Architektur¶
Abkürzung | Bedeutung | Erklärung |
---|---|---|
REST | Representational State Transfer | Architekturstil für APIs auf Basis von HTTP. |
SOAP | Simple Object Access Protocol | XML-basiertes Protokoll für Webservices. |
API | Application Programming Interface | Schnittstelle, über die Software miteinander kommuniziert. |
WSDL | Web Services Description Language | XML-basierte Beschreibung von SOAP-Webservices. |
JSON | JavaScript Object Notation | Leichtgewichtiges, lesbares Format zur Darstellung von Daten. |
XML | eXtensible Markup Language | Format zur Darstellung hierarchischer Daten, maschinenlesbar. |
CRUD | Create, Read, Update, Delete | Grundoperationen bei Datenzugriffen über APIs. |
ACID | Atomicity, Consistency, Isolation, Durability | Eigenschaften von sicheren Transaktionen in Datenbanken. |
Sicherheit & Standards¶
Abkürzung | Bedeutung | Erklärung |
---|---|---|
HTTPS | HyperText Transfer Protocol Secure | Verschlüsseltes HTTP-Protokoll. |
OAuth | Open Authorization | Standard zur sicheren API-Autorisierung (z. B. via Google Login). |
JWT | JSON Web Token | Token-Format zur sicheren Authentifizierung und Autorisierung. |
WS-Security | Web Services Security | Standard für Sicherheit bei SOAP-Webservices. |
Technik & Tools¶
Abkürzung | Bedeutung | Erklärung |
---|---|---|
JMS | Java Message Service | API für Messaging zwischen Java-Anwendungen. |
SMTP | Simple Mail Transfer Protocol | Protokoll zum Versand von E-Mails. |
WAF | Web Application Firewall | Schutzmechanismus für Webanwendungen gegen Angriffe. |
Beispiel mit JSONPlaceholder¶
JSONPlaceholder?¶
https://jsonplaceholder.typicode.com ist eine kostenlose Fake-Online-API zum Testen und Prototypen. Sie simuliert typische REST-Endpunkte wie:
Ressource | Beschreibung |
---|---|
/posts |
Blogbeiträge |
/comments |
Kommentare |
/users |
Benutzer |
Beispiel:
GET https://jsonplaceholder.typicode.com/posts/1
liefert einen Blogbeitrag im JSON-Format.
Was ist curl
?¶
curl
ist ein Kommandozeilenwerkzeug, mit dem du HTTP-Anfragen (und viele andere Protokolle) direkt im Terminal senden kannst. Es ist ideal zum Testen von APIs, Debugging oder zum Automatisieren von Datenabfragen.
📦 Beispiel: JSONPlaceholder mit curl
verwenden¶
🔍 Ziel: Den ersten Blogpost abrufen¶
#!pwsh
curl https://jsonplaceholder.typicode.com/posts/1
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 { 100 292 100 292 0 0 481 0 --:--:-- --:--:-- --:--:-- 481 "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }
📝 Beispiel: Einen neuen Blogpost erstellen (POST)¶
#!pwsh
curl -X POST https://jsonplaceholder.typicode.com/posts `
-H "Content-Type: application/json" `
-d '{"title": "Hallo Welt", "body": "Dies ist ein Test.", "userId": 1}'
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 153 100 87 100 66 140 106 --:--:-- --:--:-- --:--:-- 246 { "title": "Hallo Welt", "body": "Dies ist ein Test.", "userId": 1, "id": 101 }
🔄 Erklärung:¶
-X POST
: MethodePOST
verwenden-H
: Header mitgeben (hier:Content-Type: application/json
)-d
: Daten (JSON-String) im Request-Body
JSONPlaceholder speichert die Daten nicht dauerhaft, gibt aber eine simulierte Antwort zurück.
JSONPlaceholder API mit C#¶
💡 Tipp: JSON automatisch in Klassen umwandeln¶
Nutze z. B. https://json2csharp.com – dort kannst du JSON einfügen und erhältst passende C#-Klassen. Hiermit kann man aus der Dokumentation von JSONPlaceholder die Klassen generieren.
Die Datenklasse Post
¶
public class Post
{
public int userId { get; set; }
public int id { get; set; }
public string title { get; set; }
public string body { get; set; }
}
Beispiel: Auslesen des ersten Blogposts¶
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
// 1. HttpClient erzeugen
HttpClient client = new HttpClient();
// 2. URL zur JSONPlaceholder API
string url = "https://jsonplaceholder.typicode.com/posts/1";
// 3. GET-Request senden
HttpResponseMessage response = await client.GetAsync(url);
// 4. Statuscode prüfen
if (response.IsSuccessStatusCode)
{
// 5. JSON-Inhalt als String lesen
string json = await response.Content.ReadAsStringAsync();
// 6. JSON in ein Objekt deserialisieren
Post post = JsonSerializer.Deserialize<Post>(json);
// 7. Ausgabe
Console.WriteLine($"Titel: {post.title}");
Console.WriteLine($"Inhalt: {post.body}");
}
else
{
Console.WriteLine($"Fehler: {response.StatusCode}");
}
Titel: sunt aut facere repellat provident occaecati excepturi optio reprehenderit Inhalt: quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto
Was passiert hier genau?¶
🔢 1. HttpClient
¶
Ein Objekt, mit dem du HTTP-Requests senden kannst – z. B. GET, POST.
🌐 2. URL¶
Wir rufen https://jsonplaceholder.typicode.com/posts/1
auf – das ist der erste Blogpost.
📩 3. GetAsync()
¶
Sendet asynchron eine GET-Anfrage.
📦 4. Statuscode prüfen¶
Nur wenn IsSuccessStatusCode == true
, geht es weiter.
📜 5. JSON als String lesen¶
Die Antwort wird als String eingelesen.
🧰 6. JSON → C#-Objekt¶
JsonSerializer.Deserialize<Post>(json)
macht aus dem JSON-Text ein Post
-Objekt.
🖨 7. Ausgabe¶
Wir geben Title
und Body
aus.
Nächster Schritt: Alle Posts laden¶
string url = "https://jsonplaceholder.typicode.com/posts";
HttpResponseMessage response = await client.GetAsync(url);
string json = await response.Content.ReadAsStringAsync();
List<Post> posts = JsonSerializer.Deserialize<List<Post>>(json);
Dann kannst du z. B. alle Titel ausgeben:
foreach (var post in posts)
{
Console.WriteLine($"{post.id}: {post.title}");
}
1: sunt aut facere repellat provident occaecati excepturi optio reprehenderit 2: qui est esse 3: ea molestias quasi exercitationem repellat qui ipsa sit aut 4: eum et est occaecati 5: nesciunt quas odio 6: dolorem eum magni eos aperiam quia 7: magnam facilis autem 8: dolorem dolore est ipsam 9: nesciunt iure omnis dolorem tempora et accusantium 10: optio molestias id quia eum 11: et ea vero quia laudantium autem 12: in quibusdam tempore odit est dolorem 13: dolorum ut in voluptas mollitia et saepe quo animi 14: voluptatem eligendi optio 15: eveniet quod temporibus 16: sint suscipit perspiciatis velit dolorum rerum ipsa laboriosam odio 17: fugit voluptas sed molestias voluptatem provident 18: voluptate et itaque vero tempora molestiae 19: adipisci placeat illum aut reiciendis qui 20: doloribus ad provident suscipit at 21: asperiores ea ipsam voluptatibus modi minima quia sint 22: dolor sint quo a velit explicabo quia nam 23: maxime id vitae nihil numquam 24: autem hic labore sunt dolores incidunt 25: rem alias distinctio quo quis 26: est et quae odit qui non 27: quasi id et eos tenetur aut quo autem 28: delectus ullam et corporis nulla voluptas sequi 29: iusto eius quod necessitatibus culpa ea 30: a quo magni similique perferendis 31: ullam ut quidem id aut vel consequuntur 32: doloremque illum aliquid sunt 33: qui explicabo molestiae dolorem 34: magnam ut rerum iure 35: id nihil consequatur molestias animi provident 36: fuga nam accusamus voluptas reiciendis itaque 37: provident vel ut sit ratione est 38: explicabo et eos deleniti nostrum ab id repellendus 39: eos dolorem iste accusantium est eaque quam 40: enim quo cumque 41: non est facere 42: commodi ullam sint et excepturi error explicabo praesentium voluptas 43: eligendi iste nostrum consequuntur adipisci praesentium sit beatae perferendis 44: optio dolor molestias sit 45: ut numquam possimus omnis eius suscipit laudantium iure 46: aut quo modi neque nostrum ducimus 47: quibusdam cumque rem aut deserunt 48: ut voluptatem illum ea doloribus itaque eos 49: laborum non sunt aut ut assumenda perspiciatis voluptas 50: repellendus qui recusandae incidunt voluptates tenetur qui omnis exercitationem 51: soluta aliquam aperiam consequatur illo quis voluptas 52: qui enim et consequuntur quia animi quis voluptate quibusdam 53: ut quo aut ducimus alias 54: sit asperiores ipsam eveniet odio non quia 55: sit vel voluptatem et non libero 56: qui et at rerum necessitatibus 57: sed ab est est 58: voluptatum itaque dolores nisi et quasi 59: qui commodi dolor at maiores et quis id accusantium 60: consequatur placeat omnis quisquam quia reprehenderit fugit veritatis facere 61: voluptatem doloribus consectetur est ut ducimus 62: beatae enim quia vel 63: voluptas blanditiis repellendus animi ducimus error sapiente et suscipit 64: et fugit quas eum in in aperiam quod 65: consequatur id enim sunt et et 66: repudiandae ea animi iusto 67: aliquid eos sed fuga est maxime repellendus 68: odio quis facere architecto reiciendis optio 69: fugiat quod pariatur odit minima 70: voluptatem laborum magni 71: et iusto veniam et illum aut fuga 72: sint hic doloribus consequatur eos non id 73: consequuntur deleniti eos quia temporibus ab aliquid at 74: enim unde ratione doloribus quas enim ut sit sapiente 75: dignissimos eum dolor ut enim et delectus in 76: doloremque officiis ad et non perferendis 77: necessitatibus quasi exercitationem odio 78: quam voluptatibus rerum veritatis 79: pariatur consequatur quia magnam autem omnis non amet 80: labore in ex et explicabo corporis aut quas 81: tempora rem veritatis voluptas quo dolores vero 82: laudantium voluptate suscipit sunt enim enim 83: odit et voluptates doloribus alias odio et 84: optio ipsam molestias necessitatibus occaecati facilis veritatis dolores aut 85: dolore veritatis porro provident adipisci blanditiis et sunt 86: placeat quia et porro iste 87: nostrum quis quasi placeat 88: sapiente omnis fugit eos 89: sint soluta et vel magnam aut ut sed qui 90: ad iusto omnis odit dolor voluptatibus 91: aut amet sed 92: ratione ex tenetur perferendis 93: beatae soluta recusandae 94: qui qui voluptates illo iste minima 95: id minus libero illum nam ad officiis 96: quaerat velit veniam amet cupiditate aut numquam ut sequi 97: quas fugiat ut perspiciatis vero provident 98: laboriosam dolor voluptates 99: temporibus sit alias delectus eligendi possimus magni 100: at nam consequatur ea labore ea harum