Microservice API Patterns in Lakeside Mutual

February 18, 2022 ยท View on GitHub

A number of Microservice API Patterns (MAP) realization examples can be found in the interface layers of the Java backends that implement the Lakeside Mutual microservices.

Responsibility Patterns

PatternExample (Class)Backend Microservice(s)
Endpoint roles
Processing ResourceInsuranceQuoteRequestProcessingResource.javaPolicy Management
Information Holder ResourceCustomerInformationHolder.javaCustomer Core
NotificationInformationHolder.javaCustomer Management
InteractionLogInformationHolder.javaCustomer Management
Master Data HolderCustomerInformationHolder.javaCustomer Core
PolicyInformationHolder.javaPolicy Management
UserInformationHolder.javaCustomer Self Service
Operational Data HolderInsuranceQuoteRequestProcessingResource.javaPolicy Management
InsuranceQuoteRequestProcessingResource.javaCustomer Self Service
Reference Data HolderCityReferenceDataHolder.javaCustomer Core
Data Transfer ResourceRisk report transfer service (gRPC protocol buffer)Risk Management
Link Lookup Resourcetba
Operation Responsibilities
Computation FunctioncomputeRiskFactor in RiskComputationService.javaPolicy Management
Retrieval OperationgetInsuranceQuoteRequests in InsuranceQuoteRequestProcessingResource.javaCustomer Self Service, Policy Management
State Creation OperationcreateInsuranceQuoteRequest in InsuranceQuoteRequestProcessingResource.javaCustomer Self Service
State Transition OperationrespondToInsuranceQuote in InsuranceQuoteRequestProcessingResource.javaCustomer Self Service, Policy Management

Quality Patterns

PatternExample (Class)Backend Microservice(s)
Quality Management and Governance
API KeyAPIKeyAuthenticationManager.javaCustomer Core
Rate LimitRateLimitInterceptor.javaCustomer Self Service
Error ReportErrorController.javaCustomer Core
ErrorController.javaCustomer Management
ErrorController.javaCustomer Self Service
ErrorController.javaPolicy Management
CustomerInformationHolder.javaPolicy Management
Data Transfer Parsimony
Wish ListCustomerInformationHolder.javaCustomer Core
PolicyInformationHolder.javaPolicy Management
Wish Templatetba
Request BundleCustomerInformationHolder.javaCustomer Core
Conditional Requesttba
Reference Management
Embedded EntitycustomerProfile in CustomerDto.javae.g. Customer Management
Linked Information HolderCustomerInformationHolder.javaPolicy Management

Structure Patterns

PatternExample (Class)Backend Microservice(s)
Atomic ParameterCitiesResponseDto.javaCustomer Core
Atomic Parameter ListAddressDto.javaCustomer Core
Parameter TreeCustomerResponseDto.javaCustomer Core
Parameter ForestCustomersResponseDto.javaCustomer Core
PaginationCustomerInformationHolder.javaCustomer Core
PaginatedCustomerResponseDto.javaCustomer Core
PaginatedPolicyResponseDto.javaPolicy Management
Context Representationtba
Element Stereotypes
Data ElementData Transfer Objects (DTOs) in *.interfaces.dtos.* packagesAll microservices
Id ElementcustomerId in CustomerDto.javaCustomer Management, other microservices
Link ElementPagination links in createPaginatedCustomerResponseDto in CustomerInformationHolder.javaCustomer Core
Metadata ElementControl variant: instances of Pagination (e.g., PaginatedCustomerResponseDto.java)Customer Core
Aggregation variant: counts and averages in risk reports (CSV)Risk Management
Provenance variant: tba

Note that some classes appear in several projects; microservices are not supposed to share code libraries because that would break their independent deployability, one of the defining microservices tenets.

What are Microservices? Why Patterns?

Some answers to these questions can be found on the MAP website.