104 votes

Quelle est la différence entre la communication de style document et de style RPC?

Est-ce que quelqu'un peut m'expliquer les différences entre les services web de style Document et RPC? Mis à part JAX-RPC, la prochaine version est JAX-WS, qui prend en charge à la fois les styles Document et RPC. Je comprends également que les services web de style document sont destinés à la communication asynchrone où un client ne bloquerait pas jusqu'à ce que la réponse soit reçue.

De toute façon, en utilisant JAX-WS, j'annote actuellement le service avec @Webservice, génère le WSDL et à partir de ce WSDL, je génère les artéfacts côté client.

Une fois les artéfacts reçus, dans les deux styles, j'appelle la méthode sur le port. Maintenant, cela ne diffère pas en style RPC et style Document. Alors quelle est la différence et où cette différence est-elle visible?

De même, en quoi SOAP sur HTTP diffère-t-il de XML sur HTTP? Après tout, SOAP est également un document XML avec un espace de noms SOAP.

108voto

09Q71AO534 Points 2175

Quelqu'un peut-il m'expliquer les différences entre un style Document et un style RPC pour les services Web?

Il existe deux modèles de style de communication qui sont utilisés pour traduire un binding WSDL en un corps de message SOAP. Ce sont: Document & RPC

L'avantage d'utiliser un modèle de style Document est que vous pouvez structurer le corps SOAP comme vous le souhaitez tant que le contenu du corps du message SOAP est une instance XML arbitraire. Le style Document est également appelé style orienté message.

Cependant, avec un modèle de style RPC, la structure du corps de la requête SOAP doit contenir à la fois le nom de l'opération et l'ensemble des paramètres de méthode. Le modèle de style RPC suppose une structure spécifique pour l'instance XML contenue dans le corps du message.

De plus, il existe deux modèles d'utilisation d'encodage qui sont utilisés pour traduire un binding WSDL en un message SOAP. Ce sont: littéral et encodé

Lors de l'utilisation d'un modèle d'utilisation littéral, le contenu du corps doit correspondre à une structure XML-schema(XSD) définie par l'utilisateur. L'avantage est double. Tout d'abord, vous pouvez valider le corps du message avec le XML-schema défini par l'utilisateur, de plus, vous pouvez également transformer le message en utilisant un langage de transformation comme XSLT.

Avec un modèle d'utilisation (SOAP) encodé, le message doit utiliser des types de données XSD, mais la structure du message ne doit pas nécessairement correspondre à un schéma XML défini par l'utilisateur. Cela rend difficile la validation du corps du message ou l'utilisation de transformations basées sur XSLT sur le corps du message.

La combinaison des différents modèles de style et d'utilisation nous donne quatre façons différentes de traduire un binding WSDL en un message SOAP.

Document/littéral
Document/encodé
RPC/littéral
RPC/encodé

Je vous recommande de lire cet article intitulé Quel style de WSDL devrais-je utiliser? par Russell Butek qui offre une belle discussion sur les différents modèles de style et d'utilisation pour traduire un binding WSDL en un message SOAP, et leurs forces et faiblesses respectives.

Une fois que les artefacts sont reçus, dans les deux styles de communication, je invoque la méthode sur le port. Maintenant, cela ne diffère pas dans le style RPC et le style Document. Alors quel est la différence et où est cette différence visible?

L'endroit où vous pouvez trouver la différence est la "RÉPONSE"!

Style RPC:

package com.sample;

import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice { 

    public String getStockPrice(String stockName); 

    public ArrayList getStockPriceList(ArrayList stockNameList); 
}

Le message SOAP pour la deuxième opération aura une sortie vide et ressemblera à:

Réponse de style RPC:

Style Document:

package com.sample;

import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {

    public String getStockPrice(String stockName);

    public ArrayList getStockPriceList(ArrayList stockNameList);
}

Si nous exécutons le client pour l'interface fournie ci-dessus, la sortie est:

123 [123, 456]

Cette sortie montre que les éléments de ArrayList sont échangés entre le service web et le client. Ce changement a été effectué uniquement en modifiant l'attribut de style de l'annotation SOAPBinding. Le message SOAP pour la deuxième méthode avec un type de données plus riche est affiché ci-dessous à titre de référence:

Réponse de style Document:

123
456

Conclusion

  • Comme vous l'avez remarqué dans les deux messages de réponse SOAP, il est possible de valider le message de réponse SOAP dans le cas des services Web de style DOCUMENT mais pas dans les services Web de style RPC.
  • Le désavantage principal de l'utilisation du style RPC est qu'il ne supporte pas les types de données plus riches et celui de l'utilisation du style Document est qu'il introduit une certaine complexité sous forme de XSD pour définir les types de données plus riches.
  • Le choix entre les deux dépend des besoins de l'opération/méthode et des clients attendus.

De la même manière, en quoi le SOAP sur HTTP diffère-t-il du XML sur HTTP? Après tout, le SOAP est également un document XML avec un espace de noms SOAP. Alors, quelle est la différence ici?

