Service-Oriented Architecture is a type of software design characterised by loosely coupled services provided to neighbouring application components which communicate over a network.
Services are similar to bounded contexts, as defined by DDD, and have four properties:
- Logically represents a business activity with a specified outcome.
- A black box to its consumers.
- May consist of underlying services.
- Business value is given more importance than technical strategy.
- Strategic goals are given more importance than project-specific benefits.
- Intrinsic interopability is given more importance than custom integration.
- Shared services are given more importance than specific-purpose implementations.
- Flexibility is given more importance than optimisation.
- Evolutionary refinement is given more importance than pursuit of initial perfection.
There's no industry standard defining exact composition of SOA, but principles found in published guidelines include:
- Standardised service contracts defining communications agreements collectively by one or more service-description documents.
- Service reference autonomy minimises awareness of neighbouring services to just awareness.
- Service location transparency allows services to be queried from anywhere on the network.
- Service longevity allows downstream services to rely upon their current implementations being valid in the future, even as the service evolves. Versioning is best practice.
- Service abstraction requires that services hide their inner logic from consumers.
- Service autonomy grants each service independence over their functionality from a design-time and run-time perspective.
- Service statelessness reduces operational complexity, and centralises management of storage.
- Service granularity gives each service an adequate size and scope, ensuring they provide functionality relevant to consumers.
- Service normalisation requires decomposition of redundant services to remove redundancy.
- Service composability allows services to be composed based on other services.
- Service discovery grants consumers communicative metadata by which they can be discovered and interpreted.
- Service reusability divides logic into various services, allowing code reuse.
- Service encapsulation allows external or unplanned services to become a part of SOA, either through encapsulation or rework.
- Service providers create web services and provide information to the service registry. Providers must negotiate which services will be exposed, the importance level of security, ease of access, pricing and to which other services the service should be exposed to (trading agreements).
- Service brokers, registries or repositories make information about Services available to consumers. They might be either public or private.
- Service requesters/consumers locate entries in the broker/registry/repository and bind to the service providers to invoke services.