There's no perfect definition for ESB: the scope and role may vary depending on the needs at hand. One of the most important things that you can do via ESB is to decouple the client from the service providers:
ESB helps to have:
- a service location transparency
- sharing of services accross the enterprise
- separate the business service from service implementation
The ability to redirect a client request to a particular service provider based on deterministic or variable routing criteria.
Types of routing to consider:
- static or deterministic routing
- content based routing
- policy based routing
- complex rules based routing
The ability to transform the client request to the format the service provider expects it. Most used transformations are:
- Xml -> Xml
- Xml -> Cobol
- Object -> Xml Xml -> Json etc.
The ability to enrich,enhance the message that comes as request as the service provide requires.Types of message enforcement:
- Date format conversion
- Data conversion (ex: transform spaces to 0)
- Rule based enhancements. (ex: if message is from x add some information to the request)etc.
The ability to accept from the consumer one type of protocol as input (ex SOAP/JMS) and communicate to the service provider other protocol (ex: IIOP)
The ability to translate a business service into the corresponding service implementation and provide binding and location information
The ability to manage the coordination of multiple implementation services.
The ability to provide a single unit of work for a business service request by providing a framework for the coordination of multiple resources across multiple disparate services
(see more WS – Coordination)
The ability to protect enterprise services from unauthorized access
ESB should provide 4A’s of security :