En aquest tema, explorarem els conceptes de serveis i contractes dins de l'Arquitectura Orientada a Serveis (SOA). Els serveis són els components bàsics de SOA, mentre que els contractes defineixen com aquests serveis interactuen entre ells. Comprendre aquests conceptes és fonamental per dissenyar i implementar una arquitectura SOA efectiva.
- Què és un Servei?
Un servei en SOA és una unitat de funcionalitat que està disponible a través d'una xarxa i que pot ser utilitzada per altres components o aplicacions. Els serveis són autònoms, interoperables i reutilitzables.
Característiques dels Serveis:
- Autonomia: Els serveis funcionen de manera independent i no depenen d'altres serveis per executar-se.
- Reutilitzabilitat: Els serveis estan dissenyats per ser reutilitzats en diferents aplicacions i contextos.
- Interoperabilitat: Els serveis poden interactuar amb altres serveis, independentment de les plataformes o tecnologies subjacents.
- Descobribilitat: Els serveis poden ser descoberts i invocats dinàmicament a través de la xarxa.
Exemple de Servei:
@WebService
public class CalculadoraService {
@WebMethod
public int sumar(int a, int b) {
return a + b;
}
}En aquest exemple, CalculadoraService és un servei que proporciona una operació de suma. Aquest servei pot ser invocat per qualsevol client que conegui la seva ubicació i contracte.
- Què és un Contracte?
Un contracte en SOA defineix les interfícies i les polítiques que un servei exposa als seus consumidors. El contracte especifica què fa el servei, com s'ha d'invocar i quines són les seves restriccions.
Components d'un Contracte:
- Interfície del Servei: Defineix les operacions que el servei ofereix, incloent els noms de les operacions, els paràmetres d'entrada i sortida, i els tipus de dades utilitzats.
- Polítiques del Servei: Especifica les condicions sota les quals el servei opera, com ara les polítiques de seguretat, les polítiques de transacció i els acords de nivell de servei (SLA).
- Descripció del Servei: Proporciona informació addicional sobre el servei, com ara la seva ubicació, la seva documentació i els seus requisits de configuració.
Exemple de Contracte (WSDL):
<definitions name="CalculadoraService"
targetNamespace="http://example.com/calculadora"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://example.com/calculadora"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<message name="SumarRequest">
<part name="a" type="xsd:int"/>
<part name="b" type="xsd:int"/>
</message>
<message name="SumarResponse">
<part name="resultado" type="xsd:int"/>
</message>
<portType name="CalculadoraPortType">
<operation name="sumar">
<input message="tns:SumarRequest"/>
<output message="tns:SumarResponse"/>
</operation>
</portType>
<binding name="CalculadoraBinding" type="tns:CalculadoraPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sumar">
<soap:operation soapAction="sumar"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="CalculadoraService">
<port name="CalculadoraPort" binding="tns:CalculadoraBinding">
<soap:address location="http://example.com/calculadora"/>
</port>
</service>
</definitions>Aquest exemple de WSDL defineix el contracte per al servei CalculadoraService, especificant l'operació sumar amb els seus paràmetres d'entrada i sortida.
- Importància dels Contractes en SOA
Els contractes són crucials en SOA perquè proporcionen una descripció clara i formal de com interactuar amb els serveis. Això permet que els serveis siguin utilitzats de manera consistent i segura per diferents consumidors.
Beneficis dels Contractes:
- Claritat: Els contractes proporcionen una descripció precisa de les capacitats del servei.
- Compatibilitat: Asseguren que els serveis siguin compatibles amb els consumidors, independentment de les plataformes.
- Seguretat: Les polítiques definides en els contractes poden incloure mesures de seguretat per protegir les dades i les operacions del servei.
- Gestió de Canvis: Faciliten la gestió de canvis en els serveis, ja que els contractes poden ser versionats i actualitzats de manera controlada.
Exercici Pràctic
Exercici:
Crea un servei web senzill que proporcioni una operació per multiplicar dos nombres. Defineix el contracte del servei utilitzant WSDL.
Solució:
Servei:
@WebService
public class MultiplicadoraService {
@WebMethod
public int multiplicar(int a, int b) {
return a * b;
}
}Contracte (WSDL):
<definitions name="MultiplicadoraService"
targetNamespace="http://example.com/multiplicadora"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://example.com/multiplicadora"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<message name="MultiplicarRequest">
<part name="a" type="xsd:int"/>
<part name="b" type="xsd:int"/>
</message>
<message name="MultiplicarResponse">
<part name="resultado" type="xsd:int"/>
</message>
<portType name="MultiplicadoraPortType">
<operation name="multiplicar">
<input message="tns:MultiplicarRequest"/>
<output message="tns:MultiplicarResponse"/>
</operation>
</portType>
<binding name="MultiplicadoraBinding" type="tns:MultiplicadoraPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="multiplicar">
<soap:operation soapAction="multiplicar"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="MultiplicadoraService">
<port name="MultiplicadoraPort" binding="tns:MultiplicadoraBinding">
<soap:address location="http://example.com/multiplicadora"/>
</port>
</service>
</definitions>Conclusió
En aquesta secció, hem après què són els serveis i els contractes en SOA, així com la seva importància per a la interoperabilitat i la reutilització de components de programari. Els serveis proporcionen funcionalitats específiques, mentre que els contractes defineixen com interactuar amb aquests serveis de manera clara i segura. En el proper mòdul, explorarem els enfocaments de disseny de serveis per crear serveis efectius i eficients.
