문서 스타일과 RPC 스타일 통신의 차이점은 무엇입니까?


94

누군가 문서와 RPC 스타일 웹 서비스의 차이점을 설명해 줄 수 있습니까? JAX-RPC와 별도로 다음 버전은 JAX-WS로 Document 및 RPC 스타일을 모두 지원합니다. 또한 문서 스타일 웹 서비스는 응답이 수신 될 때까지 클라이언트가 차단되지 않는 비동기 통신을위한 것임을 이해합니다.

어느 쪽이든 JAX-WS를 사용하여 현재 @Webservice로 서비스에 주석을 달고 WSDL을 생성하고 해당 WSDL에서 클라이언트 측 아티팩트를 생성합니다.

아티팩트가 수신되면 두 스타일 모두에서 포트에서 메소드를 호출합니다. 이제 이것은 RPC 스타일과 문서 스타일에서 다르지 않습니다. 그렇다면 차이점은 무엇이며 그 차이점은 어디에 있습니까?

마찬가지로 SOAP over HTTP는 XML over HTTP와 어떤 점에서 다릅니 까? 결국 SOAP는 SOAP 네임 스페이스가있는 XML 문서이기도합니다.


답변:


99

어떤 본문이 문서 스타일과 RPC 스타일 웹 서비스의 차이점을 설명 할 수 있습니까?

WSDL 바인딩을 SOAP 메시지 본문으로 변환하는 데 사용되는 두 가지 통신 스타일 모델이 있습니다. 그들은 다음과 같습니다 : 문서 및 RPC

문서 스타일 모델 사용장점은 SOAP 메시지 본문의 내용이 임의의 XML 인스턴스 인 한 원하는 방식으로 SOAP 본문을 구조화 할 수 있다는 것입니다. 문서 스타일은 메시지 지향 스타일 이라고도합니다 .

그러나 RPC 스타일 모델 에서는 SOAP 요청 본문의 구조에 작업 이름과 메서드 매개 변수 집합이 모두 포함되어야합니다. RPC 스타일 모델은 메시지 본문에 포함 된 XML 인스턴스에 대한 특정 구조를 가정합니다 .

또한 WSDL 바인딩을 SOAP 메시지로 변환하는 데 사용되는 두 가지 인코딩 사용 모델이 있습니다. 그들은 : 리터럴 및 인코딩

리터럴 사용 모델을 사용하는 경우 본문 내용은 사용자 정의 XML 스키마 (XSD) 구조를 따라야합니다 . 장점은 두 가지입니다. 우선 사용자 정의 XML 스키마를 사용하여 메시지 본문의 유효성을 검사 할 수 있으며 XSLT와 같은 변환 언어를 사용하여 메시지를 변환 할 수도 있습니다.

(SOAP) 인코딩 된 사용 모델 을 사용하는 경우 메시지는 XSD 데이터 유형을 사용해야하지만 메시지 구조는 사용자 정의 XML 스키마를 준수 할 필요가 없습니다. 이로 인해 메시지 본문의 유효성을 검사하거나 메시지 본문에서 XSLT 기반 변환을 사용하기가 어렵습니다.

다른 스타일과 사용 모델의 조합은 WSDL 바인딩을 SOAP 메시지로 변환하는 네 가지 방법을 제공합니다.

Document/literal
Document/encoded
RPC/literal
RPC/encoded

어떤 스타일의 WSDL을 사용해야합니까? 라는 제목의이 기사를 읽어 보는 것이 좋습니다 . 러셀 부텍 (Russell Butek)은 WSDL 바인딩을 SOAP 메시지로 변환하는 모델을 사용하여 다양한 스타일에 대해 잘 설명하고 있으며 상대적인 강점과 약점을 설명합니다.

아티팩트가 수신되면 두 가지 유형의 통신 모두에서 포트에서 메소드를 호출합니다. 이제 이것은 RPC 스타일과 문서 스타일에서 다르지 않습니다. 그렇다면 차이점은 무엇이며 그 차이점은 어디에 있습니까?

