Seitenhistorie
Inhalt | ||
---|---|---|
|
Nuclos bietet die Möglichkeit aus einer OpenAPI-Spezifikation mittels des OpenAPI Generator
einen Java-Client zur Anbindung von externen REST-Services zu generieren. Dieser Client kann dann in den Regeln verwendet werden.
Info |
---|
Dieses Feature steht ab der Version 4.2023.29 zur Verfügung. |
Einrichtung
Um einen Client für einen REST-Service erzeugen zu lassen, muss die Servicespezifikation unter Administration/REST APIs registriert werden. Danach werden der Struktur entsprechende Klassen im Verzeichnis <NUCLOS-HOME>/data/codegenerator/src-conf-rest/
generiert, die in Regeln verwendet werden können.
Feld | Bedeutung | |
---|---|---|
Name | Name der REST-API: eindeutig; wird u.a. als Name für die Adapter-Klasse verwendet, bspw example.rest.NuclosRESTAdapter (liegt im Package des Nuclets) | |
Beschreibung | optional | |
Haupt-Package | Name für das api -Package; Default: <nuclet_package>.invoker | |
API-Package | Name für das api -Package; Default: <nuclet_package>.api | |
Modell-Package | Name für das models -Package; Default: <nuclet_package>.models | |
Bibliothek für HTTP-Client-Template | Bibliothek für HTTP-Client; Default: jersey2 | |
Bbliothek für Date-Objekte | Bibliothek für Date-Objekte; Default: java8 | |
BigDecimal als String-Objekte behandeln | BigDecimal als String behandeln um Genauigkeitsverluste zu vermeiden | |
Serializable implementieren? | Models implementieren des Interface Serializable | |
Datei | OpenAPI-Spezifikation als JSON oder YAML |
https://openapi-generator.tech/docs/generators/java bietet weitere Informationen zu den Einstellungsmöglichkeiten des Generators.
Hinweis | ||
---|---|---|
| ||
Bei der Verwendung einer anderen HTTP-Client-Bibliothek oder Date-Bibliothek als den Standard, werden u.U. weitere Bibliotheken benötigt, die als serverseitige Extension zur Verfügung gestellt werden müssen. |
Verwendung
Die Erzeugung der Client-Klassen erfolgt ohne Abhängigkeit zu einem Endpunkt. Daher muss vor dem Aufruf der API-Methoden ein ApiClient
für den anzusprechenden Endpunkt erzeugt werden. Zur Vereinfachung bietet Nuclos hier eine Adapter-Klasse (bspw. example.rest.NuclosRESTAdapter
) an, die mit dem Endpunkt initialisiert werden kann.
Der Aufruf der API-Methoden erfolgt über die Api
-Klassen (s. API-Package). Diese können auch über die Adapter-Klasse bezogen werden, bspw. durch den Aufruf von adapter.getNucloSystemApi()
.
Nachfolgend findet sich eine Beispiel-Implementation zum Aufruf mehrerer API-Methoden (GET
und POST
) mit vorherigem Login und Authentifizierung über ein Session-Cookie.
Codeblock | ||||||
---|---|---|---|---|---|---|
| ||||||
String restAPIsBasePath = ParameterProvider.getNucletParameter(TestOtherNucletParameter.RestAPIsBasePath);
if (StringUtils.isBlank(restAPIsBasePath) || "null".equals(restAPIsBasePath)) {
restAPIsBasePath = "http://localhost/nuclos-war";
}
final NuclosRESTAdapter nuclosRESTAdapter = NuclosRESTAdapter.newInstance(restAPIsBasePath);
try {
StringBuilder sb = new StringBuilder();
final Serverstatus serverstatus = nuclosRESTAdapter.getNuclosSystemApi().restServerstatusGet();
sb.append(new ObjectMapper().writeValueAsString(serverstatus));
sb.append("\n");
//LOGIN
final LoginParams loginParams = new LoginParams();
loginParams.setUsername("nuclos");
loginParams.setPassword("");
final LoginInfo loginInfo = nuclosRESTAdapter.getNuclosAuthenticationApi().login1(loginParams);
final String sessionId = loginInfo.getSessionId();
nuclosRESTAdapter.getApiClient().addDefaultCookie("JSESSIONID", sessionId);
DebugSql debugSQL = new DebugSql();
debugSQL.setDebugSQL("false");
nuclosRESTAdapter.getNuclosMaintenanceApi().setDebugSQL(debugSQL);
debugSQL = nuclosRESTAdapter.getNuclosMaintenanceApi().getDebugSQL();
sb.append(new ObjectMapper().writeValueAsString(debugSQL));
sb.append("\n");
debugSQL = new DebugSql();
debugSQL.setDebugSQL("true");
nuclosRESTAdapter.getNuclosMaintenanceApi().setDebugSQL(debugSQL);
debugSQL = nuclosRESTAdapter.getNuclosMaintenanceApi().getDebugSQL();
sb.append(new ObjectMapper().writeValueAsString(debugSQL));
sb.append("\n");
testBO.setResult(sb.toString());
} catch (ApiException | JsonProcessingException e) {
throw new BusinessException(e);
} |