**SOAP** (acrónimo de *Simple Object Access Protocol*) é un protocolo padrón creado por Microsoft, IBM e outros. Está actualmente baixo o auspicio da W3C que define como se poden comunicar dous obxectos en diferentes procesos por medio de intercambio de datos XML. SOAP é un dos protocolos utilizados nos servizos Web, no marco da coñecida coma arquitectura orientada ós servizos.

Concepto
--------

O concepto fundamental que hai tras SOAP é o *RPC* ou *Remote procedure call* (*chamada de procedemento remoto*). Baixo este concepto un ordenador pode enviar unha mensaxe a outro na rede. O ordenador receptor recibe a chamada pode controlala mediante un software local. Enviando, se fose necesario, unha resposta ó ordenador emisor.

Tecnoloxía
----------

A diferenza de DCOM e CORBA, que son binarios, SOAP usa o código textual XML, que facilita a eliminación de erros, co custo de ser menos eficiente. O intercambio de mensaxes realízase mediante tecnoloxía de compoñentes (*software componentry*, ver enxeñaría de software). O termo *Object* no nome significa que se adhire ao paradigma da programación orientada a obxectos.

SOAP é un marco extensíbel e descentralizado que permite traballar sobre múltiplas pilas de protocolos de redes informáticas. Os procedementos de chamadas remotas (RPC) poden ser modelados na forma de varios mensaxes SOAP interactuando entre si.

SOAP corre sobre calquera protocolo de Internet, xeralmente HTTP, que é o único homologado polo W3C. SOAP ten como base XML, cun deseño que cumpre o padrón Cabeceira-Desenvolvemento de deseño de software, como outros moitos deseños, tales como HTML. A cabeceira *Header* é opcional e contén metadatos sobre enrutamento (*routing*), seguridade ou transaccións. O desenvolvemento *Body* contén a información principal, que se coñece como carga útil (*payload*). A carga útil acóllese a un Schema XML propio.

Alternativas a SOAP
-------------------

Debido ao longo que é o formato XML, SOAP é considerablemente mais lento que outras tecnoloxías de middleware tales como CORBA. Tipicamente, SOAP é unhas 10 veces mais lento que un protocolo binario tal como RMI or IIOP.
Ademais, diversos autores teñen considerado a SOAP, unha interface moito máis complexa ca outras, especialmente REST. Así, por exemplo, Amazon ofreceu interfaces de ambos tipos ás súas plataformas, constatándose que a acollida da interface REST foi máis positiva por parte dos programadores web.

Exemplos de mensaxes SOAP
-------------------------

Como exemplo móstrase a forma en que un cliente solicitaría información dun produto a un provedor de servizos Web:

```
 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <getProductDetails xmlns="http://warehouse.example.com/ws">
       <produtId>827635</produtId>
     </getProductDetails>
   </soap:Body>
 </soap:Envelope>
```

O elemento *Envelope* é contedor da mensaxe SOAP. O seguinte elemento en importancia e obrigatorio é o *Body*, onde están os datos propios da chamada. Existe a posibilidade de declarar unha seción *Header*, mais esta é opcional. 

---

E esta sería a contestación do provedor:

```
 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <getProdutDetailsResponse xmlns="http://warehouse.example.com/ws">
       <getProductDetailsResult>
         <produtName>Toptimate 3-Pece Set</produtName>
         <produtId>827635</produtId>
         <description>3-Pece age set.  Black Polyester.</description>
         <prezo>96.50</prezo>
         <inStock>tro</inStock>
       </getProductDetailsResult>
     </getProdutDetailsResponse>
   </soap:Body>
 </soap:Envelope>
```

HTTP foi elixido como protocolo de transporte primario polas súas vantaxes, para lidar con devasas, por exemplo. Outros protocolos como XIOP/IIOP ou DCOM acostuman ser repelidos por estas devasas.

Estrutura
---------

Unha mensaxe SOAP consta de tres estruturas ben definidas: dúas obrigatorias: o *Envelope* ou sobre e o corpo da mensaxe e unha opcional: a cabeceira.

### Sobre (Envelope)

### Cabeceira (Header)

Trátase dunha sección xeralmente opcional, mais pode ser marcada como obrigatoria polo emisor da mensaxe, empregando o parámetro *MustUnderstand*. Se o receptor non está preparado para tratar devandita cabeceira produciríase un erro e a mensaxe non sería tratada.
Habitualmente a cabeceira pode levar dous tipos de información. Información relacionada coa seguridade ou identificación das partes implicadas, tales coma certificados electrónicos, sinaturas dixitais ou outros tipos de credenciais.
Ademais tamén pode conter diversos elementos en formato XML que conteñan información adicional sobre o proceso de negocio en curso.

### Corpo da mensaxe (Body)

Notas
-----

1. 1 2 3 4  Fitzgerald M. (2005). Anaya Multimedia, ed. *XML, Los mejores trucos*. ISBN 8441518130.
2. 1 2  VVAA (2001). Sams Indianapolis, ed. *Building Web Services with Java: Making Sense of Xml, Soap, Wsdl, and Uddi*. ISBN 0672321815.

Véxase tamén
------------

### Temas relacionados

* Inxeñaría de software (software componentry)
* Servizos Web, WSDL, UDDI
* WS-I
* SOA

### Ligazóns externas

* W3C SOAP primeiro
* XML protocol activity
* Technology Report
* two-way SOAP to CORBA bridge
* Discussion on Web Services technology (SOAP and REST)Arquivado 18 de decembro de 2005 en Wayback Machine.

|  |  |
| --- | --- |
| Control de autoridades | 
* Wd: Q189620
* GEC: 0523014
* LCCN: sh2002006007
* MAG: 17881449

 |