Ich habe kürzlich die RESTful-Schnittstellenspezifikation kennengelernt und Postman verwendet, um sie vorzustellen. Hier sind die relevanten RESTful-Schnittstellenspezifikationen: 1. Was ist RESTful?
REST: Es handelt sich um einen Architekturstil für Webdienste; er verwendet weit verbreitete Standards und Protokolle wie HTTP, URI, XML, JSON und HTML; er ist ein leichtes, plattformübergreifendes und sprachübergreifendes Architekturdesign Stil, nicht Ein Standard ist eine Idee.
RESTful: Der entsprechende Chinesisch ist REST; Restful-Webdienst ist eine gängige REST-Anwendung, bei der es sich um einen Webdienst handelt, der dem REST-Webdienst entspricht und eine Art ROA-Architektur (Ressourcenorientierte Architektur) darstellt ) [Empfehlung: Web-Frontend]
Die Essenz von RESTful ist ein Software-Architekturstil. Der Kern ist ressourcenorientiert und löst die folgenden Probleme:
Reduzieren Sie die Entwicklungskomplexität
Verbessern Sie die Skalierbarkeit des Systems
2. Der Unterschied zwischen SOAP und REST:
SOAP (Simple Object Access Protocol): Eine Protokollspezifikation für den Datenaustausch. Es handelt sich um ein leichtes, einfaches, XML-basiertes Protokoll.
REST (Representational State Transfer): Ein Softwarearchitekturstil, der die Komplexität der Entwicklung reduzieren und die Skalierbarkeit des Systems verbessern kann.
Effizienz und Benutzerfreundlichkeit :
SOAP : Aufgrund der kontinuierlichen Erweiterung des Inhalts des eigenen Protokolls aufgrund verschiedener Anforderungen ist die Leistung der SOAP-Verarbeitung zurückgegangen. Gleichzeitig sind auch die Benutzerfreundlichkeit und die Lernkosten gestiegen.
RESTful : Aufgrund seines ressourcenorientierten Schnittstellendesigns und der Betriebsabstraktion vereinfacht es schlechte Designs von Entwicklern und nutzt außerdem das ursprüngliche Anwendungsprotokoll-Designkonzept von HTTP maximal aus.
Sicherheit :
RESTful eignet sich sehr gut für ressourcenbasierte Serviceschnittstellen und eignet sich insbesondere für Szenarien, die eine hohe Effizienz, aber geringe Sicherheitsanforderungen erfordern.
Die Reife von SOAP kann die Gestaltung von Schnittstellen erleichtern, die für mehrere Entwicklungssprachen bereitgestellt werden müssen und höhere Sicherheitsanforderungen haben.
Zusammenfassend:
Sicherheit : SOAP ist besser als REST;
Effizienz und Benutzerfreundlichkeit : REST ist besser;
Reife : Im Allgemeinen ist SOAP in Bezug auf die Reife REST überlegen.
3. So entwerfen Sie eine RESTful-API :
Ressourcenpfad : In der RESTful-Architektur stellt jede URL eine Ressource dar, sodass die URL keine Verben, sondern nur Substantive enthalten kann. Im Allgemeinen sollten Substantive in APIs im Plural stehen.
HTTP-Verb : Ressourcenbetrieb (CURD), dargestellt durch HTTP-Verb (Prädikat).
GET: Ressourcen (ein oder mehrere Elemente) vom Server abrufen.
POST: Erstellen Sie eine neue Ressource auf dem Server.
PUT: Ressourcen auf dem Server aktualisieren (der Client stellt die kompletten geänderten Ressourcen bereit).
DELETE: Löscht die Ressource vom Server.
Nehmen wir als Beispiel den Zoo (inkl. Informationen zu verschiedenen Tieren und Mitarbeitern):
https://api.example.com/v1/zoos //Zoo-Ressourcen https://api.example.com/v1/animals //Tierressourcen https://api.example.com/v1/employees //Mitarbeiter Ressource
POST /zoos: Erstelle einen neuen Zoo
GET /zoos/ID: Informationen über einen bestimmten Zoo abrufen
PUT /zoos/ID: Aktualisieren Sie die Informationen eines bestimmten Zoos
DELETE /zoos/D: Einen Zoo löschen
Informationen filtern :
?limit=10: Geben Sie die Anzahl der zurückgegebenen Datensätze an
?offset=10: Gibt die Startposition des zurückgegebenen Datensatzes an.
?page=2&per_page=100: Geben Sie die Seite und die Anzahl der Datensätze pro Seite an.
?sortby=name&order=asc: Geben Sie an, nach welchem Attribut die zurückgegebenen Ergebnisse sortiert werden und in welcher Reihenfolge.
?animal_type_id=1: Filterbedingungen angeben
Statuscode :
200 (OK) – wenn eine vorhandene Ressource geändert wurde
201 (erstellt) – wenn eine neue Ressource erstellt wird
202 (akzeptiert) – Die Verarbeitungsanforderung wurde akzeptiert, aber noch nicht abgeschlossen (asynchrone Verarbeitung)
301 (dauerhaft verschoben) – Der URI der Ressource wurde aktualisiert
303 (Siehe Andere) – Andere (z. B. Lastausgleich)
400 (schlechte Anfrage) – bezieht sich auf eine fehlerhafte Anfrage
404 (nicht gefunden) – Die Ressource existiert nicht
406 (nicht akzeptabel) – Der Server unterstützt die erforderliche Darstellung nicht
409 (Konflikt) – Allgemeiner Konflikt
412 (Vorbedingung fehlgeschlagen) – Die Vorbedingung ist fehlgeschlagen (z. B. ein Konflikt beim Ausführen von Bedingungsaktualisierungen).
415 (nicht unterstützter Medientyp) – Die empfangene Darstellung wird nicht unterstützt
500 (interner Serverfehler) – generische Fehlerantwort
503 (Dienst nicht verfügbar) – Der Dienst kann die Anfrage derzeit nicht verarbeiten
Fehlerbehandlung :
Die zurückgegebenen Informationen verwenden Fehler als Schlüsselnamen und Fehlerinformationen als Schlüsselwert.
{ Fehler: „Ungültiger API-Schlüssel“ }
Rückgabeergebnisse :
GET /collection: Gibt eine Liste (Array) von Ressourcenobjekten zurück
GET /collection/resource: Gibt ein einzelnes Ressourcenobjekt zurück
POST /collection: Gibt das neu generierte Ressourcenobjekt zurück
PUT /collection/resource: Gibt das vollständige Ressourcenobjekt zurück
PATCH /collection/resource: Gibt das vollständige Ressourcenobjekt zurück
DELETE /collection/resource: Gibt ein leeres Dokument zurück
4. Testprozess für die Schnittstelle im REST-Stil :
Lassen Sie es uns direkt mit einem Bild vorstellen.
5. Code schreiben und Postman-Tests :
Tools: Idee, MySQL-Datenbank, Postman
Daten der Datenbanktabelle:
Entitätsklasse:
Front-End-Einstieg (vue) zum Mastery-Kurs: Einstieg ins Lernen
@Daten @ApiModel("Benutzer-Entitätsklasse") öffentliche Klasse User erweitert Model<User> implementiert Serializable { @ApiModelProperty("Benutzer-ID") @NotNull(message = „Benutzer-ID darf nicht leer sein“) private Ganzzahl-ID; @NotBlank(message = „Benutzername darf nicht leer sein“) @ApiModelProperty("Benutzername") privater String-Name; @Min(1) @Max(100) @ApiModelProperty("Benutzeralter") privates Ganzzahlalter; @NotEmpty(message = „Das Postfach darf nicht leer sein“) @ApiModelProperty("Benutzer-E-Mail") @E-Mail private String-E-Mail; @ApiModelProperty("0: Nicht gelöscht 1: Gelöscht") @TableLogic private Ganzzahl gelöscht; @NotBlank(message = „Passwort darf nicht leer sein“) @ApiModelProperty("Benutzerpasswort") privates String-Passwort; }
Controller-Layer-Code (Service-Layer weggelassen):
@Api(tags = "Benutzerverwaltung") @RestController @RequestMapping("/MyWebsite/user") öffentliche Klasse UserController { @Autowired private UserServiceImpl userServiceimpl; @ApiOperation(value = „Neuer Benutzer“) @PostMapping public int insertUser(Benutzer user) { System.out.println("Erfolgreich hinzufügen"); return userServiceimpl.insertUser(user); } @ApiOperation(value = „Benutzerinformationen ändern“) @PutMapping public void updateUser(@RequestBody @Valid User user) { userServiceimpl.updateUser(user); System.out.println("Änderung erfolgreich"); } @ApiOperation(value = „Benutzer löschen“, Notes = „Benutzer basierend auf der ID löschen“) @DeleteMapping("/{id}") public int deleteUser(@ApiParam("user id") @PathVariable @Valid Integer id) { System.out.println("Löschen erfolgreich"); return userServiceimpl.deleteUser(id); } @ApiOperation(value = „Alle Benutzer abfragen“) @GetMapping public List<Benutzer> allUser() { System.out.println("Abfrage erfolgreich"); return userServiceimpl.allUser(); } @ApiOperation(value = „id query user“) @GetMapping("/{id}") public User selectById(@PathVariable("id") String id) { return userServiceimpl.selectById(id); } }
Verwenden Sie Postman zum Testen (URL-Pfad muss übereinstimmen):
Fragen Sie alle Benutzer ab : http://localhost:8081/MyWebsite/user
Header: Content-Type=application/json
Körper: leer
Abfrage erfolgreich!
Abfrage basierend auf der ID:
Abfrage erfolgreich!
Neuen Benutzer hinzufügen :
Überprüfen Sie, ob die Datenbank erfolgreich hinzugefügt wurde!
Benutzerinformationen ändern (Name und Alter mit ID 7 ändern):
Überprüfen Sie, ob die Datenbankänderung erfolgreich war!
Benutzer basierend auf der ID löschen :
Überprüfen Sie, ob die Datenbank erfolgreich gelöscht wurde! (gelöscht=1)
Möglicherweise haben Sie die gesamten Daten direkt gelöscht
Beim Abfragen oder Aktualisieren oder Löschen nicht vorhandener Daten (oder der Daten sind illegal) gibt es andere Schnittstellen, z. B. das Löschen aller Schnittstellen, die ich hier nicht getestet habe Weise sie darauf hin.
Das Obige ist eine detaillierte Einführung in die Restful-Schnittstellenspezifikation und das Postman-Debugging-Tool!