Inleiding
Via de generieke REST-connector is het mogelijk om te communiceren met eender welke webapplicatie of omgeving die gedefinieerd zit binnen je applicatie eigenschappen. Opgelet: gezien het om een generieke connector gaat, is er geen enkele ingebouwde business logica. Deze logica moet je volledig zelf op maat ontwikkelen, hetzij als expressie of script binnen een BPMN-proces, hetzij als extensie binnen je applicatie.
Setup
Maven dependency
Voeg de Generic REST connector maven dependency toe aan de juiste pom.xml files.
<dependency>
<groupId>com.skryv.connectors</groupId>
<artifactId>rest-connector</artifactId>
</dependency>
Voeg onderstaande instellingen toe aan de applicatie eigenschappen. Elk van deze eigenschappen moet je specifiek per omgeving gaan instellen.
Applicatie eigenschappen
Je stelt de generieke REST-connector in via skryv.connectors.rest.api.environments.{omgeving}, waarbij {omgeving} de naam is die je zelf kiest voor die specifieke omgeving (bijvoorbeeld BRUGGE of PUBLIC_API). Je herhaalt onderstaande eigenschappen voor elke omgeving die je wil aanspreken.
|
Eigenschap |
Default |
Beschrijving |
|---|---|---|
|
RestConnector |
||
|
|
|
De basis-URL van de externe webapplicatie of -omgeving. |
|
|
|
De timeout voor calls naar deze omgeving. Ondersteunt Duration-syntax, bijvoorbeeld |
|
|
|
De client-ID voor OAuth2 client-credentials authenticatie. Laat samen met |
|
|
|
Het client-secret voor OAuth2 client-credentials authenticatie. |
|
|
|
De URL waar de connector het OAuth2-token ophaalt. |
|
|
|
De audience die meegestuurd wordt in de tokenaanvraag. Vereist bij sommige identity providers, bijvoorbeeld Auth0. |
|
|
|
De scope die meegestuurd wordt in de tokenaanvraag. Vereist bij sommige identity providers, bijvoorbeeld Azure AD/Entra ID. |
De connector gebruikt één Resilience4j-instantie met de naam `rest-connector`. Je configureert die eveneens in je applicatie eigenschappen.
|
Eigenschap |
Voorbeeldwaarde |
Beschrijving |
|---|---|---|
|
|
10 |
Het aantal requests dat de circuit breaker van de rest-connector volgt in zijn sliding window. |
|
|
50 |
Het drempelpercentage van mislukte requests waarboven de circuit breaker van de rest-connector open gaat. |
|
|
3 |
Het aantal keer dat de rest-connector een mislukte call opnieuw probeert. |
|
|
|
De exceptie waarvoor de rest-connector een retry uitvoert. |
|
|
100 |
Het aantal calls dat de rest-connector per periode maximaal mag uitvoeren. |
|
|
10 |
Het aantal gelijktijdige calls dat de rest-connector maximaal mag uitvoeren. |
Architectuur
RestConnector (@Service, Camunda-resolvable)
+-- RestTechnicalConnector (Resilience4j-decorated)
+-- RestTemplate (one per environment, built at startup)
+-- ClientHttpRequestInterceptor (injects Bearer token when credentials configured)
| +-- RestConnectorTokenFetcher -> ClientCredentialsService (cached tokens)
+-- FallbackTextHttpMessageConverter (text-based non-JSON responses: plain text, XML, YAML, CSV)
Services en functies
De connector is een generieke service die je zowel vanuit een BPMN-proces als vanuit Java-code kan aanspreken.
Get-functie
Workflow expressie
${restConnector.get(env, path)}
Input parameters
|
Inputparameters |
Data type |
Verplicht? |
Voorbeeld |
Uitleg |
|---|---|---|---|---|
|
|
String |
Ja |
lapp |
Eén van de omgevingen die je hebt ingesteld in de applicatie-eigenschappen. |
|
|
String |
Ja |
exposed/v1/dossiers?size=1&page=0 |
Hier bouw je de call volledig zelf op. |
Output
resultVariable bevat het object dat de call teruggeeft. JSON-antwoorden worden gedeserialiseerd naar een Map of List; niet-JSON-antwoorden (text/plain, XML, YAML, ...) komen terug als ruwe String. Camunda slaat het resultaat op als procesvariabele.
Post-functie
Workflow expressie
${restConnector.post(env, path, body)}
Input parameters
|
Inputparameters |
Data type |
Verplicht? |
Voorbeeld |
Uitleg |
|---|---|---|---|---|
|
|
String |
Ja |
lapp |
Eén van de omgevingen die je hebt ingesteld in de applicatie-eigenschappen. |
|
|
String |
Ja |
exposed/v1/dossiers |
Hier bouw je de call volledig zelf op. |
|
|
Object |
Ja |
myPayloadVariable |
De procesvariabele die je als request body meestuurt. |
Output
resultVariable bevat het object dat de call teruggeeft, op dezelfde manier als bij de Get-functie.
Gebruik vanuit Java-code
Bouw je een eigen connector op maat, dan spreek je de RestConnector ook typed aan vanuit Java:
@RequiredArgsConstructor
@Service
public class MyCustomConnector {
private final RestConnector restConnector;
public DossierResponse getDossier(String id) {
return restConnector.get("lapp", "/api/v1/dossiers/" + id, DossierResponse.class);
}
public DossierResponse createDossier(CreateDossierRequest request) {
return restConnector.post("lapp", "/api/v1/dossiers", request, DossierResponse.class);
}
}
Beschikbare methodes:
|
Methode |
Gebruik |
|---|---|
|
|
Untyped GET, geeft een Object terug |
|
|
Typed GET, deserialiseert naar T |
|
|
Untyped POST, geeft een Object terug |
|
|
Typed POST, deserialiseert naar T |
PUT, PATCH en DELETE zijn ondersteund en getest op de onderliggende technische laag, maar krijgen pas een convenience-methode op de publieke facade zodra dat nodig is.