Changes for page Basisprojekt
Last modified by mgrawunder on 2025/09/09 08:42
From 36.2 to 36.1
From 38.4 to 38.3
From version 38.3
edited by mgrawunder
on 2025/09/03 10:45
on 2025/09/03 10:45
Change comment:
There is no comment for this version
To version 36.2
edited by mgrawunder
on 2025/09/03 09:56
on 2025/09/03 09:56
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 0 added, 10 removed)
Details
- Page properties
-
- Content
-
... ... @@ -34,9 +34,8 @@ 34 34 35 35 [[image:1755248508652-523.png]] 36 36 37 -**Hinweis: Wenn man schon hier ist, kann man auch das Spring- (Boot)-Plugin **installieren37 +**Hinweis: Wenn man schon hier ist, kann man auch das Spring-Plugin **installieren 38 38 39 -[[image:1756886220468-891.png]] 40 40 41 41 == Server laufen lassen == 42 42 ... ... @@ -68,7 +68,7 @@ 68 68 [[image:1755246173415-934.png]] 69 69 70 70 71 -**Wenn man IntelliJ nicht in der Pro-Version verwendet bzw. das Spring Boot Plugin nicht installiert hat, muss kann man ein Spring-Profil über eine Umgebungsvariable in der Konfiguration des Servers setzen: **70 +**Wenn man IntelliJ nicht in der Pro-Version verwendet, muss kann man ein Spring-Profil über eine Umgebungsvariable in der Konfiguration des Servers setzen: ** 72 72 73 73 **SPRING_PROFILES_ACTIVE=dev** 74 74 ... ... @@ -117,8 +117,6 @@ 117 117 118 118 = OpenAPI = 119 119 120 -(Hinweis: Ich bin nicht sicher, ob IntelliJ diese Darstellung auch hat, wenn man nicht die Ultimate Version verwendet. Ggf. muss man das OpenAPI-Plugin installieren) 121 - 122 122 [[image:1755250026156-269.png]] 123 123 124 124 [[image:1755250050031-304.png]] ... ... @@ -133,116 +133,3 @@ 133 133 Kann JSON oder YAML (Yet Another Markup Language) verwenden YAML ist wie JSON nur mit weniger Klammern 134 134 135 135 [[image:1755250157536-746.png]] 136 - 137 -Die aktuelle Version des OpenAPI Dokumentes findet sich im Basisprojekt 2 [[https:~~/~~/gitlab.swl.informatik.uni-oldenburg.de/SPB/SWPBasisprojekt2/-/blob/master/openapi.yaml?ref_type=heads>>https://gitlab.swl.informatik.uni-oldenburg.de/SPB/SWPBasisprojekt2/-/blob/master/openapi.yaml?ref_type=heads]] 138 - 139 -Dort wird die Datei auch grafisch dargestellt. 140 - 141 - 142 -= Maven und OpenAPI = 143 - 144 -Die OpenAPI Datei kann verwendet werden, um sich die [[REST-Schnittstellen>>doc:||anchor="HErweiterungderREST-Schnittstelle"]] generieren zu lassen. Diese Erzeugung erfolgt mit dem OpenAPI Generator [[https:~~/~~/github.com/OpenAPITools/openapi-generator>>https://github.com/OpenAPITools/openapi-generator]] 145 - 146 -Man kann dabei jetzt einen Kommandozeilenaufruf verwenden oder man setzt auf das im Basisprojekt vorhandene MVN () 147 - 148 -Dafür ist in den Maven-Dateien bereits das OpenAPI Generator Plugin integriert. Da im Client und im Server unterschiedliche Arten verwendet werden, erfolgt die Konfiguration im Client und im Server unterschiedlich: 149 - 150 -== Client == 151 - 152 -Im Client werden die Apache Http Bibliothek verwendet. 153 - 154 - 155 -[[image:1756887005209-855.png]] 156 - 157 -== Server == 158 - 159 -Im Server wird Spring (Boot) verwendet 160 - 161 -[[image:1756887037619-847.png]] 162 - 163 -TODO: Weitere Informationen zu 164 - 165 -- Lombok 166 - 167 -- Dependency Injection 168 - 169 -- Spring (Boot), siehe auch [[https:~~/~~/www.marcobehler.com/guides/spring-framework>>https://www.marcobehler.com/guides/spring-framework]] 170 - 171 - 172 - 173 -= Erweiterung der REST-Schnittstelle = 174 - 175 -In diesem Beispiel wird einmal gezeigt, wie die REST-Schnittstelle des Basisprojektes einfach erweitert werden kann. 176 - 177 -In diesem Beispiel soll die aktuelle Schnittstelle um die Möglichkeit erweitert werden, alle Lobbies vom Server zu bekommen. 178 - 179 -== Schritt 1: Erweitere das OpenAPI-Dokument == 180 - 181 -Um diese neue Funktion sowohl im Client als auch im Server verwenden zu können, ist es notwendig, diese neue Funktion im OpenAPI-Dokument zu definieren. 182 - 183 -Die Funktion soll sehr einfach sein und keine Parameter verlangen. Dafür bietet sich die GET-Funktion an. 184 - 185 -Im folgenden Bild sind alle Anpassungen zu sehen: 186 - 187 -[[image:1756887436525-790.png||height="355" width="974"]] 188 - 189 - 190 -Nach dem Speichern, sollte das OpenAPI-Dokument wie folgt aussehen 191 - 192 -[[image:1756887488020-376.png||height="642" width="904"]] 193 - 194 - 195 -Jetzt kann man entweder in IntelliJ 196 - 197 -[[image:1756888245896-845.png||height="347" width="620"]] 198 - 199 -oder im Terminal (z.B. auch in IntelliJ) 200 - 201 -[[image:1756888279902-777.png||height="637" width="1053"]] 202 - 203 -Wobei hier auch clean compile reichen würde. 204 - 205 -**ACHTUNG! Falls maven Problem macht, kann das auch an einer falschen Java-Version im System liegen (siehe auch [[FAQ>>doc:.Basisprojekt FAQ.WebHome]])** 206 - 207 -Es werden durch den Aufruf neue Inhalte generiert (bzw. die alten überschrieben). 208 - 209 -[[image:1756888428042-802.png||height="538" width="1077"]] 210 - 211 -Hinweis: Niemals Änderungen unterhalb des target-Ordners machen. Das wird von Maven bei clean gelöscht. 212 - 213 -=== Wie bekommt man dann aber nun die Funktionalität rein? === 214 - 215 -Für jeden Endpunkt (also aktuell lobbies und users) werden drei Interfaces/Klassen erzeugt: 216 - 217 -* *Api (z.B, LobbiesApi): Beschreibung der REST-Methoden, vor allem auch das Mapping von z.B. /lobbies/join auf die Methode lobbyJoin(String) 218 -* ((( 219 -*ApiController implements *Api (Für Spring) (z.B. LobbiesApiController) 220 -))) 221 -* ((( 222 -*ApiDelegate (z.B. LobbiesApiDelegate): Macht die eigentliche Arbeit und muss** im eigenen Code-Bereich** erweitert werden! 223 -))) 224 - 225 - 226 - 227 -== Schritt 2: Erweiterung auf Server-Seite == 228 - 229 -Da es schon Funktionen für die Lobbies gibt, gibt es auch bereits eine Implementierung, die LobbiesApiDelegate überschreibt 230 - 231 -[[image:1756888762381-912.png||height="48" width="789"]] 232 - 233 -Wenn man einen neuen Endpunkt definiert, muss man auch einen neuen Service definieren. (Hinweis: Der Service muss eine Spring Komponenten sein, damit sie in den Spring Context aufgenommen wird). 234 - 235 -In der Klasse muss man dann die neue Methode lobbyList aus der API überschreiben. 236 - 237 -[[image:1756888929507-312.png||height="156" width="1161"]] 238 - 239 -Dabei wird folgendes gemacht: 240 - 241 -1. Es wird ein Rückgabeobjekt vom Typ Liste erzeugt 242 -1. Es wird über alles Lobbies auf dem Server gegangen (lobbyManagement.getLobbies()) 243 -1. Da der Client u.U. nicht die vollständigen Informationen über die Lobbies bekommen soll, gibt es zwei unterschiedliche Klassen: ServerLobby und LobbyDTO. 244 -1. Die Foreach-Schleife sorgt dafür, dass in das Rückgabeobjekt nur die LobbyDTOs eingefügt werden. 245 -1. Dafür wird eine Funktion mit dem Namen lobbyMapping verwendet 246 -1. Schließlich wird am Ende gesagt, dass alles ok ist und eine Antwort ResponseEntity.ok mit dem Rückgabeobjekt (lobbies) gesendet. 247 - 248 -
- 1756886220468-891.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -161.0 KB - Content
- 1756887005209-855.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -56.9 KB - Content
- 1756887037619-847.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -52.5 KB - Content
- 1756887436525-790.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -62.8 KB - Content
- 1756887488020-376.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -187.5 KB - Content
- 1756888245896-845.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -115.6 KB - Content
- 1756888279902-777.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -518.9 KB - Content
- 1756888428042-802.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -312.3 KB - Content
- 1756888762381-912.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -3.4 KB - Content
- 1756888929507-312.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.mgrawunder - Size
-
... ... @@ -1,1 +1,0 @@ 1 -16.9 KB - Content