- SOAP signifie Simple Object Access P rotocole
- SOAP est un protocole de communication d'application
- SOAP est un format pour envoyer et recevoir des messages
- SOAP est indépendant de la plateforme
- SOAP est basé sur XML
- SOAP est une recommandation du W3C
Pourquoi SOAP?
Il est important pour les applications Web pour être en mesure de communiquer sur Internet.
La meilleure façon de communiquer entre les applications est sur HTTP, car HTTP est pris en charge par tous les navigateurs et les serveurs Internet. SOAP a été créé pour accomplir cette tâche.
SOAP fournit un moyen de communiquer entre les applications fonctionnant sur différents systèmes d'exploitation, avec différentes technologies et langages de programmation.
SOAP Building Blocks
Un message SOAP est un document XML ordinaire contenant les éléments suivants:
- Un élément d'enveloppe qui identifie le document XML en tant que message SOAP
- Un élément d'en-tête qui contient des informations d'en-tête
- Un élément de corps qui contient l'appel et la réponse des informations
- Un élément de défaut contenant des erreurs et des informations d'état
Tous les éléments ci-dessus sont déclarés dans l'espace de noms par défaut de l'enveloppe SOAP:
http://www.w3.org/2003/05/soap-envelope/
et l'espace de noms par défaut pour l'encodage SOAP et les types de données est:
http://www.w3.org/2003/05/soap-encoding
Règles de syntaxe
Voici quelques règles de syntaxe importantes:
- Un message SOAP DOIT être codé en utilisant XML
- Un message SOAP DOIT utiliser l'espace de noms SOAP Envelope
- Un message SOAP DOIT utiliser l'espace de noms SOAP Encoding
- Un message SOAP ne doit pas contenir une référence DTD
- Un message SOAP doit pas contenir de traitement XML Instructions
Squelette de message SOAP
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
L'enveloppe Élément SOAP
L'élément enveloppe SOAP requis est l'élément racine d'un message SOAP. Cet élément définit le document XML en tant que message SOAP.
Exemple
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
Le xmlns: savon Namespace
Notez le xmlns: namespace de savon dans l'exemple ci-dessus. Il doit toujours avoir la valeur de: "http://www.w3.org/2003/05/soap-envelope/" .
L'espace de noms définit l'enveloppe comme une enveloppe SOAP.
Si un espace de nom différent est utilisé, l'application génère une erreur et supprime le message.
Le encodingStyle Attribut
Le encodingStyle attribut est utilisé pour définir les types de données utilisés dans le document. Cet attribut peut apparaître sur un élément SOAP, et applique au contenu de l'élément et tous les éléments enfants.
Un message SOAP n'a pas l'encodage par défaut.
Syntaxe
soap:encodingStyle="URI"
Exemple
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
L'en-tête SOAP Element
L'élément SOAP Header option contient des informations spécifiques à l' application (like authentication, payment, etc) l' (like authentication, payment, etc) le (like authentication, payment, etc) sur le message SOAP.
Si l'élément d'en-tête est présent, il doit être le premier élément de l'élément d'enveloppe de l'enfant.
Note: Tous les éléments enfants immédiats de l'élément d' en- tête doivent être namespace qualifié.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
L'exemple ci - dessus contient un en- tête avec un "Trans" élément, un "mustUnderstand" attribut avec une valeur de 1, et une valeur de 234.
SOAP définit trois attributs dans l'espace de noms par défaut. Ces attributs sont: mustUnderstand, acteur et encodingStyle.
Les attributs définis dans la tête SOAP définit comment un destinataire doit traiter le message SOAP.
Le mustUnderstand Attribut
L'attribut SOAP mustUnderstand peut être utilisé pour indiquer si une entrée d'en-tête est obligatoire ou facultative pour le destinataire à traiter.
Si vous ajoutez mustUnderstand = "1" à un élément de l'élément d'en-tête de l'enfant, il indique que le récepteur traitement de l'en-tête doit reconnaître l'élément. Si le récepteur ne reconnaît pas l'élément, il échouera lors du traitement de l'en-tête.
Syntaxe
soap:mustUnderstand="0|1"
Exemple
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
L' actor Attribut
Un message SOAP peut se déplacer à partir d'un émetteur vers un récepteur en transmettant les différents points d'extrémité le long du chemin de message. Cependant, toutes les parties d'un message SOAP peuvent être prévus pour le point d'extrémité final, au contraire, il peut être destiné à une ou plusieurs des points de terminaison sur le chemin du message.
L'attribut SOAP acteur est utilisé pour traiter l'élément d'en-tête à un effet spécifique.
Syntaxe
soap:actor="URI"
Exemple
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:actor="http://www.w3ii.com/appml/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
Le encodingStyle Attribut
Le encodingStyle attribut est utilisé pour définir les types de données utilisés dans le document. Cet attribut peut apparaître sur un élément SOAP, et qu'il appliquera au contenu de cet élément et tous les éléments enfants.
Un message SOAP n'a pas l'encodage par défaut.
Syntaxe
soap:encodingStyle="URI"
L'élément SOAP Body
L'élément SOAP Body requis contient le message SOAP réel destiné au critère ultime du message.
éléments enfants immédiats de l'élément SOAP Body peut être namespace qualifié.
Exemple
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3ii.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
L'exemple ci-dessus demande le prix des pommes. Notez que le m: GetPrice et les éléments de l'article ci-dessus sont des éléments spécifiques à l'application. Ils ne sont pas une partie de l'espace de noms SOAP.
Une réponse SOAP pourrait ressembler à ceci:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
Le défaut Élément SOAP
L'élément de défaut SOAP en option est utilisé pour indiquer les messages d'erreur.
L'élément SOAP Fault détient des erreurs et des informations d'état d'un message SOAP.
Si un élément de défaut est présent, il doit apparaître comme un élément de l'élément du corps de l'enfant. Un élément de défaut ne peut apparaître qu'une fois dans un message SOAP.
L'élément de défaut SOAP a les sous-éléments suivants:
Sous élément | La description |
---|---|
<faultcode> | Un code d'identification de la faute |
<faultstring> | Une explication lisible par l'homme de la faute |
<faultactor> | Informations sur qui fait défaut de se produire |
<detail> | Contient des informations d'erreur d'application spécifique lié à l'élément de corps |
Codes d'erreur SOAP
Les valeurs de FaultCode définies ci-dessous doivent être utilisés dans l'élément faultcode lors de la description des défauts:
Erreur | La description |
---|---|
VersionMismatch | Trouvé un espace de noms non valide pour l'élément SOAP Envelope |
MustUnderstand | Un élément enfant immédiat de l'élément d' en- tête, avec le mustUnderstand attribut réglé sur "1" , n'a pas été compris |
Client | Le message a été mal formé ou contenait des informations incorrectes |
Server | Il y avait un problème avec le serveur de sorte que le message n'a pas pu procéder |
Le protocole HTTP
HTTP communique via TCP / IP. Un client HTTP se connecte à un serveur HTTP en utilisant TCP. Après avoir établi une connexion, le client peut envoyer un message de requête HTTP au serveur:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
Le serveur traite ensuite la demande et envoie une réponse HTTP au client. La réponse contient un code d'état indiquant l'état de la requête:
200 OK
Content-Type: text/plain
Content-Length: 200
Dans l'exemple ci-dessus, le serveur a renvoyé un code d'état de 200. Ceci est le code de réussite standard pour HTTP.
Si le serveur n'a pas pu décoder la demande, il pourrait avoir quelque chose de retour comme ceci:
400 Bad Request
Content-Length: 0
SOAP Reliure
La spécification SOAP définit la structure des messages SOAP, pas comment ils sont échangés. Cet écart est comblé par ce qu'on appelle "SOAP Bindings" . liaisons SOAP sont des mécanismes qui permettent aux messages SOAP d'être efficacement échangés en utilisant un protocole de transport.
La plupart des implémentations SOAP fournissent des liaisons pour les protocoles de transport communs, tels que HTTP ou SMTP.
HTTP est synchrone et largement utilisé. Une requête HTTP SOAP spécifie au moins deux en-têtes HTTP: Content-Type et Content-Length.
SMTP est asynchrone et est utilisé dans la dernière station ou des cas particuliers.
Implémentations Java de SOAP fournissent habituellement une liaison pour la JMS spécifique (Java Messaging System) de (Java Messaging System) protocole.
Content-Type
L' en- tête Content-Type pour une demande SOAP et sa réponse définit le type MIME pour le message et le codage de caractères (optional) utilisé pour le corps XML de la demande ou de la réponse.
Syntaxe
Content-Type: MIMEType; charset=character-encoding
Exemple
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length
L'en-tête Content-Length pour une requête SOAP et sa réponse indique le nombre d'octets dans le corps de la demande ou de la réponse.
Syntaxe
Content-Length: bytes
Exemple
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
Un exemple SOAP
Dans l'exemple ci-dessous, une demande de GetStockPrice est envoyé à un serveur. La demande a un paramètre de StockName, et un paramètre de prix qui sera renvoyé dans la réponse. L'espace de noms pour la fonction est définie dans "http://www.example.org/stock" .
Une requête 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/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
La réponse 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/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/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>