WSDL-퀵 가이드
WSDL은 Web Services Description Language를 나타냅니다. 웹 서비스를 설명하기위한 표준 형식입니다. WSDL은 Microsoft와 IBM이 공동으로 개발했습니다.
WSDL의 특징
WSDL은 분산 및 분산 환경에서 정보 교환을위한 XML 기반 프로토콜입니다.
WSDL 정의는 웹 서비스에 액세스하는 방법과 수행 할 작업을 설명합니다.
WSDL은 XML 기반 서비스와 인터페이스하는 방법을 설명하는 언어입니다.
WSDL은 XML 기반 전세계 비즈니스 레지스트리 인 UDDI (Universal Description, Discovery, and Integration)의 필수 부분입니다.
WSDL은 UDDI가 사용하는 언어입니다.
WSDL은 'wiz-dull'로 발음되며 'WSD-L'로 표기됩니다.
WSDL 사용
WSDL은 종종 SOAP 및 XML 스키마와 함께 사용되어 인터넷을 통해 웹 서비스를 제공합니다. 웹 서비스에 연결하는 클라이언트 프로그램은 WSDL을 읽어 서버에서 사용할 수있는 기능을 결정할 수 있습니다. 사용되는 모든 특수 데이터 유형은 XML 스키마 형식으로 WSDL 파일에 포함됩니다. 그런 다음 클라이언트는 SOAP를 사용하여 WSDL에 나열된 함수 중 하나를 실제로 호출 할 수 있습니다.
WSDL의 역사
WSDL 1.1은 2001 년 3 월에 XML 프로토콜에 대한 W3C XML 활동에 대한 서비스를 설명하기 위해 Ariba, IBM 및 Microsoft에서 W3C Note로 제출했습니다.
WSDL 1.1은 W3C (World Wide Web Consortium)의 승인을받지 않았지만 권장 사항 (공식 표준)이되어 W3C에서 승인 할 버전 2.0의 초안을 방금 발표했습니다.
WSDL은 웹 서비스를 정의 된 후에 결합하거나 재사용 할 수있는 식별 가능한 세 가지 특정 요소로 분류합니다.
별도로 정의 할 수있는 WSDL의 세 가지 주요 요소는 다음과 같습니다.
- Types
- Operations
- Binding
WSDL 문서에는 다양한 요소가 있지만 이러한 세 가지 주요 요소 내에 포함되어 있으며 별도의 문서로 개발 한 다음 결합하거나 재사용하여 완전한 WSDL 파일을 형성 할 수 있습니다.
WSDL 요소
WSDL 문서는 다음 요소를 포함합니다-
Definition− 모든 WSDL 문서의 루트 요소입니다. 웹 서비스의 이름을 정의하고 문서의 나머지 부분에서 사용되는 여러 네임 스페이스를 선언하며 여기에 설명 된 모든 서비스 요소를 포함합니다.
Data types − 메시지에 사용되는 데이터 유형은 XML 스키마 형식입니다.
Message − 전체 문서 또는 메소드 호출에 매핑되는 인수로 표시되는 메시지 형태의 데이터에 대한 추상적 인 정의입니다.
Operation − 메시지를 수락하고 처리 할 메서드, 메시지 대기열 또는 비즈니스 프로세스의 이름 지정과 같은 메시지 작업의 추상적 인 정의입니다.
Port type− 바인딩을위한 작업 모음을 정의하는 하나 이상의 끝점에 매핑 된 추상 작업 집합입니다. 추상적 인 작업 모음은 다양한 바인딩을 통해 여러 전송에 매핑 될 수 있습니다.
Binding − 특정 포트 유형에 대해 정의 된 작업 및 메시지에 대한 구체적인 프로토콜 및 데이터 형식입니다.
Port − 바인딩과 네트워크 주소의 조합으로 서비스 통신의 대상 주소를 제공합니다.
Service− 파일의 서비스 정의를 포함하는 관련 엔드 포인트의 모음입니다. 서비스는 바인딩을 포트에 매핑하고 확장 성 정의를 포함합니다.
이러한 주요 요소 외에도 WSDL 사양은 다음과 같은 유틸리티 요소를 정의합니다.
Documentation −이 요소는 사람이 읽을 수있는 문서를 제공하는 데 사용되며 다른 WSDL 요소 내에 포함될 수 있습니다.
Import −이 요소는 다른 WSDL 문서 또는 XML 스키마를 가져 오는 데 사용됩니다.
NOTE − WSDL 부분은 일반적으로 웹 서비스 인식 도구를 사용하여 자동으로 생성됩니다.
WSDL 문서 구조
WSDL 문서의 주요 구조는 다음과 같습니다.
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
<operation>
definition of a operation.......
</operation>
</portType>
<binding>
definition of a binding....
</binding>
<service>
definition of a service....
</service>
</definitions>
WSDL 문서에는 하나의 단일 WSDL 문서에서 여러 웹 서비스의 정의를 함께 그룹화 할 수 있도록하는 확장 요소 및 서비스 요소와 같은 다른 요소도 포함될 수 있습니다.
추가로 WSDL 문서의 예를 분석하십시오.
다음은 간단한 WSDL 프로그램을 보여주기 위해 제공되는 WSDL 파일입니다.
서비스가 sayHello 라는 공개적으로 사용 가능한 단일 함수를 제공한다고 가정 해 보겠습니다 . 이 함수는 단일 문자열 매개 변수를 예상하고 단일 문자열 인사말을 리턴합니다. 예를 들어 world 매개 변수를 전달하면 sayHello 서비스 함수가 "Hello, world!"라는 인사말을 반환합니다.
예
HelloService.wsdl 파일의 내용 −
<definitions name = "HelloService"
targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns = "http://schemas.xmlsoap.org/wsdl/"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/" />
</port>
</service>
</definitions>
예제 분석
Definitions − HelloService
Type − 내장 데이터 유형을 사용하며 XMLSchema에 정의되어 있습니다.
Message −
sayHelloRequest-firstName 매개 변수
sayHelloresponse-인사말 반환 값
Port Type − 요청 및 응답 서비스로 구성된 sayHello 작업.
Binding − SOAP HTTP 전송 프로토콜 사용 방향.
Service − http://www.examples.com/SayHello/에서 제공되는 서비스
Port − 실행중인 서비스에 액세스 할 수있는 URI http://www.examples.com/SayHello/와 바인딩을 연결합니다.
그만큼 <definitions>요소는 모든 WSDL 문서의 루트 요소 여야합니다. 웹 서비스의 이름을 정의합니다.
다음은 definitions 요소 를 사용하는 마지막 장의 코드입니다 .
<definitions name="HelloService"
targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
................................................
</definitions>
위의 예에서, 우리는 결론을 내릴 수있다 정의 -
다른 모든 요소의 컨테이너입니다.
이 문서를 HelloService 라고 지정합니다 .
targetNamespace 속성을 지정 합니다. 의 targetNamespace는 자신을 참조하는 WSDL 문서를 수 XML 스키마의 규칙이다. 이 예에서는 http://www.examples.com/wsdl/HelloService.wsdl 의 targetNamespace 를 지정했습니다 .
기본 네임 스페이스를 지정합니다 : xmlns = http : //schemas.xmlsoap.org/wsdl/. 따라서 message 또는 portType 과 같이 네임 스페이스 접두사가없는 모든 요소 는 기본 WSDL 네임 스페이스의 일부로 간주됩니다.
문서의 나머지 부분에서 사용되는 수많은 네임 스페이스를 지정합니다.
NOTE− 네임 스페이스 사양은 문서가 주어진 위치에있을 것을 요구하지 않습니다. 중요한 점은 정의 된 다른 모든 네임 스페이스와 다른 고유 한 값을 지정한다는 것입니다.
웹 서비스는 입력과 출력을 정의해야하며 서비스 안팎으로 매핑되는 방식을 정의해야합니다. WSDL<types>요소는 웹 서비스에서 사용하는 데이터 유형을 정의합니다. 유형은 XML 문서 또는 문서 부분입니다.
유형의 요소는 클라이언트와 서버 사이에 사용되는 모든 데이터 유형을 설명합니다.
WSDL은 특정 타이핑 시스템에만 국한되지 않습니다.
WSDL은 W3C XML 스키마 사양을 기본 선택으로 사용하여 데이터 유형을 정의합니다.
서비스가 문자열 및 정수와 같은 XML 스키마 기본 제공 단순 유형 만 사용하는 경우 types 요소가 필요하지 않습니다.
WSDL을 사용하면 유형을 별도의 요소에 정의하여 여러 웹 서비스에서 유형을 재사용 할 수 있습니다.
다음은 W3C 사양에서 가져온 코드입니다. 이 코드는 WSDL 내에서 유형 요소를 사용할 수있는 방법을 보여줍니다 .
<types>
<schema targetNamespace = "http://example.com/stockquote.xsd"
xmlns = "http://www.w3.org/2000/10/XMLSchema">
<element name = "TradePriceRequest">
<complexType>
<all>
<element name = "tickerSymbol" type = "string"/>
</all>
</complexType>
</element>
<element name = "TradePrice">
<complexType>
<all>
<element name = "price" type = "float"/>
</all>
</complexType>
</element>
</schema>
</types>
데이터 유형은 웹 서비스에 사용할 데이터 유형과 형식을 식별하는 문제를 해결합니다. 유형 정보는 발신자와 수신자간에 공유됩니다. 따라서 메시지 수신자는 데이터를 인코딩하는 데 사용한 정보에 액세스해야하며 데이터를 디코딩하는 방법을 이해해야합니다.
그만큼 <message> 요소는 웹 서비스 공급자와 소비자간에 교환되는 데이터를 설명합니다.
각 웹 서비스에는 입력 및 출력의 두 가지 메시지가 있습니다.
입력은 웹 서비스의 매개 변수를 설명하고 출력은 웹 서비스의 반환 데이터를 설명합니다.
각 메시지는 0 개 이상을 포함합니다. <part> 매개 변수, 웹 서비스 기능의 각 매개 변수에 대해 하나씩.
마다 <part> 매개 변수는에 정의 된 구체적인 유형과 연관됩니다. <types> 컨테이너 요소.
WSDL 예제 챕터에서 코드를 살펴 보겠습니다.
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
여기에서 두 개의 메시지 요소가 정의됩니다. 첫 번째는 SayHelloRequest 요청 메시지를 나타내고 두 번째는 SayHelloResponse 응답 메시지를 나타냅니다 .
이러한 각 메시지에는 단일 부분 요소가 포함됩니다. 요청의 경우 부분은 기능 매개 변수를 지정합니다. 이 경우 단일 firstName 매개 변수를 지정합니다 . 응답의 경우 부분은 함수 반환 값을 지정합니다. 이 경우 단일 인사말 반환 값을 지정합니다.
그만큼 <portType> 요소는 여러 메시지 요소를 결합하여 완전한 단방향 또는 왕복 작업을 형성합니다.
예를 들어, <portType>하나의 요청과 하나의 응답 메시지를 단일 요청 / 응답 작업으로 결합 할 수 있습니다. 이것은 SOAP 서비스에서 가장 일반적으로 사용됩니다. portType은 여러 작업을 정의 할 수 있습니다.
WSDL 예제 챕터에서 코드를 살펴 보겠습니다.
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
portType 요소는 sayHello 라는 단일 작업을 정의합니다 .
작업은 단일 입력 메시지 SayHelloRequest 와
출력 메시지 SayHelloResponse .
작동 패턴
WSDL은 네 가지 기본 작동 패턴을 지원합니다.
일방 통행
서비스가 메시지를 수신합니다. 따라서 작업에는 단일 입력 요소가 있습니다. 단방향 연산의 문법은 다음과 같습니다.
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:input name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
요청-응답
서비스는 메시지를 수신하고 응답을 보냅니다. 따라서 작업에는 하나의 입력 요소와 하나의 출력 요소가 있습니다. 오류를 캡슐화하기 위해 선택적 오류 요소도 지정할 수 있습니다. 요청-응답 작업의 문법은 다음과 같습니다.
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
간청-응답
서비스는 메시지를 보내고 응답을받습니다. 따라서 작업에는 하나의 출력 요소와 하나의 입력 요소가 있습니다. 오류를 캡슐화하기 위해 선택적 오류 요소도 지정할 수 있습니다. 요청-응답 작업의 문법은 다음과 같습니다.
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
공고
서비스가 메시지를 보냅니다. 따라서 작업에는 단일 출력 요소가 있습니다. 다음은 알림 작업에 대한 문법입니다.
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:output name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
그만큼 <binding>요소는 portType 작업이 실제로 유선을 통해 전송 되는 방법에 대한 구체적인 세부 정보를 제공합니다 .
바인딩은 HTTP GET, HTTP POST 또는 SOAP를 포함한 여러 전송을 통해 사용할 수 있습니다.
바인딩은 portType 작업 을 전송하는 데 사용되는 프로토콜에 대한 구체적인 정보를 제공 합니다.
바인딩은 서비스가있는 위치 정보를 제공합니다.
SOAP 프로토콜의 경우 바인딩은 다음과 같습니다. <soap:binding>, 전송은 HTTP 프로토콜 위에 SOAP 메시지입니다.
단일 portType에 대해 여러 바인딩을 지정할 수 있습니다 .
바인딩 요소에는 이름 및 유형 속성의 두 가지 속성이 있습니다.
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
이름 속성은 바인딩의 이름을 정의하고, 바인딩,이 경우 "TNS : Hello_PortType"에 대한 포트에 type 속성 포인트 포트.
SOAP 바인딩
WSDL 1.1에는 SOAP 1.1 용 내장 확장이 포함되어 있습니다. 이를 통해 SOAP 헤더, SOAP 인코딩 스타일 및 SOAPAction HTTP 헤더를 포함한 SOAP 특정 세부 사항을 지정할 수 있습니다. SOAP 확장 요소에는 다음이 포함됩니다.
- soap:binding
- soap:operation
- soap:body
soap : 바인딩
이 요소는 SOAP를 통해 바인딩을 사용할 수 있음을 나타냅니다. 스타일 속성은 SOAP 메시지 형식의 전반적인 스타일을 나타냅니다. rpc 의 스타일 값은 RPC 형식을 지정합니다.
전송 속성은 SOAP 메시지의 전송을 나타냅니다. http://schemas.xmlsoap.org/soap/http 값은 SOAP HTTP 전송을 나타내는 반면 http://schemas.xmlsoap.org/soap/smtp는 SOAP SMTP 전송을 나타냅니다.
soap : 작업
이 요소는 특정 SOAP 구현에 대한 특정 작업의 바인딩을 나타냅니다. 의 soapAction의 속성 지정은이 SOAPAction HTTP 헤더하는 서비스를 식별하는데 사용된다.
soap : body
이 요소를 사용하면 입력 및 출력 메시지의 세부 사항을 지정할 수 있습니다. HelloWorld의 경우 body 요소는 지정된 서비스와 연관된 SOAP 인코딩 스타일 및 네임 스페이스 URN을 지정합니다.
다음은 예제 챕터의 코드입니다.
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc" transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
ㅏ <port> 요소는 바인딩에 단일 주소를 지정하여 개별 엔드 포인트를 정의합니다.
다음은 포트를 지정하는 문법입니다-
<wsdl:definitions .... >
<wsdl:service .... > *
<wsdl:port name = "nmtoken" binding = "qname"> *
<-- extensibility element (1) -->
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
포트 요소에는 이름 과 바인딩의 두 가지 속성이 있습니다.
이름 속성은 포함하는 WSDL 문서 내에서 정의 된 모든 포트 중에서 고유 한 이름을 제공합니다.
바인딩 속성은 WSDL에서 정의한 연결 규칙을 사용하는 바인딩을 나타냅니다.
바인딩 확장 성 요소는 포트의 주소 정보를 지정하는 데 사용됩니다.
포트는 하나 이상의 주소를 지정하지 않아야합니다.
포트는 주소 정보 이외의 바인딩 정보를 지정하지 않아야합니다.
다음은 예제 챕터의 코드입니다.
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
그만큼 <service>요소는 웹 서비스에서 지원하는 포트를 정의합니다. 지원되는 각 프로토콜에 대해 하나의 포트 요소가 있습니다. 서비스 요소는 포트 모음입니다.
웹 서비스 클라이언트는 서비스 요소에서 다음을 배울 수 있습니다-
- 서비스에 액세스 할 수있는 위치,
- 웹 서비스에 액세스 할 포트를 통해
- 통신 메시지가 정의되는 방법.
서비스 요소에는 사람이 읽을 수있는 문서를 제공하는 문서 요소가 포함됩니다.
다음은 예제 챕터의 코드입니다.
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
포트 요소 의 바인딩 속성은 서비스의 주소를 웹 서비스에 정의 된 바인딩 요소와 연관시킵니다. 이 예에서는 Hello_Binding입니다.
<binding name =" Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
We have covered the basics of WSDL in this tutorial. The next step is to learn SOAP, UDDI, and Web Services.
Web Services
Web services are open standard (XML, SOAP, HTTP, etc.) Web applications that interact with other Web applications for the purpose of exchanging data.
To learn more about Web Services, visit Web Services Tutorial.
UDDI
UDDI is an XML-based standard for describing, publishing, and finding Web services.
To learn more about UDDI, visit UDDI Tutorial.
SOAP
SOAP is a simple XML-based protocol that allows applications to exchange information over HTTP.
To learn more about SOAP, visit SOAP Tutorial.
If you are interested in listing down your company, website or books as an WSDL resource then please contact at [email protected]
List of WSDL Specifications
Specification | Draft / Proposal | W3C Recommendation |
WSDL 1.1 Note | 15. Mar 2001 |
|
WSDL Usage Scenarios | 04. Jun 2002 |
|
WSDL Requirements | 28. Oct 2002 |
|
WSDL Architecture | 11. Feb 2004 |
|
WSDL Glossary | 11. Feb 2004 |
|
WSDL Usage Scenarios | 11. Feb 2004 |
|
WSDL 1.2 Core Language | 11. Jun 2003 |
|
WSDL 1.2 Message Patterns | 11. Jun 2003 |
|
WSDL 1.2 Bindings | 11. Jun 2003 |
|
WSDL 2.0 Primer | 27. Mar 2006 |
|
WSDL 2.0 Core Language | 27. Mar 2006 |
|
WSDL 2.0 Adjuncts | 27. Mar 2006 |
|
WSDL 2.0 SOAP 1.1 Binding | 27. Mar 2006 |
|
WSDL 2.0 RDF Mapping | 18. May 2006 |
|
WS Addressing Core | 09. May 2006 |
|
WS Addressing SOAP Binding | 09. May 2006 |
|
Web Architecture | 15. Dec 2004 |