Service

The application component encapsulates its behavior in the internal functions, which are accessible only within the component itself. If it is necessary to enable invoking a specific function from an external environment, it must be exposed as a service through a well-defined interface.

An application service exposes the functionality of components to their environment.
(source: ArchiMate 3.0)

The difference between a function and a service is that services are black boxes, not exposing their internal behavior to the outside world. Other components expect the service to provide the functionality to them, yet they do not care how the service achieves it. The client of the service knows just what functionality it provides, the input it requires, and the output it returns. Input and output are defined as data objects.

Services are typically used to integrate different systems, but services may also serve as an integration instrument to interconnect various application components within a single system. Service is not the physical representation of the exposed functionality implemented in the particular technology, it is just its logical description. This allows using the services also for describing communication between application components other than systems, even between the logical ones, such as two information system modules: a marketing module may require data from the clients module. The Marketing module is not interested in where the Client module gets the data, the only thing the Marketing module needs to know is which service provides the data and what input parameters it requires.

For example, a CRM system provides a Contacts interface exposing Get Contact(id) and Create Contact(contact) services, which enable other applications to manipulate contacts without accessing CRM internal data directly.

aa

Documenting Services

Since services represent a binding contract between systems, they must be well documented:

  • Business description - the purpose of the service and the value it offers to its clients
  • System/Interface - which system/interface exposes the service
  • Input - data object describing the input
  • Output - data object representing the output