Vorbereitung auf die Spring Professional-Zertifizierung. Frühlingsruhe

Der heutige Artikel behandelt die grundlegenden Fragen zu REST im Frühjahr. Es ist besonders nützlich für unerfahrene Programmierer.


Der offizielle Leitfaden von Pivotal, der über Themen zur Vorbereitung berichtet.



Inhaltsverzeichnis
  1. Abhängigkeitsinjektion, Container, IoC, Bohnen
  2. AOP (aspektorientierte Programmierung)
  3. JDBC, Transaktionen, JPA, Federdaten
  4. Frühlingsstiefel
  5. Frühling mvc
  6. Frühlingssicherheit
  7. RUHE
  8. Testen



Spring REST ist Teil von Spring MVC. Daher wird ein Großteil von Spring MVC in REST verwendet und umgekehrt. Lesen Sie diesen Artikel , um Spring MVC genauer zu betrachten.


Wofür wurde REST erstellt?

Um das Konzept von REST zu verstehen, müssen Sie das Akronym in seine Komponenten zerlegen:


  • Repräsentativ - Ressourcen in REST können in jeder Form dargestellt werden - JSON, XML, Text oder sogar HTML - hängt davon ab, welche Daten für den Verbraucher besser geeignet sind
  • Status - Wenn Sie mit REST arbeiten, sollten Sie sich auf den Status der Ressource konzentrieren und nicht auf Aktionen mit der Ressource
  • Übertragung - REST umfasst die Übertragung von Ressourcendaten in beliebiger Form von einer Anwendung zu einer anderen.

REST ist die Übertragung von Ressourcenzuständen zwischen einem Server und einem Client.


Was ist eine Ressource?

Eine Ressource in REST ist alles, was zwischen einem Client und einem Server übertragen werden kann.
Hier einige Beispiele für Ressourcen:


  • Nachrichten
  • Temperatur in St. Petersburg am Montag um 4 Uhr morgens
  • Mitarbeitergehalt
  • Datenbankauswahl
  • Suchergebnis

Wofür steht CRUD?

Aktionen in REST werden durch http-Methoden bestimmt.
Get , Post , Put , Delete , Patch und andere.


Die am häufigsten verwendeten werden mit dem Akronym CRUD bezeichnet:


  • Erstellen - POST
  • Lesen - GET
  • Update - PUT
  • Löschen - DELETE

Ist REST sicher? Wie kannst du ihn beschützen?

Standardmäßig ist REST nicht sicher.


Sie können die Sicherheit mit Basic Auth, JWT, OAuth2 konfigurieren

.
Was sind Speichervorgänge?

Dies sind Vorgänge, bei denen keine Ressourcen geändert werden. Hier ist eine Liste von ihnen:


  • Holen Sie sich
  • KOPF
  • OPTIONEN

Was ist eine idempotente Operation? Warum ist Idempotenz wichtig?

Idempotente Methoden sind Methoden, bei denen jeder Aufruf das gleiche Ergebnis erzielt.


Das heißt, das Ergebnis nach 1 Aufruf einer solchen Methode ist das gleiche wie das Ergebnis nach 10 Aufrufen dieser Methode.


Dies ist wichtig für eine fehlertolerante API. Angenommen, ein Client möchte eine Ressource mithilfe einer POST-Anforderung aktualisieren. Wenn POST keine idempotente Methode ist, führt ein Mehrfachaufruf zu unerwarteten Ressourcenaktualisierungen. Mit idempotenten Methoden schützen Sie sich vor vielen Fehlern.


Skaliert REST gut?

Ja REST lässt sich gut skalieren, da der Status nicht gespeichert wird.


Dies bedeutet, dass keine Benutzersitzungsinformationen auf dem Server gespeichert werden.


Client-Informationen sollten nicht auf der Serverseite gespeichert werden, sondern jedes Mal an den Ort übertragen werden, an dem sie benötigt werden. Dies ist, was ST in REST, State Transfer bedeutet. Sie übergeben den Status und speichern ihn nicht auf dem Server.


REST ist auch interoperabel - dies bedeutet, dass verschiedene Programme, die in verschiedenen Sprachen geschrieben sind, darauf interagieren können. Dies kommt von 2 Faktoren:


  • Interoperable HTTP-Clients. Verschiedene Clients müssen dieselben http-Anforderungen senden.
  • Interoperabilität auf der Ebene der Medientypen. Verschiedene Clients müssen dieselben Ressourcen korrekt senden und empfangen.

Was ist ein HttpMessageConverter?

HttpMessageConverter konvertiert die Anforderung in ein Objekt und umgekehrt.


Spring hat mehrere Implementierungen dieser Schnittstelle, und Sie können Ihre eigenen erstellen.


In diesem Fall verwendet DispatcherServlet Model und View nicht.


In REST sind Modell und Ansicht überhaupt nicht vorhanden. Es gibt nur die vom Controller bereitgestellten Daten und die Darstellung der Ressource, wenn die Nachricht von einem Medientyp (json, xml ...) in ein Objekt konvertiert wird.


Konverterliste:


BufferedImageHttpMessageConverter - Konvertiert ein BufferedImage in (von) Bildcode.


Jaxb2RootElementHttpMessageConverter - konvertiert XML in (von) ein Objekt, das mit jaxb2-Annotationen markiert ist. Registrieren Sie sich, wenn sich jaxb2 im Klassenpfad befindet.


MappingJackson2HttpMessageConverter - konvertiert JSON in (von) einem Objekt. Registrieren Sie sich, wenn Jackson 2 im Klassenpfad ist.


StringHttpMessageConverter - konvertiert alle Mediendateien in Text / Plain.


