SOAP 메시지와 WSDL의 차이점은 무엇입니까?


102

SOAP 메시지와 WSDL이 어떻게 조화를 이루는 지 혼란 스럽습니까? 다음과 같은 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>

모든 SOAP 메시지는 WSDL입니까? SOAP는 자체 'SOAP 메시지'또는 'WSDL'을 허용하는 프로토콜입니까? 서로 다르면 언제 SOAP 메시지를 사용해야하며 언제 WSDL을 사용해야합니까?

이것에 대한 약간의 설명은 굉장 할 것입니다.


1
wsdl은 보낼 수있는 메시지와 응답으로 예상 할 수있는 항목의 사양입니다. 어떤 의미에서 wsdl 문서는 soap 통신에 필요하지 않지만 프로토콜에 따라 필수 요소입니다.
troelskn

답변:


121

요청마다 SOAP 문서가 전송됩니다. 우리가 서점이고 특정 책의 현재 가격을 알아보기 위해 쿼리 한 원격 서버가 있다고 가정 해 보겠습니다. 책 제목, 페이지 수 및 ISBN 번호를 서버에 전달해야한다고 가정 해 보겠습니다.

가격을 알고 싶을 때마다 고유 한 SOAP 메시지를 보냅니다. 다음과 같이 보일 것입니다.

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

그리고 우리는 다음과 같은 SOAP 응답 메시지를 기대합니다.

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

WSDL은 서버가이 메시지를 수신 할 때이 메시지를 처리 ​​/ 처리하는 방법을 설명합니다. 우리의 경우에는 제목, NumPages 및 ISBN의 유형, GetBookPrice 메시지에서 응답을 예상해야하는지 여부 및 해당 응답의 모양을 설명합니다.

유형은 다음과 같습니다.

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

그러나 WSDL에는 작업을 수행하기 위해 함께 연결되는 기능, 서비스에서 사용할 수있는 작업 및 서비스 / 작업에 액세스 할 수있는 네트워크의 위치에 대한 자세한 정보도 포함되어 있습니다.

W3 주석이 달린 WSDL 예제 도 참조하십시오.


4
"WSDL은 서버가이 메시지를 수신 할 때이 메시지를 처리 ​​/ 처리하는 방법을 설명합니다." 여기에 뭔가 잘못되었다고 생각하지 마십시오. WSDL은 클라이언트가 클라이언트에 노출되는 서비스가 무엇인지 알기 위해 더 많다고 생각합니다. 나는 그것이 서버에 대한 메시지 처리 또는 처리를 안내하지 않는다고 생각합니다. 내가 말이 되는가?
Unbreakable

76

SOAP 메시지는 데이터를 전송하는 데 사용되는 XML 문서입니다. WSDL은 웹 서비스에 연결하고 요청하는 방법을 설명하는 XML 문서입니다.

기본적으로 SOAP 메시지는 사용자가 전송하는 데이터이며 WSDL은 사용자가 수행 할 수있는 작업과 호출 방법을 알려줍니다.

Google에서 빠르게 검색하면 추가로 읽을 수있는 많은 소스가 생성됩니다 (이전 책 링크는 현재 사용 중지되었습니다.이를 방지하기 위해 댓글에 새로운 권장 사항이 추가됩니다)

특정 질문에 주목하십시오.

모든 SOAP 메시지는 WSDL입니까? 아니요, 그들은 전혀 같은 것이 아닙니다.

SOAP는 자체 'SOAP 메시지'또는 'WSDL'을 허용하는 프로토콜입니까? 아니요-멀기 때문에 읽기가 필요합니다.

서로 다르면 언제 SOAP 메시지를 사용해야하며 언제 WSDL을 사용해야합니까? Soap은 전송을 위해 메시지 / 데이터에 적용하는 구조입니다. WSDL은 처음에 서비스를 호출하는 방법을 결정하는 데만 사용됩니다. 종종 이것은 특정 웹 서비스를 호출하기 위해 코드를 처음 추가 할 때 일회성입니다.


굉장한 샘플 메시지를들을 수 있다면 "일회성"이란 의미를 혼동합니다. 또한 WSDL과 SOAP 메시지가 함께 사용된다는 말입니까?
James

6
WSDL은 웹 서비스를 호출하는 방법을 알려줍니다. 종종 WSDL을 사용하여 웹 서비스를 호출하는 코드를 자동 생성 한 다음 다시 사용하지 않습니다. 내가 링크 한 책의 장을 훑어 보는 것이 도움이 될 것입니다.
Matthew

27

WSDL (Web Service Definition Language)은 웹 서비스를 설명하는 메타 데이터 파일입니다.

작업 이름, 매개 변수 등

SOAP 메시지는 실제 페이로드입니다.


25

