REST Api / JAX-RS, Swagger (OpenAPI) - generelle Starthilfen benötigt

internet

Top Contributor
Hallo Community,

ich würde gerne bald eine REST - Api für meine kleine Applikation anbieten. Ich bin hier allerdings blutiger Anfänger und habe hierzu so gut wie nichts bisher gemacht.

Als ganz simples Beispiel:
Ein User aus meiner App kann seine Kunden abrufen und bekommt eine Liste mit seinen Kunden zurück.

Ich denke der Aufwand hält sich hier im Rahmen und vllt. kann man mir hier mit einem simplen Codebeispiel weiterhelfen...

Meinen Rest Service kann ich ja bspw. so aufbauen:
Java:
@Stateless
@Path("/" + allcustomer)
public class AllCustomerWebservice {
    ....

Folgende Fragen habe ich dazu:
- Codebeispiel für den Fall oben
a) Meine REST - Service (Server)
b) Anfrage auf dem Client
- Wie authentifiziert sich derjenige, der mein Service nutzt?(ich denke hier an einen Token, den der User aus meiner App bekommt)? Wie muss das im Code aussehen?

Ein simpler Code zu dem oben aufgezeigten Beispiel würde mir enorm helfen.

Ebenfalls würde ich gerne
- eine Doku anbieten (wie es von Swagger gibt)
- Ich meine via Swagger kann man sich auch den Client in seiner Programmiersprache erstellen lassen

Wie gehe ich hier vor und falls jemand ein simplen Beispielcode liefern kann, wäre das mega.

Vielen Dank für jede Hilfe
 

Oneixee5

Top Contributor
Wie wäre es wenn du mal ein Buch liest oder Google benutzt. Das ist wirklich nicht so schwer. Wenn du ein vernünftiges Lastenheft hast, dann programmiere ich dir das auch. Natürlich gegen ein entsprechendes Honorar.
 

mrBrown

Super-Moderator
Mitarbeiter
Ist deine Application denn eine Java/Jakarta EE-Application oder eine einfach "standalone" Java-Anwendung?


Ganz grundsätzlich finde ich die Guides hier ganz gut: https://www.openliberty.io/guides/#restful_service
Man muss nur die Server-Spezifischen Dinge an den jeweiligen benutzen Server anpassen, der Java-Teil sollte aber in jedem Application-Server lauffähig sein.
 

internet

Top Contributor
Ist deine Application denn eine Java/Jakarta EE-Application oder eine einfach "standalone" Java-Anwendung?


Ganz grundsätzlich finde ich die Guides hier ganz gut: https://www.openliberty.io/guides/#restful_service
Man muss nur die Server-Spezifischen Dinge an den jeweiligen benutzen Server anpassen, der Java-Teil sollte aber in jedem Application-Server lauffähig sein.

Ich habe eine JakartaEE Applikation...

Grundsätzlich würden mir schon 2 Dinge helfen:

1. Wie sieht das mit der Authentifizierung aus? Wie muss dabei der Webservice aussehen?

2. Einbindung Swagger / OpenAPI
a) Welche lib (maven) muss ich in meine pom einbinden
b) was muss ich in meiner web.xml ändern
c) wie muss ich den Webservice zusätzlich annotieren?
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
1. Wie sieht das mit der Authentifizierung aus? Wie muss dabei der Webservice aussehen?
Hängt vom Application-Server und vom der gewollten Authentifizierungsmethoden ab. Im einfachsten Fall musst du "nichts" machen, außer die "geschützen" resourcen entsprechend annotieren – im schlimmsten Fall musst du alles selbst machen.

Oben erwähnst du Token-basierte Authentifizierung? Also, ein Token pro Nutzer, und damit authentifiziert er sich gegen das System?


2. Einbindung Swagger / OpenAPI
Die meisten aktuellen Application-Server dürfte die entsprechende Microprofile-Spezifikation unterstützen: https://www.openliberty.io/guides/microprofile-openapi.html

Die Open-API-Definition ist dann zur Laufzeit verfügbar, lässt sich aber auch mit Plugins für zB Maven und Gradle generieren
 

internet

Top Contributor
Hängt vom Application-Server und vom der gewollten Authentifizierungsmethoden ab. Im einfachsten Fall musst du "nichts" machen, außer die "geschützen" resourcen entsprechend annotieren – im schlimmsten Fall musst du alles selbst machen.

Oben erwähnst du Token-basierte Authentifizierung? Also, ein Token pro Nutzer, und damit authentifiziert er sich gegen das System?



Die meisten aktuellen Application-Server dürfte die entsprechende Microprofile-Spezifikation unterstützen: https://www.openliberty.io/guides/microprofile-openapi.html

Die Open-API-Definition ist dann zur Laufzeit verfügbar, lässt sich aber auch mit Plugins für zB Maven und Gradle generieren
Danke.... hatte meinen letzten Beitrag in der Zwischenzeit nochmal editiert...

- Ich verwende WildFly
- Ich habe folgende jar mit in die pom.xml aufgenommen:

Java:
    <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-jaxrs2</artifactId>
            <version>2.1.6</version>
        </dependency>

