In der Entwicklung von RESTful Webservices werden verschiedene HTTP-Methoden verwendet, um mit den Ressourcen einer Anwendung zu interagieren. Jede Methode hat eine spezifische Bedeutung und Funktion, um eine Aktion auf eine Ressource auszuführen, wie das Abrufen, Erstellen, Aktualisieren oder Löschen. In diesem Kapitel erläutern wir die gängigen HTTP-Methoden (GET, POST, PUT, DELETE) und wie sie in Spring Boot REST Services implementiert werden.
Die GET-Methode wird verwendet, um Ressourcen von einem
Server abzurufen. Eine GET-Anfrage sollte keine
Seiteneffekte auf dem Server haben und daher
zustandslos und idempotent sein. Das
bedeutet, dass der Aufruf der gleichen GET-Anfrage mehrfach keine
Änderungen auf dem Server bewirken sollte.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@GetMapping("/products")
public List<Product> getAllProducts() {
// Hier wird die Liste der Produkte zurückgegeben
return productService.getAllProducts();
}
}In diesem Beispiel wird die Methode getAllProducts()
verwendet, um eine Liste von Produkten über eine GET-Anfrage an die URL
/products zurückzugeben.
Die POST-Methode wird verwendet, um eine neue Ressource
auf dem Server zu erstellen. Im Gegensatz zu GET erzeugt
POST Seiteneffekte, da neue Daten auf dem Server
gespeichert werden. Eine typische Verwendung von POST ist
das Erstellen eines neuen Datensatzes.
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@PostMapping("/products")
public Product createProduct(@RequestBody Product product) {
// Hier wird ein neues Produkt erstellt
return productService.saveProduct(product);
}
}In diesem Beispiel erstellt die Methode createProduct()
ein neues Produkt, indem die Daten über eine POST-Anfrage gesendet und
als @RequestBody empfangen werden.
Die PUT-Methode wird verwendet, um eine vorhandene
Ressource vollständig zu aktualisieren. Sie ist ebenfalls
idempotent, d.h. das mehrfache Ausführen einer
PUT-Anfrage mit denselben Daten hat den gleichen Effekt wie das
einmalige Ausführen.
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@PutMapping("/products/{id}")
public Product updateProduct(@PathVariable Long id, @RequestBody Product product) {
// Hier wird ein vorhandenes Produkt mit neuen Daten aktualisiert
return productService.updateProduct(id, product);
}
}In diesem Beispiel wird das Produkt mit der angegebenen ID durch eine
PUT-Anfrage an die URL /products/{id} vollständig
aktualisiert.
Die DELETE-Methode wird verwendet, um eine Ressource vom
Server zu löschen. Wie GET und PUT sollte
DELETE idempotent sein, d.h. das wiederholte Senden einer
DELETE-Anfrage sollte das gleiche Ergebnis haben.
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@DeleteMapping("/products/{id}")
public void deleteProduct(@PathVariable Long id) {
// Hier wird ein Produkt basierend auf der ID gelöscht
productService.deleteProduct(id);
}
}In diesem Beispiel löscht die Methode deleteProduct()
das Produkt mit der angegebenen ID von der Ressource.
Zusätzlich zu den oben genannten Methoden gibt es noch andere HTTP-Methoden, die seltener in RESTful APIs verwendet werden:
Die PATCH-Methode wird verwendet, um Teile einer
Ressource zu aktualisieren, im Gegensatz zu PUT,
das die gesamte Ressource aktualisiert. PATCH wird
verwendet, wenn nur bestimmte Felder einer Ressource geändert werden
müssen.
Die HEAD-Methode ist ähnlich wie GET,
jedoch gibt sie nur die Header-Informationen zurück, ohne den
eigentlichen Inhalt der Ressource. Sie wird verwendet, um Metadaten zu
einer Ressource abzurufen, z.B. um zu prüfen, ob eine Ressource
existiert, bevor eine vollständige GET-Anfrage gestellt wird.
Die OPTIONS-Methode gibt Informationen darüber zurück,
welche HTTP-Methoden von einem bestimmten Endpunkt unterstützt werden.
Diese Methode ist nützlich, um herauszufinden, welche Interaktionen mit
einer Ressource möglich sind.
Die TRACE-Methode dient hauptsächlich zu
Debugging-Zwecken. Sie sendet die HTTP-Anfrage zurück, so wie sie
empfangen wurde, und wird verwendet, um die Route der Anfrage zu
verfolgen.
GET, PUT, DELETE und
HEAD sind idempotent.GET
und HEAD sind sicher, da sie keine Daten auf dem Server
verändern. Im Gegensatz dazu sind POST, PUT
und DELETE nicht sicher, da sie Daten ändern können.| Methode | Beschreibung | Idempotent | Sicher |
|---|---|---|---|
| GET | Ressource abrufen | Ja | Ja |
| POST | Ressource erstellen | Nein | Nein |
| PUT | Ressource vollständig aktualisieren | Ja | Nein |
| DELETE | Ressource löschen | Ja | Nein |
| PATCH | Ressource teilweise aktualisieren | Nein | Nein |
| HEAD | Metadaten der Ressource abrufen | Ja | Ja |
| OPTIONS | Unterstützte Methoden abfragen | Ja | Ja |
| TRACE | Anfrage zurückverfolgen | Ja | Ja |
Die Wahl der richtigen HTTP-Methode ist entscheidend für die
semantische Korrektheit einer REST-API. Die Methoden GET,
POST, PUT und DELETE bilden das
Rückgrat der meisten RESTful Webservices und ermöglichen die
CRUD-Operationen (Create, Read, Update, Delete) für Ressourcen. Spring
Boot bietet eine einfache und intuitive Möglichkeit, diese Methoden
durch Annotationen wie @GetMapping,
@PostMapping, @PutMapping und
@DeleteMapping zu implementieren, was die Entwicklung von
RESTful APIs erleichtert.