두 가지 (SOAP 및 WSDL)가 웹 서비스의 구성 요소 인 SOAP와 WSDL의 차이점을 말하기 전에 웹 서비스가 무엇인지 정의해야합니다.

대부분의 응용 프로그램은 사용자와 상호 작용하도록 개발되었으며 사용자가 인터페이스를 통해 데이터를 입력하거나 검색하면 응용 프로그램이 사용자의 입력에 응답합니다.

웹 서비스는 웹 서비스 응용 프로그램이 컴퓨터에서 컴퓨터로 또는 응용 프로그램에서 응용 프로그램으로 만 통신한다는 점을 제외하면 거의 동일한 작업을 수행합니다. 직접적인 사용자 상호 작용이없는 경우가 많습니다.

웹 서비스는 기본적으로 응용 프로그램간에 데이터를 교환하는 데 사용되는 개방형 프로토콜 모음입니다. 개방형 프로토콜을 사용하면 웹 서비스가 플랫폼에 독립적이 될 수 있습니다. 다른 프로그래밍 언어로 작성되고 다른 플랫폼에서 실행되는 소프트웨어는 웹 서비스를 사용하여 인터넷과 같은 컴퓨터 네트워크를 통해 데이터를 교환 할 수 있습니다. 즉, Windows 응용 프로그램은 PHP, Java 및 Perl 응용 프로그램 및 기타 많은 응용 프로그램과 통신 할 수 있지만 일반적인 상황에서는 불가능합니다.

웹 서비스는 어떻게 작동합니까?

서로 다른 응용 프로그램이 서로 다른 프로그래밍 언어로 작성되기 때문에 서로 통신 할 수없는 경우가 많습니다. 웹 서비스는 개방형 프로토콜과 표준, 주로 XML, SOAP 및 WSDL의 조합을 사용하여 이러한 통신을 가능하게합니다. 웹 서비스는 XML을 사용하여 데이터에 태그를 지정하고 SOAP를 사용하여 메시지를 전송하고 마지막으로 WSDL을 사용하여 서비스 가용성을 설명합니다. 웹 서비스 애플리케이션의이 세 가지 주요 구성 요소를 살펴 보겠습니다.

SOAP (Simple Object Access Protocol)

SOAP (Simple Object Access Protocol)는 상호 운용성 문제에 직면하지 않고 응용 프로그램간에 메시지를 보내고 받기위한 프로토콜입니다 (상호 운용성은 웹 서비스가 실행되는 플랫폼이 관련이 없음을 의미 함). 유사한 기능을 가진 또 다른 프로토콜은 HTTP입니다. 웹 페이지에 액세스하거나 인터넷을 서핑하는 데 사용됩니다. HTTP를 사용하면보고있는 페이지를 제공하는지 또는보고있는 페이지가 ASP.NET 또는 HTML로 만들어 졌는지에 대해 어떤 종류의 웹 서버 (Apache, IIS 또는 기타)에 대해 걱정할 필요가 없습니다.

SOAP는 요청과 응답 모두에 사용되기 때문에 그 내용은 목적에 따라 약간 씩 다릅니다.

다음은 SOAP 요청 및 응답 메시지의 예입니다.

SOAP 요청 :

POST /InStock HTTP/1.1 
Host: www.bookshop.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.bookshop.org/prices"> 
    <m:GetBookPrice> 
    <m:BookName>The Fleamarket</m:BookName> 
    </m:GetBookPrice> 
</soap:Body> 
</soap:Envelope>

SOAP 응답 :

POST /InStock HTTP/1.1 
Host: www.bookshop.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.bookshop.org/prices"> 
    <m:GetBookPriceResponse> 
    <m: Price>10.95</m: Price> 
    </m:GetBookPriceResponse> 
</soap:Body> 
</soap:Envelope> 

두 메시지가 동일하게 보이지만 다른 방법을 수행합니다. 예를 들어 위의 예를 살펴보면 요청 메시지가 GetBookPrice책 가격을 가져 오는 방법을 사용한다는 것을 알 수 있습니다 . 응답은 GetBookPriceResponse"요청자"가 보게 될 메시지가 될 메서드에 의해 수행됩니다 . 또한 메시지가 XML을 사용하여 작성되었음을 알 수 있습니다.

웹 서비스 기술 언어 또는 WSDL

WSDL은 웹 서비스를 설명하고 해당 메소드에 액세스하고 사용하는 방법을 알려주는 문서입니다.

WSDL은 인터넷에서 우연히 발견 한 웹 서비스에서 사용할 수있는 메서드를 어떻게 알 수 있는지 관리합니다.

샘플 WSDL 파일을 살펴보십시오.