Die web.xml sieht so aus:
Java:
    <servlet>
        <servlet-name>Jersey2Config</servlet-name>
        <servlet-class>io.swagger.jaxrs.config.DefaultJaxrsConfig</servlet-class>
        <init-param>
            <param-name>api.version</param-name>
            <param-value>1.0.0</param-value>
        </init-param>
        <init-param>
            <param-name>swagger.api.basepath</param-name>
            <param-value>http://localhost:8080/api</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

Bekomme aber eine Fehlermeldung:
Java:
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: java.lang.ClassNotFoundException: io.swagger.jaxrs.config.DefaultJaxrsConfig from


Hängt vom Application-Server und vom der gewollten Authentifizierungsmethoden ab. Im einfachsten Fall musst du "nichts" machen, außer die "geschützen" resourcen entsprechend annotieren – im schlimmsten Fall musst du alles selbst machen.
Ich bin dazu recht offen. Es sollte eben nur so sein, dass der User sich gegenüber dem Webservice authentifizieren muss, und nicht jeder ALLE Daten sehen kann. Ich habe hier klassischerweise an einen Token gedacht, welchen ich pro User in meiner App generiere.
Mittels diesem Token geschieht dann die Authentifizierung sobald der Webservice aufgerufen wird.

Allerdings weiß ich nicht wie man diesen Token mitgibt bzw. wie man diesen dann auf dem Service entgegennimmt...
Im Endeffekt bräuchte ich ja dann einen String... Anschließend setze ich eine Datenbank Query ab, der mir diesen Token sucht.
Wenn es diesen gibt, dann gebe ich eben die Informationen aus dem Webservice zurück...
 

mrBrown

Super-Moderator
Mitarbeiter
Nur kurz nebenbei:

Statt den Swagger-Dingens kannst du dieses nutzen, das ist direkt im Wildfly integriert:
XML:
<dependency>
    <groupId>org.eclipse.microprofile.openapi</groupId>
    <artifactId>microprofile-openapi-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>

Dann nur noch die Resourcen annotieren, und das war's dann schon :)


Zur Authentifizierung kommt später irgendwann noch was, da fehlt mir grad die Zeit 😅
 

internet

Top Contributor
Nur kurz nebenbei:

Statt den Swagger-Dingens kannst du dieses nutzen, das ist direkt im Wildfly integriert:
XML:
<dependency>
    <groupId>org.eclipse.microprofile.openapi</groupId>
    <artifactId>microprofile-openapi-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>

Dann nur noch die Resourcen annotieren, und das war's dann schon :)


Zur Authentifizierung kommt später irgendwann noch was, da fehlt mir grad die Zeit 😅
Super, vielen Dank @mrBrown

Ich hatte es jetzt so hinbekommen:

Java:
<servlet>
        <servlet-name>OpenApi</servlet-name>
        <servlet-class>io.swagger.v3.jaxrs2.integration.OpenApiServlet</servlet-class>

        <init-param>
            <param-name>openApi.configuration.resourcePackages</param-name>
            <param-value>io.swagger.sample.resource</param-value>
        </init-param>

    </servlet>

    <servlet-mapping>
        <servlet-name>OpenApi</servlet-name>
        <url-pattern>/openapi/*</url-pattern>
    </servlet-mapping>


pom.xml:
Java:
    <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-jaxrs2</artifactId>
            <version>2.1.6</version>
        </dependency>
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-jaxrs2-servlet-initializer-v2</artifactId>
            <version>2.1.6</version>
        </dependency>

Funktioniert soweit, ich kann mir das json / yaml File generieren mit dem Aufruf von: http://localhost:8080/openapi/

Das einzige was mir noch fehlt bzw. unklar zu Swagger ist:
wird diese HTML Page ebenfalls dann in meinem Applicationserver (WildFly) generiert?:
Wenn ja: wie kann ich diese in meinem App - Server aufrufen?

Also ich meine diese (hier als Beispiel):

Und das andere ist, wie kann ich einen Webservice ausschließen, sodass er nicht in die json / yaml - Datei kommt?

Ich habe das versucht mit (hidden = true), aber das scheint nicht so funktionieren:

Java:
@Api(hidden = true)
@Stateless
@Path("/service"
public class MyWebService {

    @GET
    @Produces("text/javascript")
    public String findMyObject() {


Zum Webservice allgemein dann eben noch die 2 Punkte:
- Authentifizierung (siehe Fragen bereits oben)
- Wie kann ich die Query Parameter mitgeben? Siehe: https://my.sevdesk.de/swaggerUI/index.html?
1613677238707.png
 
Zuletzt bearbeitet:

internet

Top Contributor
Zur Authentifizierung kommt später irgendwann noch was, da fehlt mir grad die Zeit 😅

Kannst du hier noch weiterhelfen? Ich meine gelesen zu haben, dass es 2-3 unterschiedliche Verfahren gibt.
Welches solte man heutzutage nutzen?

Generell würde mich einfach auch interesseren, wie das programmiertechnisch aussieht. Ich verwende JAX-WS...
Im Internet finde ich auch nur begrenzt etwas....
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben