SOAP (originalmente las siglas de Simple Object Access Protocol) es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML. Este protocolo deriva de un protocolo creado por Dave Winer en 1998, llamado XML-RPC. SOAP fue creado por Microsoft, IBM y otros. Está actualmente bajo el auspicio de la W3C. Es uno de los protocolos utilizados en los servicios Web.
Un mensaje SOAP es un documento XML que contiene ordinaria los siguientes elementos:
Todos los elementos anteriores se declaran en espacio de nombres predeterminado para el sobre SOAP en:
http://www.w3.org/2001/12/soap-envelope
Y espacio de nombres para codificación SOAP y tipos de datos por defecto:
http://www.w3.org/2001/12/soap-encoding
Estas son algunas de las reglas de sintaxis importantes:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
elemento SOAP es el uso obligatorio del elemento raíz de un mensaje SOAP.
El elemento SOAP requerido es el elemento raíz de un mensaje SOAP. Se puede definir el documento XML como un mensaje SOAP.
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> ... Message information goes here ... </soap:Envelope>
mensaje SOAP debe tener el espacio de nombres "http://www.w3.org/2001/12/soap-envelope" un elemento Envelope asociado con él.
Si utiliza un espacio de nombres diferente, el error en la aplicación y descartar el mensaje.
SOAP atributo encodingStyle para las definiciones de tipos de datos utilizados en el documento. Este atributo puede aparecer en cualquier elemento SOAP, y se aplicará a todos los sub-elementos y elemento de contenido del elemento.
mensaje SOAP hay codificación predeterminada.
soap:encodingStyle="URI"
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> ... Message information goes here ... </soap:Envelope>
El elemento de SOAP encabezado opcional contiene información de cabecera.
El elemento de SOAP encabezado opcional contiene información específica de la aplicación sobre el mensaje SOAP (como la autenticación, pago, etc.).
Si el elemento de cabecera está presente, debe ser el primer elemento hijo del elemento del sobre.
Nota: Todos loselementos secundarios inmediatos del elemento de conexión deben ser espacio de nombres cualificado.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
El ejemplo anterior contiene un encabezado con un elemento de "Trans", su valor es 234, el valor "mustUnderstand" atributo de este elemento es "1"
SOAP en el espacio de nombres por defecto ( "http://www.w3.org/2001/12/soap-envelope") define tres atributos.
Las tres propiedades son: actor, mustUnderstand y encodingStyle. Estos se definen en el atributo de encabezado SOAP define cómo un receptor debe procesar el mensaje de SOAP.
El atributo de SOAP mustUnderstand se puede utilizar para identificar el título del receptor a tratar es obligatorio u opcional.
Si cuando se agrega "mustUnderstand =" 1 ", indica que el receptor procesar el encabezado debe reconocer el elemento. Si el receptor no reconoce este elemento en el proceso de esta cabecera a un elemento hijo del elemento Header se debe fallar.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
Pase lo largo de la ruta del mensaje a través de diferentes puntos finales, los mensajes SOAP pueden ser transmitidos desde un emisor a un receptor. No todas las partes del mensaje SOAP destinado para el punto final último del mensaje SOAP, sin embargo, otro aspecto, tal vez la intención de transmitir un mensaje a la ruta de acceso en uno o más puntos finales.
El atributo de SOAP actor puede ser usado para abordar el elemento de cabecera a un punto final particular.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:actor="http://www.w3schools.com/appml/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
SOAP atributo encodingStyle para las definiciones de tipos de datos utilizados en el documento. Este atributo puede aparecer en cualquier elemento SOAP, y se aplicará a todos los sub-elementos y elemento de contenido del elemento.
mensaje SOAP hay codificación predeterminada.
soap:encodingStyle="URI"
El elemento de cuerpo SOAP obligatorio contiene el mensaje SOAP real.
elementos de SOAP para el cuerpo requiere puede incluir el mensaje SOAP real previsto para el último punto final del mensaje.
elementos secundarios inmediatos del elemento de cuerpo SOAP pueden ser espacio de nombres cualificado.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3schools.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
El ejemplo anterior pide al precio de las manzanas. Tenga en cuenta que la m sobre: GetPrice y elementos Item son elementos específicos de la aplicación. No son parte de la norma SOAP.
Y una respuesta SOAP debería tener este aspecto:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
elemento de error de SOAP utilizado para mensaje de error SOAP y la información de estado restante.
El elemento error de SOAP opcional se utiliza para indicar un mensaje de error.
Si usted ha proporcionado el elemento de fallo, debe ser el elemento hijo del elemento de cuerpo. En un mensaje SOAP, elemento de falta sólo puede aparecer una vez.
El elemento error de SOAP tiene las siguientes sub-elementos:
Subelementos | descripción |
---|---|
<Faultcode> | Para la identificación de los códigos de error |
<Faultstring> | Descripción para la gente a leer sobre el fracaso |
<Faultactor> | Información sobre quién causó el fallo |
<Detalle> | Cuerpo del elemento de retención de la participación de mensaje de error específico de la aplicación |
En valores FaultCode se definen a continuación que debe ser usado para describir los elementos faultcode errores en:
error | descripción |
---|---|
VersionMismatch | espacio de nombres no válido elemento SOAP se encuentra |
MustUnderstand | Un elemento secundario inmediato del elemento de cabecera (con el valor "1" mustUnderstand atributo) no puede ser entendida. |
cliente | El mensaje se ha formado de manera incorrecta o contiene información incorrecta. |
servidor | El servidor tiene un problema y no puede continuar el proceso. |
HTTP para comunicarse a través de TCP / IP. cliente HTTP utiliza una conexión TCP con el servidor HTTP. Una vez establecida la conexión, el cliente puede enviar un mensaje de petición HTTP al servidor:
POST /item HTTP/1.1 Host: 189.123.255.239 Content-Type: text/plain Content-Length: 200
El servidor procesa la solicitud y envía una respuesta HTTP al cliente. Esta respuesta contiene el estado de la solicitud puede indicar los códigos de estado:
200 OK Content-Type: text/plain Content-Length: 200
En el ejemplo anterior, el servidor devuelve un código de estado 200. Este es un código estándar HTTP éxito.
Si el servidor no puede decodificar la solicitud, se puede devolver un mensaje similar a este:
400 Bad Request Content-Length: 0
Método de SOAP se refiere al cumplimiento de las normas de codificación SOAP petición / respuesta HTTP.
solicitud SOAP podría ser un HTTP POST o petición HTTP GET.
solicitud HTTP POST especifica al menos dos cabeceras HTTP: Content-Type y Content-Length.
tipo MIME de una petición SOAP y su respuesta cabecera Content-Type para definir el mensaje y la codificación de caracteres para el cuerpo XML de la petición o respuesta (opcional).
Content-Type: MIMEType; charset=character-encoding
POST /item HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8
cabecera Content-Length para una petición SOAP y responder a las solicitudes o el número de bytes del cuerpo.
Content-Length: bytes
POST /item HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8 Content-Length: 250
En el siguiente ejemplo, una solicitud GetStockPrice se envía al servidor. Esta solicitud tiene un StockName parámetros, pero la respuesta se devuelve en un parámetro de precio. Este espacio de nombres de función se define en esta dirección: "http://www.example.org/stock"
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>