Changes for page Basisprojekt

Last modified by mgrawunder on 2025/09/09 08:42

edited by mgrawunder
on 2025/09/03 09:57
Change comment: Uploaded new attachment "1756886220468-891.png", version {1}
edited by mgrawunder
on 2025/09/03 10:45
Change comment: There is no comment for this version

Summary

Details

insert_drive_file Page properties
Content
... ... @@ -34,8 +34,9 @@
34 34  
35 35  [[image:1755248508652-523.png]]
36 36  
37 -**Hinweis: Wenn man schon hier ist, kann man auch das Spring-Plugin **installieren
37 +**Hinweis: Wenn man schon hier ist, kann man auch das Spring-(Boot)-Plugin **installieren
38 38  
39 +[[image:1756886220468-891.png]]
39 39  
40 40  == Server laufen lassen ==
41 41  
... ... @@ -67,7 +67,7 @@
67 67  [[image:1755246173415-934.png]]
68 68  
69 69  
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: **
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: **
71 71  
72 72  **SPRING_PROFILES_ACTIVE=dev**
73 73  
... ... @@ -116,6 +116,8 @@
116 116  
117 117  = OpenAPI =
118 118  
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 +
119 119  [[image:1755250026156-269.png]]
120 120  
121 121  [[image:1755250050031-304.png]]
... ... @@ -130,3 +130,116 @@
130 130  Kann JSON oder YAML (Yet Another Markup Language) verwenden YAML ist wie JSON nur mit weniger Klammern
131 131  
132 132  [[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 +
attach_file 1756887005209-855.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +56.9 KB
Content info
attach_file 1756887037619-847.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +52.5 KB
Content info
attach_file 1756887436525-790.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +62.8 KB
Content info
attach_file 1756887488020-376.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +187.5 KB
Content info
attach_file 1756888245896-845.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +115.6 KB
Content info
attach_file 1756888279902-777.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +518.9 KB
Content info
attach_file 1756888428042-802.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +312.3 KB
Content info
attach_file 1756888762381-912.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +3.4 KB
Content info
attach_file 1756888929507-312.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.mgrawunder
Size
... ... @@ -1,0 +1,1 @@
1 +16.9 KB
Content info