<?xml version="1.0" encoding="UTF-8"?> 
<definitions  name ="DayOfWeek"  
  targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://schemas.xmlsoap.org/wsdl/">  
  <message name="DayOfWeekInput"> 
    <part name="date" type="xsd:date"/> 
  </message> 
  <message name="DayOfWeekResponse"> 
    <part name="dayOfWeek" type="xsd:string"/> 
  </message> 
  <portType name="DayOfWeekPortType"> 
    <operation name="GetDayOfWeek"> 
      <input message="tns:DayOfWeekInput"/> 
      <output message="tns:DayOfWeekResponse"/> 
    </operation> 
  </portType> 
  <binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType"> 
    <soap:binding style="document"  
      transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="GetDayOfWeek"> 
      <soap:operation soapAction="getdayofweek"/> 
      <input> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"  
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"   
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
    </operation> 
  </binding> 
  <service name="DayOfWeekService" > 
    <documentation> 
      Returns the day-of-week name for a given date 
    </documentation> 
    <port name="DayOfWeekPort" binding="tns:DayOfWeekBinding"> 
      <soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/> 
    </port> 
  </service> 
</definitions> 

WSDL 파일에 대해 기억해야 할 주요 사항은 다음을 제공한다는 것입니다.

  • 웹 서비스에 대한 설명

  • 웹 서비스가 사용하는 방법과 사용하는 매개 변수

  • 웹 서비스를 찾는 방법


  • 콘크리트 설명
    TapanHP

    7

    전화 통화보다 더 나은 비유 : 우편 주문 서비스에서 우편을 통해 제품 주문. WSDL 문서는 서비스 공급자가 수락 할 종류의 주문 양식을 만드는 방법을 설명하는 지침과 같습니다. SOAP 메시지는 전 세계 모든 우체국이 처리 방법을 알고있는 표준 디자인 (크기, 모양, 구조)을 가진 봉투와 같습니다. 그런 봉투에 주문 양식을 넣습니다. 네트워크 (예 : 인터넷)는 우편 서비스입니다. 봉투를 우편물에 넣습니다. 우편 서비스 직원은 봉투 안을 들여다 보지 않습니다. 페이로드 XML은 봉투에 동봉 한 주문 양식입니다. 우체국에서 봉투를 배달 한 후 웹 서비스 공급자는 봉투를 열고 주문 양식을 처리합니다. 양식을 올바르게 작성하고 작성했다면


    4

    간단한 용어로 계산기 웹 서비스가있는 경우. WSDL은 클라이언트에 구현하거나 노출 할 수있는 기능에 대해 알려줍니다. 예 : 더하기, 삭제, 빼기 등. SOAP를 사용할 때 실제로 doDelete (), doSubtract (), doAdd ()와 같은 작업을 수행합니다. 그래서 SOAP와 WSDL은 사과와 오렌지입니다. 우리는 그것들을 비교해서는 안됩니다. 둘 다 고유 한 기능이 있습니다.


    1

    SOAP : 사용자로부터 웹 서비스로 또는 그 반대로 정보를 교환하는 데 사용되는 개방형 표준 XML 기반 통신 프로토콜입니다. 비누는 데이터가 어떤 방식으로 구성되어있는 문서 일뿐입니다. 모든 요청 및 응답에 대해 별도의 비누가있을 수 있습니다.

    WSDL : SOAP에서 데이터는 어떤 방식으로 구성되며이 조직은 WSDL에 지정되어 있습니다. 사용해야하는 데이터 유형도 여기에 지정됩니다. 요청 및 응답의 경우 단일 WSDL이 존재합니다.


    0

    WSDL은 API 공급자와 클라이언트 간의 일종의 계약으로 웹 서비스를 설명합니다. 공용 기능, 선택 / 필수 필드 ...

    그러나 SOAP 메시지는 클라이언트와 공급자 (페이로드)간에 전송되는 데이터입니다.


    0

    WSDL은 송신자와 수신자 간의 인터페이스 역할을합니다.
    SOAP 메시지는 xml 형식의 요청 및 응답입니다.

    자바 RMI와 비교

    WSDL은 인터페이스 클래스
    SOAP 메시지는 마샬링 된 요청 및 응답 메시지입니다.


    -1

    전화 번호는 wsdl이고 정보 교환은 비누라는 점에서 전화 통화를 고려할 수 있습니다.

    WSDL은 통신 서버와 연결하는 방법을 설명하고 SOAP는 통신 메시지가 있습니다.


    1
    아니요, 전화 번호는 WSDL에 정의 된 끝점 중 하나와 비슷합니다. 전화 통화 영역에서 WSDL과 실질적으로 동등한 것은 없습니다. 가장 가까운 전화 번호부는 전화 번호부 일 수 있습니다. 특히 비즈니스를 분류하고 비즈니스에 대한 세부 정보를 제공하는 "옐로우 페이지"개념을 포함하는 경우 (전화 번호뿐 아니라) 특히 그렇습니다.
    John Saunders
    당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
    Licensed under cc by-sa 3.0 with attribution required.