Pourquoi avons-nous besoin d'une norme comme SOAP? En échangeant des documents XML sur HTTP, deux programmes peuvent échanger des informations riches et structurées sans l'introduction d'une norme supplémentaire telle que SOAP pour décrire explicitement un format d'enveloppe de message et un moyen d'encoder le contenu structuré.

SOAP fournit une norme afin que les développeurs n'aient pas à inventer un format de message XML personnalisé pour chaque service qu'ils veulent rendre disponible. Étant donné la signature de la méthode du service à appeler, la spécification SOAP prescrit un format de message XML non ambigu. Tout développeur familier avec la spécification SOAP, travaillant dans n'importe quel langage de programmation, peut formuler une requête SOAP XML correcte pour un service particulier et comprendre la réponse du service en obtenant les détails de services suivants.

  • Nom du service
  • Noms des méthodes implémentées par le service
  • Signature de chaque méthode
  • Adresse de l'implémentation du service (exprimée sous forme d'URI)

L'utilisation de SOAP simplifie le processus pour exposer un composant logiciel existant en tant que service Web car la signature de la méthode du service identifie la structure du document XML utilisée à la fois pour la requête et la réponse.

24voto

Mark Jeff Points 81

Un service web de style RPC utilise les noms de la méthode et de ses paramètres pour générer des structures XML représentant la pile d'appel d'une méthode. Le style Document indique que le corps SOAP contient un document XML qui peut être validé par rapport à un document de schéma XML prédéfini.

Un bon point de départ : Liens d'intérêt : Différence entre les services web de style Document et RPC

22voto

premraj Points 120

Dans la définition WSDL, les liaisons contiennent des opérations, voici le style de chaque opération.

Document : Dans le fichier WSDL, il spécifie les détails des types soit en ligne ou importe le document XSD, qui décrit la structure (c'est-à-dire le schéma) des types de données complexes échangés par ces méthodes de service qui rendent les services faiblement couplés. Le style Document est par défaut.

  • Avantage:
    • En utilisant ce style Document, nous pouvons valider les messages SOAP par rapport au schéma prédéfini. Il prend en charge les types de données et les modèles xml.
    • faiblement couplé.
  • Inconvénient: C'est un peu difficile à comprendre.

Dans les éléments types du WSDL, cela ressemble à ceci :

Le schéma est importé à partir d'une référence externe.

RPC : Dans le fichier WSDL, il ne crée pas de schéma de types, il définit les attributs de nom et de type à l'intérieur des éléments de message, ce qui les rend fortement couplés.

  • Avantage: Facile à comprendre.
  • Inconvénient:
    • nous ne pouvons pas valider les messages SOAP.
    • fortement couplé

RPC : Pas de types dans le WSDL
Document : La section Types serait disponible dans le WSDL

7voto

Tarun Chaudhary Points 161

Le scénario principal dans lequel JAX-WS utilise les styles RPC et Document est le suivant :

  • Le modèle Remote Procedure Call (RPC) est utilisé lorsque le consommateur considère le service web comme une seule application logique ou un composant avec des données encapsulées. Les messages de requête et de réponse correspondent directement aux paramètres d'entrée et de sortie de l'appel de procédure.

    Des exemples de ce type de modèle RPC pourraient inclure un service de paiement ou un service de cotation boursière.

  • Le modèle basé sur des documents est utilisé dans des situations où le consommateur considère le service web comme un processus métier de longue durée, où le document de requête représente une unité complète d'informations. Ce type de service web peut impliquer une interaction humaine, par exemple avec un document de demande de crédit contenant des offres provenant d'institutions de prêt. Étant donné que les processus métier de longue durée ne peuvent pas toujours renvoyer le document demandé immédiatement, le modèle basé sur des documents est plus couramment utilisé dans les architectures de communication asynchrones. La variation Document/literal de SOAP est utilisée pour implémenter le modèle de service web basé sur des documents.

5voto

Sumant Pandey Points 21

Document
Les messages de style Document peuvent être validés par rapport à un schéma prédéfini. Dans le style document, un message SOAP est envoyé sous forme de document unique. Exemple de schéma:

Exemple de message de corps SOAP de style document

      element="tns:getHelloWorldAsStringResponse"/>   

Le message de style document est faiblement couplé.

RPC Les messages de style RPC utilisent le nom de la méthode et les paramètres pour générer une structure XML. Les messages sont difficiles à valider par rapport au schéma. Dans le style RPC, un message SOAP est envoyé sous forme de nombreux éléments.

     type="xsd:string"/>   

     type="xsd:string"/>   

Ici, chaque paramètre est spécifié de manière discrète, Le message de style RPC est étroitement couplé, est généralement statique, nécessitant des modifications sur le client lorsque la signature de la méthode change Le style rpc est limité à des types XSD très simples tels que String et Integer, et le WSDL résultant n'aura même pas de section types pour définir et contraindre les paramètres

Literal Par défaut. Les données sont sérialisées en fonction d'un schéma, le type de données n'est pas spécifié dans les messages mais une référence au schéma (espace de noms) est utilisée pour construire les messages SOAP.

        5
        5.0

Encoded Type de données spécifié pour chaque paramètre

         5
         5.0

Sans schéma

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X