Implement REST Integration Services
Service Base
For each REST integration service there will be an abstract class Service Base generated in the SDK.
The Service Base provides access to the integration entity builder and the event producer.
The Service Base contains one abstract method named execute.
This execute method needs to be implemented in the generated implementation file for the service.
Input & output entity
Service execute method will take a modelled Input Entity as a parameter.
Service execute method will return a modelled Output Entity as a return type.
Business errors
- If service is modelled with Business Errors, it will be added as
throws
declaration to service execute method.
Injecting an API provider
- It's very common to inject generated API Providers for an API Dependency and use them to integrate with external / internal APIs.
//... other imports // Import CreditIscoreApiIScore API provider from *iscore* integration namespace import de.knowis.cards.operations.sdk.integration.iscore.iscorecheck.provider.CreditIscoreApiIScore; // Declare integration API provider private final CreditIscoreApiIScore iscoreApi; // Adjust your generated integration service implementation constructor // to inject Iscore integration namespace API provider public CheckIscoreService(IntegrationEntityBuilder entityBuilder, EventProducerService eventProducer CreditIscoreApiIScore iscoreApi) { super(entityBuilder, eventProducer); this.iscoreApi = iscoreApi; }
Implementation example
Example of CheckIscore service implementation file.
//... imports // Import CreditIscoreApiIScore api provider from *iscore* integration namespace import de.knowis.cards.operations.sdk.integration.iscore.iscorecheck.provider.CreditIscoreApiIScore; // Import IscoreResult from Iscore integration namespace API provider import de.knowis.cards.operations.sdk.integration.iscore.iscorecheck.model.IscoreResult; @Service public class CheckIscoreService extends CheckIscoreServiceBase { private static Logger log = LoggerFactory.getLogger(CheckIscoreService.class); private final CreditIscoreApiIScore iscoreApi; // Adjust your generated integration service constructor to inject Iscore API provider public CheckIscoreService(IntegrationEntityBuilder entityBuilder, EventProducerService eventProducer, CreditIscoreApiIScore iscoreApi) { super(entityBuilder, eventProducer); this.iscoreApi = iscoreApi; } // Example of a service implementation logic @NewSpan @Override public IscoreCheck execute(Account accountDetails) throws IscoreCheckError { log.info("CheckIscoreService.execute()"); try { ResponseEntity<IscoreResult> iscoreResult = iscoreApi.checkIscore(accountDetails.getAccountNumer); } catch(Exception e) { String errorMessage = String.format("Iscore check failed %s" ,e.getMessage()); throw new IscoreCheckError(errorMessage); } IscoreCheck iscoreCheck = this.entityBuilder.getIscore().getIscoreCheck().build(); iscoreCheck.setScore(iscoreResult.getScore()); iscoreCheck.setScoreComment(iscoreResult.getScoreComment()); return iscoreCheck; }