Guía para principiantes de SOAP

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.

Bloques de Construcción de SOAP

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


Reglas de sintaxis

Estas son algunas de las reglas de sintaxis importantes:


La estructura básica de 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">

<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.


elemento SOAP

El elemento SOAP requerido es el elemento raíz de un mensaje SOAP. Se puede definir el documento XML como un mensaje SOAP.

Ejemplos

<?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>


xmlns: espacio de nombres de SOAP

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.


propiedad encodingStyle

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.

gramática

soap:encodingStyle="URI"

Ejemplos

<?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.


elemento de SOAP Header

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.


mustUnderstand atributo

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.

gramática

soap:mustUnderstand="0|1"

Ejemplos

<?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>


atributo de agente

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.

gramática

soap:actor="URI"

Ejemplos

<?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>


propiedad encodingStyle

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.

gramática

soap:encodingStyle="URI"

El elemento de cuerpo SOAP obligatorio contiene el mensaje SOAP real.


elemento de cuerpo SOAP

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.

Ejemplos

<?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.


elemento de error de SOAP

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

Códigos de error de SOAP

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.

protocolo HTTP

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


HTTP SOAP Binding

Método de SOAP se refiere al cumplimiento de las normas de codificación SOAP petición / respuesta HTTP.

HTTP + = XML de SOAP

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.


Content-Type

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).

gramática

Content-Type: MIMEType; charset=character-encoding

Ejemplos

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8


Content-Length

cabecera Content-Length para una petición SOAP y responder a las solicitudes o el número de bytes del cuerpo.

gramática

Content-Length: bytes

Ejemplos

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

Ejemplos de un SOAP

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"

solicitud SOAP:

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>

respuesta SOAP:

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>