차이점을 찾을 수있는 곳은 "응답"입니다!

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); 
}

두 번째 작업에 대한 SOAP 메시지는 빈 출력을 가지며 다음과 같이 표시됩니다.

RPC 스타일 응답 :

<ns2:getStockPriceListResponse 
       xmlns:ns2="http://sample.com/">
    <return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>

문서 스타일 :

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);
}

위의 SEI에 대해 클라이언트를 실행하면 출력은 다음과 같습니다.

123 [123, 456]

이 출력은 ArrayList 요소가 웹 서비스와 클라이언트간에 교환되고 있음을 보여줍니다. 이 변경은 SOAPBinding 주석의 스타일 속성을 변경함으로써 만 수행되었습니다. 더 풍부한 데이터 유형을 가진 두 번째 메소드에 대한 SOAP 메시지는 참조를 위해 아래에 표시됩니다.

문서 스타일 응답 :

<ns2:getStockPriceListResponse 
       xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>

결론

  • 두 SOAP 응답 메시지에서 알 수 있듯이 DOCUMENT 스타일의 경우 SOAP 응답 메시지의 유효성을 검사 할 수 있지만 RPC 스타일 웹 서비스에서는 확인할 수 없습니다.
  • RPC 스타일을 사용할 때 의 기본적인 단점은 더 풍부한 데이터 유형을 지원하지 않는다는 것이고 문서 스타일을 사용하는 것의 단점은 더 풍부한 데이터 유형을 정의하기 위해 XSD의 형태로 약간의 복잡성을 가져온다는 것입니다.
  • 이 중 하나를 사용하는 선택은 작업 / 방법 요구 사항 및 예상되는 클라이언트에 따라 다릅니다.

마찬가지로 SOAP over HTTP와 XML over HTTP는 어떤 점에서 다릅니 까? 결국 SOAP는 SOAP 네임 스페이스가있는 XML 문서이기도합니다. 그렇다면 여기서 차이점은 무엇입니까?

SOAP와 같은 표준이 필요한 이유는 무엇입니까? HTTP를 통해 XML 문서를 교환함으로써 두 프로그램은 SOAP와 같은 추가 표준을 도입하지 않고도 풍부하고 구조화 된 정보를 교환하여 메시지 봉투 형식을 명시 적으로 설명하고 구조화 된 콘텐츠를 인코딩 할 수 있습니다.

SOAP는 표준을 제공하므로 개발자는 제공하려는 모든 서비스에 대해 사용자 정의 XML 메시지 형식을 만들 필요가 없습니다. 호출 할 서비스 메서드의 서명이 주어지면 SOAP 사양은 명확한 XML 메시지 형식을 규정합니다. 임의의 프로그래밍 언어로 작업하는 SOAP 사양에 익숙한 개발자는 특정 서비스에 대한 올바른 SOAP XML 요청을 공식화하고 다음 서비스 세부 정보를 얻어 서비스의 응답을 이해할 수 있습니다.

  • 작업 명
  • 서비스에 의해 구현 된 메서드 이름
  • 각 메서드의 메서드 서명
  • 서비스 구현 주소 (URI로 표시됨)

SOAP를 사용하면 서비스의 메서드 서명이 요청과 응답 모두에 사용되는 XML 문서 구조를 식별하므로 기존 소프트웨어 구성 요소를 웹 서비스로 노출하는 프로세스가 간소화됩니다.


"어떤 스타일의 WSDL을 사용해야합니까?"에 대해 특별히 감사드립니다. 기사 링크.
Boolean_Type

23

RPC 스타일 웹 서비스는 메서드의 이름과 해당 매개 변수를 사용하여 메서드의 호출 스택을 나타내는 XML 구조를 생성합니다. 문서 스타일은 SOAP 본문에 미리 정의 된 XML 스키마 문서에 대해 유효성을 검사 할 수있는 XML 문서가 포함되어 있음을 나타냅니다.

