Hi,
We have moved on to microservices design in FINERACT CN.
In microservices, each service may talk to multiple microservices in order
for its functioning.
Following two libraries can be built and be imported by each microservice.
Details of these are as follows.
1. *fineract-util-lib*
- *Functionality It may include:*
- request-id -> on each API request, a request-id(UUID) will be
generated if not present already. It will be added to each
API call to or
from a microservice. For example microservice A calls microservice B,
microservice B calls microservice C, each request will
contain a common
request-id header. This will help in easy debugging of flow
and bugs. A
single request-id will be present across all subsequent calls.
- Basic connection configurations like database connections. redis
connections etc.
- Standardisation of logs across services, this util will provide
standard logging functions.
- Standardization of request and responses -> A wrapper can be
written over Rest client like RestTemplate which is used for API calls
across services. It will standardize our Request and Response
Objects, auto
wrapping/unwrapping responses in pre-defined JSONs.
- Exception Handling -> Instead of throwing of different
exceptions from each service, some common exceptions like BAD_REQUEST,
RESOURCE_NOT_FOUND, a standard exception handling can be
done, which will
wrap exceptions and throw JSON in predefined formats. Even
case of internal
server errors this library function will wrap exception in pre-defined
formats. Also, we can add some sort of additional exception code in
Response which can be used alongside HTTP status code.
- Pre-defined JSON will ease out consumers/UI developer, thereby
reducing their effort of handling multiple responses.They
will have to deal
with only single response in case of success and failure
both. For Example
Exception Response : { result : {}, httpStatusCode : 401, error :
{errorMessage : "Authentication Exception", exceptionCode :
"AUTH101"}},
Result Response : { result : {id : 123, name : "Rahul"},
httpStatusCode :
200, error : null}
- Implementing Queues and providing various functions like
publishToQueue(), publishToQueueAsync() etc.
- This may contain some basic integrations with other services
like SMS/EMAIL service. It will provide direct methods to
send SMS/EMAILs
thereby reducing the effort of each microservice developer of
integrating
SMS/EMAIL service and doing exception handling.
- Apart from these, this util can contain some basic methods like
string parsing methods, some validation methods etc.
2. *fineract-models*
- *Functionality It may include:*
- Since our code base is in JAVA and JAVA is strongly typed, Each
microservice developer will be writing DTO(DATA TRANSFER
OBJECT) for its
individual API and for consuming responses from other services.
- We can add all DTOs classes to a common library. This will
reduce chances of errors while consuming responses from other
microservices, also reducing effort of the developer in writing
same DTO classes again and again in each different microservices.
- By doing this, we will be ensuring strong contracts between APIs
and will also be reducing development effort and time.
*We can add these two library ideas as part of our GSOC projects for the
year 2018.*
Please feel free to share your thoughts and feedback on above proposal.
--
RAHUL GOEL