...mit Spring Boot und React.
- Wir lernen den OpenApi-Standard als Beispiel für einen API-Contract besser kennen und wenden ihn auf ein eigenes Beispiel an.
- Wir schreiben eine kurze technische Spezifikation.
- Wir generieren Code für ein RESTfull Spring Boot Backend und ein React Frontend und nutzen diesen.
In diesem Beispiel-Ponyhofprojekt sind Java- und React-Sources zusammengelegt.
Es bringt bereits einen Gradle basierten OpenApi-Generator mit sich.
Der Task openapi erstellt Stubs für Spring Boot und ReactJS (gradlew openapi oder im build.gradle -> openapi).
Der Task muss bei Äderungen an der Spezifikation neu ausgeführt werden.
- Generierte Sourcefiles liegen in
build/generated/openapi-springbzw insrc/generated/openapi - Nach dem Starten des Spring Boot Servers ist ein SwaggerUI erreichbar unter http://localhost:8080/api/swagger-ui/index.html
Dies ist eine Gruppenarbeit. Die Aufgabe besteht darin ein Backend in Spring Boot sowie ein Frontend in React zu schreiben. Zu den technischen Anforderungen gehört eine OpenApi Spezifikation (OAS) sowie eine kurze objektorientierte Analyse als Teil einer technischen Spezifikation.
Das Thema darf frei gewählt werden, als Illustrationsbeispiel wird hier ein Ponyhof verwendet. Es gibt folgende minimalen Anforderungen:
- Es werden mindestens drei voneinander abhängige Objekte modeliert.
z.B. eine Ponyhofapplikation mit Ponies, Reiter und einem Futterplan. - Ein modeliertes Objekt hat mindestens fünf Attribute.
z.B. ein Pony hat Attribute wie ID (Zahl), Name, Farbe (Enum), Geburtstag (Datum), Besitzer (FK auf Reiter)... - Es gibt CRUD Operationen für diese Objekte und alle Operationen sind im UI nutzbar.
z.B. gibt es im Frontend eine Tabelle aller Ponies, und man kann nach Farbe filtern viaGET /ponies?color=BLACK. - Alle Endpunkte sind durch die OpenApi Spezifikation (v3.0.3) definiert und der generierte Code darf nicht manuell angepasst werden.
Es braucht keine Datenbankanbindung und keine Security.
Diese Gruppenarbeit gibt zwei unabhängige Noten für die Module M326 und M226b. Die Arbeit ist als ein einzelnes Git-Repo abzugeben. Diese beinhaltet alle Sourcefiles sowie den technischen Bericht.
Es wird hauptsächlich die Qualität der OpenApi Spezifikation und der Dokumentation bewertet. Erwartet wird:
- Bericht
- Der Bericht ist in AsciiDoc oder Markdown geschrieben. Für Grafiken wird PlantUML empfolen.
- Es werden drei Usecases beschrieben incl. Usecasediagramm.
- Es gibt eine kurze objektorientierte Analyse und ein Klassendiagramm.
- Zu jedem Usecase gibt es mindestens ein Testcase (mit Beschreibung, Vorbedingungen, erwartetem Ergebnis) und einem illustrierenden Sequenzdiagramm.
- Es wurden UI Wireframes gezeichnet.
- Ein persönliches Fazit.
- OAS
- Die OAS ist valid und lesbar (hat
summarys,descriptionsundexamplesusw). - In der OAS werden Objekte widerverwendet (via
$ref), auch Fehlerfälle werden definiert und sinnvolle HTTP Status Codes verwendet. - Es werden
query-paremters,path-parameters,arrays, komplexe Typen usw verwendet.
- Die OAS ist valid und lesbar (hat
Es wird hauptsächlich die Qualität und der Umfang des Codes bewertet.
- Spring Boot
- Alle Endpunkte sind in Spring Boot implementiert, der Code ist sinnvoll und deckt die Spezifikation ab. Es werden Fehlerfälle behandelt. Neben simplen CRUD Operationen gibt es auch komplexere wie z.B. eine Suche mit Filter und Paging.
- Es werden die generieren Interfaces implementiert.
- Es gibt sillvolle JUnit-Tests.
- React
- Es wird nur generierter (Typescript) Clientcode für Backendoperationen verwendet.
- Alle Operationen/Endpunkte sind via UI erreichbar und sinnvoll. Dies ist der zeitaufwändigste Teil dieser Arbeit.
- Es gibt Jest (oder ähnliche) UI-Tests.
Weiterführende Ideen:
- Einfache Security und ein Login
- Datenbankanbindung z.B. an eine H2DB
- Automatisch generierte Dokumentation als pdf/html
- erweitertes CI/CD
- custom Styles für das Frontend