Skip to content

Tag 10: HTTP, Spring

Alp387 edited this page Mar 13, 2023 · 9 revisions

HTTP

HTTP steht für Hypertext Transfer Protocol. Mithilfe dieses Protokolls lassen sich Daten in einem Netzwerk übertragen. HTTP funktioniert nach dem sogenannten Client-Server-Prinzip. Die Daten werden zwischen einem Webserver und einem Webbrowser (auch Client genannt) übertragen.

HTTP hat unter anderem folgende Methoden: • GET (Abfrage) • POST (Hinzufügen) • PUT (Hinzufügen/Ersetzen) • PATCH (Ändern) • DELETE (Löschen)

URL

Der Begriff URL ist ein Akronym der Bezeichnung "Uniform Resource Locator". Damit wird eine Adresse bezeichnet, die einen Pfad zu einer bestimmten Datei auf einem Server angibt. Auf diese Quelle kann über ein Netzwerkprotokoll wie http, https oder ftp zugegriffen werden.

Beispiel:

image

Man kann über HTTP Daten senden und empfangen. Ein GET Request hat keinen Body. Der Response aber schon. Der Header übermittelt wichtige Parameter und Argumente für die Übertragung von Dateien, z.B. gewünschte Sprache oder andere Informationen.

JSON (JavaScript Object Notation)

JSON ist ein Datenformat in einer einfachen lesbaren Textform für den Datenaustausch zwischen Anwendungen.

image

Postman

Mit Postman kann man unter anderem APIs testen. APIs sind Programmierschnittstellen, mit denen man mit externen Systemen interagieren kann. Anhand der Rick und Morty API kann man Abfragen testen. Für die Abfrage brauchen wir den entsprechenden Link.

Wir können links neben der URL unsere HTTP Methode auswählen und darunter die Parameter eingeben:

image

Spring

Ist ein Quelloffenes Framework für die Java Plattform seit 2002. Damit soll die Entwicklung einfacher gemacht werden. Bietet viele Bibliotheken von Modulen an und mehr.

Auf der Seite https://start.spring.io können wir neue Projekte aufsetzen. In Intellij wählen wir unter Generators dann Spring Initializr und wählen dann als Type Maven aus: image

Als nächstes setzen wir unter Dependencies -> Web -> Spring Web einen Haken und erstellen das neue Web-Projekt.

NewProjectSpringWeb

Spring sorgt dafür, dass das Rad nicht jedes Mal neu erfunden werden muss und hilft uns dabei das Leben zu erleichtern. Zu sehen ist, dass eine ausführbare Web-Applikation mit der Klasse DemoApplication erstellt wurde. Annotationen haben wir bereits bei JUnit Tests kennengelernt. Durch die Markierung @ wie bspw. @SpringBootApplication, @GetMapping oder @PathVariable erkennt das Programm "Anmerkungen" an Klassen, Methoden oder Variablen. Spring macht "magisches" intelligenten Verhalten mit Annotationen möglich.

NewProjectDemoApplication

Um den Rahmen dieses Protokolls nicht zu sprengen, wird nicht auf die Begriffe REST und REST-API eingegangen.

Wir erstellen eine neue Klasse TestController mit den Annotationen @RestController sowie @RequestMapping. Anhand dieser Klasse können wir REST Endpunkte bereitstellen. Der String ("/test") rechts neben der Annotation @RequestMapping gibt den Pfad an (http://localhost:8080/test). Die Annotation @GetMapping stellt Get REST Endpunkte bereit und ruft in der Regel eine Service-Methode auf, wie bspw. die getGreetings()-Methode unten. Auf die Get Anfrage erhalten wir in der Regel ein JSON Objekt zurück.

package com.example.demo;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/de")
    public String getGreetings() {
        return "Hello World!";
    }




}


Wir können dann über den Localhost:8080 und dem entsprechenden Mapping das Programm sehen:

image Wenn wir einen Schritt weitergehen und die Aufgabe Ordersystem zu einer Web-Applikation erweitern, hätten wir folgende REST-Controller-Klasse, die für das Mapping zuständig ist:

ShopController

Schicken wir ein Get-Request bei Postman mit folgender URL http://localhost:8080/api/products erhalten solch eine Antwort in JSON-Format.

Mit der Annotation @PathVariable können spezifische Get Anfragen gestellt werden. Die Annotation wird vor einem Parameter eingesetzt.

@GetMapping("/products/{id}")           
    public Product getProducts(@PathVariable String id) {
        return shopService.getProduct(id);
    }

Clone this wiki locally