좋은 출발점 : SOAP 바인딩 : 문서와 RPC 스타일 웹 서비스의 차이점


20

WSDL 정의에서 바인딩에는 작업이 포함되며 여기에는 각 작업에 대한 스타일이 있습니다.

문서 : WSDL 파일에서 인라인이있는 타입 세부 사항을 지정하거나 느슨하게 결합 된 서비스 메소드에 의해 교환되는 복잡한 데이터 타입의 구조 (즉 스키마)를 설명하는 XSD 문서를 가져옵니다. 문서 스타일이 기본값입니다.

  • 장점 :
    • 이 문서 스타일을 사용하여 미리 정의 된 스키마에 대해 SOAP 메시지의 유효성을 검사 할 수 있습니다. xml 데이터 유형 및 패턴을 지원합니다.
    • 느슨한 결합.
  • 단점 : 이해하기 조금 어렵습니다.

WSDL 유형에서 요소는 다음과 같습니다.

<types>
 <xsd:schema>
  <xsd:import schemaLocation="http://localhost:9999/ws/hello?xsd=1" namespace="http://ws.peter.com/"/>
 </xsd:schema>
</types>

스키마가 외부 참조에서 가져 오는 중입니다.

RPC : WSDL 파일에서는 유형 스키마를 생성하지 않으며 메시지 요소 내에서 밀접하게 결합되는 이름 및 유형 속성을 정의합니다.

<types/>  
<message name="getHelloWorldAsString">  
<part name="arg0" type="xsd:string"/>  
</message>  
<message name="getHelloWorldAsStringResponse">  
<part name="return" type="xsd:string"/>  
</message>  
  • 장점 : 이해하기 쉽습니다.
  • 단점 :
    • SOAP 메시지의 유효성을 검사 할 수 없습니다.
    • 단단히 결합

RPC : WSDL
문서에 유형 없음 : WSDL에서 유형 섹션을 사용할 수 있음


참조에있는 내용을 반복했습니다. 이 설명은 차이점을 이해하는 데 도움이되지 않습니다.
kinunt

1
이것은 확실히 참조 나 문서에서 나온 것이 아닙니다. 문법 오류로 가득 차 있습니다
specializt

7

JAX-WS RPC문서 스타일이 다음과 같이 사용되는 기본 시나리오 :

  • 원격 프로 시저 호출 (RPC) 소비자가 캡슐화 된 데이터를 하나의 논리적 응용 프로그램 또는 구성 요소로 웹 서비스를 볼 때 패턴이 사용됩니다. 요청 및 응답 메시지는 프로 시저 호출의 입력 및 출력 매개 변수에 직접 매핑됩니다.

    이 유형의 예로 RPC 패턴에는 지불 서비스 또는 주식 시세 서비스가 포함될 수 있습니다.

  • 문서 기반 패턴은 소비자가 요청 문서 정보의 전체 단위를 나타내는 이상 실행 비즈니스 프로세스로 웹 서비스를 볼 상황에서 사용된다. 이러한 유형의 웹 서비스는 들어 대출 기관의 입찰을 포함하는 응답 문서가있는 신용 신청 요청 문서와 같은 인간 상호 작용을 포함 할 수 있습니다 . 더 오래 실행되는 비즈니스 프로세스는 요청 된 문서를 즉시 반환하지 못할 수 있으므로 문서 기반 패턴은 비동기 통신 아키텍처에서 더 일반적으로 발견됩니다. SOAP의 문서 / 리터럴 변형은 문서 기반 웹 서비스 패턴을 구현하는 데 사용됩니다.


3

당신이 묻는 것은 RPC Literal, Document Literal 및 Document Wrapped SOAP 웹 서비스의 차이점이라고 생각합니다.

문서 웹 서비스는 리터럴로 묘사되고 래핑되며 서로 다릅니다. 주요 차이점 중 하나는 후자가 BP 1.1을 준수하고 전자가 그렇지 않다는 것입니다.

