36 Umgang mit curl

curl ist ein weit verbreitetes und leistungsfähiges Kommandozeilenwerkzeug, das zum Übertragen von Daten mit URLs verwendet wird. In der Entwicklung von REST-APIs ist curl nützlich, um HTTP-Anfragen direkt von der Kommandozeile aus zu testen, ohne dass zusätzliche Software benötigt wird. In diesem Kapitel wird gezeigt, wie man curl verwendet, um REST-APIs in einer Spring Boot-Anwendung zu testen und zu debuggen.

36.1 Installation von curl

In den meisten Linux-Distributionen und macOS ist curl bereits vorinstalliert. Für Windows oder wenn curl nicht verfügbar ist, kann es über die Paketverwaltung installiert werden:

36.2 HTTP-Anfragen mit curl

36.2.1 1. GET-Anfragen

Mit einer GET-Anfrage werden Daten von einem Server abgerufen. In einer REST-API wird diese Methode verwendet, um eine Liste von Ressourcen oder eine bestimmte Ressource zu erhalten.

36.2.1.1 Beispiel: GET-Anfrage

curl http://localhost:8080/products

Dieses Kommando sendet eine GET-Anfrage an die URL /products und gibt die Antwort in der Konsole aus.

36.2.1.2 GET-Anfrage mit Parametern

Bei einer GET-Anfrage können auch Parameter über die URL übermittelt werden:

curl "http://localhost:8080/products?category=electronics"

Dies sendet eine Anfrage mit einem Parameter category=electronics und gibt nur Produkte dieser Kategorie zurück.

36.2.2 2. POST-Anfragen

Die POST-Methode wird verwendet, um eine neue Ressource auf dem Server zu erstellen. Mit curl kann eine POST-Anfrage gesendet werden, indem Daten als JSON oder andere Formate übermittelt werden.

36.2.2.1 Beispiel: POST-Anfrage mit JSON-Daten

curl -X POST http://localhost:8080/products \
     -H "Content-Type: application/json" \
     -d '{"name": "Laptop", "price": 1200}'

In diesem Beispiel wird eine POST-Anfrage an die URL /products gesendet, um ein neues Produkt (einen Laptop) zu erstellen. Die Option -X POST gibt an, dass es sich um eine POST-Anfrage handelt, -H setzt den Content-Type auf application/json, und -d übermittelt die JSON-Daten als Anfragekörper.

36.2.3 3. PUT-Anfragen

Mit der PUT-Methode können bestehende Ressourcen vollständig aktualisiert werden. Die Syntax ähnelt der POST-Anfrage, allerdings wird die Ressource, die aktualisiert werden soll, über die URL identifiziert.

36.2.3.1 Beispiel: PUT-Anfrage

curl -X PUT http://localhost:8080/products/1 \
     -H "Content-Type: application/json" \
     -d '{"name": "Laptop", "price": 1100}'

Hier wird eine PUT-Anfrage gesendet, um das Produkt mit der ID 1 zu aktualisieren. Der Preis des Produkts wird auf 1100 geändert.

36.2.4 4. DELETE-Anfragen

Die DELETE-Methode wird verwendet, um eine Ressource auf dem Server zu löschen.

36.2.4.1 Beispiel: DELETE-Anfrage

curl -X DELETE http://localhost:8080/products/1

Diese Anfrage löscht das Produkt mit der ID 1 aus der Datenbank.

36.2.5 5. Senden von Headern

Zusätzliche Header können mit der Option -H zu einer Anfrage hinzugefügt werden. Dies ist nützlich, wenn z.B. Authentifizierungsinformationen oder spezielle Header benötigt werden.

36.2.5.1 Beispiel: Header hinzufügen

curl -H "Authorization: Bearer mytoken123" http://localhost:8080/secure/products

In diesem Beispiel wird ein Autorisierungstoken als Header an die Anfrage angehängt.

36.2.6 6. Antwortdaten speichern

Die Ausgabe einer curl-Anfrage kann in einer Datei gespeichert werden, anstatt sie direkt auf der Konsole anzuzeigen.

36.2.6.1 Beispiel: Antwort speichern

curl http://localhost:8080/products -o products.json

Dieses Kommando speichert die Antwort in einer Datei products.json im aktuellen Verzeichnis.

36.2.7 7. Verwendung von curl für Authentifizierung

Oft erfordern REST-APIs eine Authentifizierung. Mit curl können Sie verschiedene Authentifizierungsmechanismen wie Basic Auth, Bearer Tokens oder API-Schlüssel verwenden.

36.2.7.1 Beispiel: Basic Auth

curl -u username:password http://localhost:8080/private/products

Mit der Option -u wird die HTTP Basic Authentication verwendet, wobei der Benutzername und das Passwort in der Anfrage gesendet werden.

36.2.7.2 Beispiel: Bearer Token

curl -H "Authorization: Bearer your_token_here" http://localhost:8080/private/products

In diesem Fall wird ein Bearer-Token zur Authentifizierung verwendet.

36.2.8 8. Fehlerbehandlung mit curl

Bei der Verwendung von curl können auch HTTP-Statuscodes und Fehlermeldungen ausgegeben werden. Um die vollständige Antwort inklusive HTTP-Headern zu sehen, kann die Option -i verwendet werden:

curl -i http://localhost:8080/products

Dadurch werden sowohl die HTTP-Header als auch der Antwortkörper angezeigt. Dies ist nützlich, um den Statuscode und eventuelle Fehlermeldungen zu prüfen.

36.3 Komplexere curl-Beispiele

36.3.1 Mehrere Header hinzufügen

Wenn eine Anfrage mehrere Header benötigt, können diese einfach mit mehreren -H-Optionen hinzugefügt werden:

curl -X POST http://localhost:8080/products \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer your_token_here" \
     -d '{"name": "Smartphone", "price": 799}'

36.3.2 Nutzung von curl in Shell-Skripten

curl kann in Shell-Skripten verwendet werden, um automatisierte Tests für Ihre REST-API durchzuführen. Hier ein Beispiel-Skript:

#!/bin/bash
# Produkt erstellen
curl -X POST http://localhost:8080/products \
     -H "Content-Type: application/json" \
     -d '{"name": "Tablet", "price": 500}' -o response.json

# Ausgabe des erstellten Produkts
cat response.json

Dieses Skript erstellt ein neues Produkt und speichert die Antwort in einer Datei response.json.

36.4 tl;dr

curl ist ein unverzichtbares Werkzeug für das Testen und Debuggen von REST-APIs. Es ermöglicht Entwicklern, HTTP-Anfragen direkt von der Kommandozeile aus zu senden, ohne eine GUI zu verwenden. Durch die Unterstützung von GET, POST, PUT, DELETE und anderen HTTP-Methoden können Sie mit curl REST-Services in einer Spring Boot-Anwendung effizient testen. In Kombination mit Headern, Authentifizierungen und der Möglichkeit, Daten zu speichern, ist curl ein äußerst flexibles Werkzeug in der API-Entwicklung.