There are many different definitions for what a service-oriented architecture is. This variation is mainly because we lack a common understanding of what we exactly mean when we call something a “service”.
The Webster dictionary defines Service as “performance of labor (capability) for the benefit of another (…) at another’s command”. This helps to bring an understanding that Service is a capability offered by a Service Provider to a Service Consumer.
When applied to information technology, a component is called a Service when it supports all five of the fundamental properties: A Service is an entity that is Abstract, Reusable, Stateless, Technologically Agnostic, and Functionally Decoupled.
Abstract
Services are described in a natural language close to the domain knowledge they represent, in terms related to functions they are expected to perform. A Service description is an integral part of the service, and must be enough so that consumers may rely only on this description to decide if a service is appropriate for their needs.
Services are components. As such they adhere to a communication agreement defined by its public interface and its description. All details of a service must be hidden from consumers, including their locality. Their existence transcend their locality and their physical location is irrelevant.
Reusable
Services are reusable representations of work. Services should be designed as coarse-grained reusable units, without sacrifice to reuse in a finer-grained level.
Stateless
Services should not retain state between invocations. A physical definition of a service should not consider time as one of its variables. Business state should not be considered an extension of the service, but instead it is part of a meta-model representing the work flow.
Agnostic
A Service is ignorant about any physical matters outside of the scope of its own execution. A service is agnostic in terms of technology, protocols, and can potentially be written in any language.
Decoupled
Services do not rely on anything else other than other component’s public contract; dependencies must be loosely coupled.
A service defines means in which the needs of a consumer are brought together with the capabilities of a provider. Access to a service is granted based on constraint or policies defined as part of the service descriptor. The agent who exposes a service is called a service provider and any agent who uses the service is called a service consumer.
In essence, services are not a breakthrough. Services are not related to specific technologies or protocols. Services are components built around proven patterns and best practices brought together throughout years of experience on the development of large scale information systems.
October 2, 2008 at 09:42
[...] Services are macro functions of the architecture – please do not be confused with Web Services. Services are reusable components, decoupled from each other, stateless from the service consumer’s standpoint and agnostic in terms of languages, technologies, formats and transports. [...]
November 1, 2008 at 10:15
[...] Functions of the architecture are defined in terms of services [...]