Wie funktioniert die Annotation @RestController?

@RestController wird anstelle von @Controller in die Controller-Klasse @Controller . Sie weist darauf hin, dass diese Klasse nicht mit Modellen, sondern mit Daten arbeitet. Es besteht aus den @RequestBody @Controller und @RequestBody .


 @Controller @ResponseBody public interface RestController 

Warum @ResponseBody?

Die @ResponseBody sich auf Methoden, die mit Daten arbeiten, nicht mit Modellen. Es muss nicht explizit angegeben werden, wenn @RestController verwendet wird.


Reguläre Methoden geben Model , und kommentierte @ResponseBody Methoden geben Objekte zurück, die mit dem HttpMessageConverter in Mediendateien konvertiert werden.


Was macht die Annotation @RequestMapping?

Diese Anmerkung wird verwendet, um Anforderungen Controller-Klassen und -Methoden zuzuordnen.
Bisher wurde es für Klassenmethoden verwendet, um den URI, die http-Methode, den Typ der gesendeten Daten usw. anzugeben. In neueren Versionen von Spring wurde es durch Anmerkungen @GetMapping , @PostMapping usw. ersetzt.


Jetzt wird es nur verwendet, um den URI der Controller-Klasse anzuzeigen.


Was sind Anmerkungen @GetMapping, @PostMapping, @DeleteMapping und andere?

Dies sind engere Anmerkungen für die Zuordnung von http-Methoden.


  • @GetMapping - Handles erhalten Anfragen
  • @PostMapping - @PostMapping Post-Anfragen
  • @DeleteMapping - @DeleteMapping
  • @PutMapping - @PutMapping Put-Anfragen
  • @PatchMapping - @PatchMapping Patch-Anfragen

Alles, was unten geschrieben steht, ist auch für andere Anmerkungen charakteristisch.


Annotation @GetMapping ist einfach eine Annotation, die @RequestMapping enthält (method = RequestMethod.GET) .
Außerdem können Sie die Handler-Methode optimieren.
Seine Parameter (sie werden in ähnliche @ RequestMapping-Parameter konvertiert):


  • path - URI
  • headers - Überschriften
  • name - Name des Handlers
  • params - Parameter
  • produces - Typ der zurückgegebenen Daten (JSON, XML, Text). Wird in REST verwendet
  • consumes - Art der empfangenen Daten. Wird in REST verwendet


    Standardmäßig nimmt die Annotation den Pfad zur Methode.
    @GetMapping("managers") = @GetMapping(path = "managers")



Warum die Annotation @RequestParam verwenden?

Diese Annotation wird verwendet, damit Handler-Methoden Parameter von einer http-Anforderung abrufen können.


Eine Anfrage mit folgenden Parametern: http://localhost:8080/getByName/name=Ivan .
Der folgende Code fügt die Zeichenfolge Ivan in den Variablennamen ein.


 @GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) { //some logic } 

Warum die Annotation @PathVariable verwenden?

Diese Anmerkung erhält einen bestimmten Teil von der URI.


URI: http://localhost:8080/getById/23


Der folgende Code fügt 23 in die id Variable ein.


 @GetMapping("getById/{id}") public User getUserById(@PathVariable("id") String id) { //some logic } 

Was bedeuten die verschiedenen Codes für http-Antworten?

GET - 200 OK


POST - 200 OK, 201 Erstellt, 204 Kein Inhalt


PUT - 200 OK, 201 Erstellt, 204 Kein Inhalt


LÖSCHEN - 204 Kein Inhalt, 202 Akzeptiert


Warum brauche ich eine @ ResponseStatus-Annotation?

Hier können Sie einen Antwortcode festlegen. Normalerweise legt Spring selbst den gewünschten Antwortcode fest, aber manchmal müssen Sie ihn überschreiben.


 @PostMapping @ResponseStatus(HttpStatus.CREATED) public void add(...) {...} 

Anstatt Anmerkungen zu verwenden, können Sie eine ResponseEntity und den Antwortcode manuell festlegen.


@ReponseStatus wird nicht empfohlen, ResponseEntity und @ReponseStatus zusammen zu verwenden.


Was ist eine ResponseEntity?

Dies ist eine spezielle Klasse , die eine http-Antwort darstellt. Es enthält den Antworttext, den Statuscode und die Überschriften. Wir können es verwenden, um die http-Antwort zu optimieren.


Es ist ein universeller Typ, und jedes Objekt kann als Körper verwendet werden:


 @GetMapping("/hello") ResponseEntity hello() { return new ResponseEntity("Hello World!", HttpStatus.OK); } 

Warum @RequestBody?

Sie können die Annotation @RequestBody für einen Methodenparameter verwenden, damit der Anforderungshauptteil in diesen Parameter konvertiert wird.


 @PostMapping("accounts") //,   JSON    Account public void handle(@RequestBody Account account) {...} 

Sie können @Validated zusammen mit @RequestBody , um nach einer Anforderung zu @RequestBody .


Was ist ein RestTemplate? Was sind ihre Vorteile?

RestTemplate ist im Frühjahr ein spezieller Client zum Senden von http-Anforderungen. Es bietet praktische APIs zum einfachen Aufrufen von REST-Endpunkten in einer einzelnen Zeile.


 RestTemplate restTemplate = new RestTemplate(); String fooResourceUrl = "http://localhost:8080/spring-rest/foos"; ResponseEntity response = restTemplate.getForEntity(fooResourceUrl + "/1", String.class); 

Weitere Informationen zur Verwendung finden Sie in diesem Artikel .

Source: https://habr.com/ru/post/de471140/


All Articles