또한 Document Literal에서는 호출 할 작업이 이름으로 지정되지 않은 반면 Wrapped에서는 호출됩니다. 이것은 요청의 대상이되는 작업 이름을 쉽게 알아낼 수 있다는 점에서 중요한 차이점이라고 생각합니다.

RPC 리터럴과 문서 랩핑의 관점에서 문서 랩핑 요청은 WSDL의 스키마에 대해 쉽게 검사 / 검증 할 수 있습니다. 하나의 큰 장점입니다.

장점 때문에 Document Wrapped를 웹 서비스 유형으로 사용하는 것이 좋습니다.

SOAP on HTTP는 HTTP에 캐리어로 바인딩 된 SOAP 프로토콜입니다. SOAP는 SMTP 또는 XXX를 통해서도 가능합니다. SOAP는 엔티티 (예 : 클라이언트와 서버) 간의 상호 작용 방법을 제공하며 두 엔티티는 프로토콜의 의미에 따라 작업 인수 / 반환 값을 마샬링 할 수 있습니다.

HTTP를 통해 XML을 사용하고 있었다면 (그리고 가능하다면) HTTP 요청 / 응답에 대한 XML 페이로드로 이해됩니다. 마샬링 / 마샬링 해제, 오류 처리 등에 대한 프레임 워크를 제공해야합니다.

Java에 중점을 둔 WSDL 및 코드 예제가 포함 된 자세한 자습서 : SOAP 및 JAX-WS, RPC 대 문서 웹 서비스


2

문서
문서 스타일 메시지는 미리 정의 된 스키마에 대해 유효성을 검사 할 수 있습니다. 문서 스타일에서 SOAP 메시지는 단일 문서로 전송됩니다. 스키마 예 :

  <types>  
   <xsd:schema> <xsd:import namespace="http://example.com/" 
    schemaLocation="http://localhost:8080/ws/hello?xsd=1"/>  
   </xsd:schema>  
  </types>

문서 스타일 비누 본문 메시지의 예

  <message name="getHelloWorldAsString">   
     <part name="parameters" element="tns:getHelloWorldAsString"/>   
  </message> 
  <message name="getHelloWorldAsStringResponse">  
     <part name="parameters"> element="tns:getHelloWorldAsStringResponse"/>   
  </message>

문서 스타일 메시지가 느슨하게 결합되었습니다.

RPC RPC 스타일 메시지는 메소드 이름과 매개 변수를 사용하여 XML 구조를 생성합니다. 메시지는 스키마에 대해 유효성을 검사하기 어렵습니다. RPC 스타일에서 SOAP 메시지는 많은 요소로 전송됩니다.

  <message name="getHelloWorldAsString">
    <part name="arg0"> type="xsd:string"/>   
   </message> 
  <message name="getHelloWorldAsStringResponse">   
    <part name="return"
   > type="xsd:string"/>   
  </message>

여기서 각 매개 변수는 개별적으로 지정되고, RPC 스타일 메시지는 밀접하게 결합되고, 일반적으로 정적이며, 메소드 서명이 변경 될 때 클라이언트를 변경해야합니다. rpc 스타일은 String 및 Integer와 같은 매우 간단한 XSD 유형으로 제한되며 결과 WSDL은 그렇지 않습니다. 매개 변수를 정의하고 제한하는 유형 섹션도 있습니다.

리터럴 기본 스타일입니다. 데이터는 스키마에 따라 직렬화되며, 데이터 유형은 메시지에 지정되지 않지만 schema (namespace)에 대한 참조는 SOAP 메시지를 작성하는 데 사용됩니다.

   <soap:body>
     <myMethod>
        <x>5</x>
        <y>5.0</y>
     </myMethod>
   </soap:body>

각 매개 변수에 지정된 인코딩 된 데이터 유형

   <soap:body>
     <myMethod>
         <x xsi:type="xsd:int">5</x>
         <y xsi:type="xsd:float">5.0</y>
     </myMethod>
   </soap:body>

스키마 없음

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.