# Arquitectura Orientada a Serveis

L'Arquitectura Orientada a Serveis (en anglès Service Oriented Architecture), és un concepte d'arquitectura de programari que defineix la utilització de serveis per a donar suport als requisits del negoci.
Permet la creació de sistemes altament escalables que reflecteixen el negoci de l'organització, al seu torn brinda una forma estàndard d'exposició i invocació de serveis (comunament però no exclusivament serveis web), la qual cosa facilita la interacció entre diferents sistemes propis o de tercers.
SOA defineix les següents capes de programari:
* Aplicacions bàsiques - Sistemes desenvolupats sota qualsevol arquitectura o tecnologia, geogràficament dispersos i sota qualsevol figura de propietat.
* D'exposició de funcionalitats - On les funcionalitats de la capa aplicatives són exposades en forma de serveis (serveis web).
* D'integració de serveis - Faciliten l'intercanvi de dades entre elements de la capa aplicativa orientada a processos empresarials interns o en col·laboració.
* De composició de processos - Que defineix el procés en termes del negoci i les seves necessitats, i que varia en funció del negoci.
* De lliurament - on els serveis són desplegats als usuaris finals. SOA proporciona una metodologia i un marc de treball per a documentar les capacitats de negoci i pot donar suport a les activitats d'integració i consolidació.

## Disseny i desenvolupament SOA

La metodologia de modelatge i disseny per a aplicacions SOA es coneix com a anàlisi i disseny orientat a serveis.
L'arquitectura orientada a serveis és tant un marc de treball per al desenvolupament de programari com un marc de treball d'implementació.
Perquè un projecte SOA tingui èxit els desenvolupadors de programari han d'orientar-se ells mateixos a aquesta mentalitat de crear serveis comuns que són orquestrats per clients o middleware per a implementar els processos de negoci.
El desenvolupament de sistemes usant SOA requereix un compromís amb aquest model en termes de planificació, eines i infraestructura. Quan la majoria de la gent parla d'una arquitectura orientada a serveis estan parlant d'un joc de serveis residents en Internet o en una intranet, usant serveis web.
Existeixen diversos estàndards relacionats als serveis web. Inclouen els següents:
* XML
* HTTP
* SOAP
* WSDL
* UDDI
Cal considerar, no obstant això, que un sistema SOA no necessàriament necessita utilitzar aquests estàndards per a ser "orientat a serveis" però és altament recomanable el seu ús.
En un ambient SOA, els nodes de la xarxa fan disponibles els seus recursos a altres participants en la xarxa com serveis independents als quals tenen accés d'una manera estandarditzada. La majoria de les definicions de SOA identifiquen la utilització de Serveis Web (emprant SOAP i WSDL) en la seva implementació, no obstant això es pot implementar SOA utilitzant qualsevol tecnologia basada en serveis.

## Llenguatges d'alt nivell

Els llenguatges d'alt nivell com BPEL o W-coordination duen el concepte de servei un pas endavant al proporcionar mètodes de definició i suport per a fluxos de treball i processos de negoci.

## Beneficis

Els beneficis que pot obtenir una organització que adopti SOA són:
* Millora en els temps de realització de canvis en processos.
* Facilitat per a evolucionar a models de negocis basats en tercerització.
* Facilitat per a abordar models de negocis basats en col·laboració amb altres ens (socis, proveïdors).
* Poder per a reemplaçar elements de la capa aplicativa SOA sense disrupció en el procés de negoci.
* Facilitat per a la integració de tecnologies incompatibles.

## Bibliografia

* Norbert Bieberstein et al. Service-Oriented Architecture Compass, Pearson 2006, Arxivat 2007-03-12 a Wayback Machine. ISBN 0-13-187002-5

## Enllaços externs

* Espacio SOA Arxivat 2013-05-30 a Wayback Machine.: Bloc dedicat a les Arquitectures Orientades a Serveis (SOA) y BPM (Castellà)
* soaAgenda: article sobre SOA, BPM, i Ajax (Castellà)
* OASIS - Model de referència per SOA, (Anglès)
* Mule - SimphonySoft Arxivat 2010-06-07 a Wayback Machine. (Castellà)