최신 웹 개발 튜토리얼
 

XML Soap


  • SOAP은 단순 개체 액세스 P의 rotocol 약자
  • SOAP는 응용 프로그램의 통신 프로토콜
  • SOAP 메시지를 송신 및 수신하기위한 형식
  • SOAP는 독립적 인 플랫폼입니다
  • SOAP는 XML에 기초
  • SOAP는 W3C 추천입니다

왜 SOAP?

웹 애플리케이션은 인터넷을 통해 통신 할 수있게하는 것이 중요하다.

HTTP는 모든 인터넷 브라우저와 서버에서 지원되기 때문에 응용 프로그램 사이의 통신하는 가장 좋은 방법은, HTTP를 통해입니다. SOAP는 이러한 목표를 달성하기 위해 만들어졌습니다.

SOAP는 서로 다른 기술과 프로그래밍 언어로, 서로 다른 운영 체제에서 실행되는 응용 프로그램간에 통신 할 수있는 방법을 제공합니다.


SOAP 빌딩 블록

SOAP 메시지는 다음 요소를 함유하는 통상의 XML 문서이다 :

  • SOAP 메시지로서 XML 문서를 식별 봉투 소자
  • 헤더 정보를 포함하는 헤더 요소
  • 호출 및 응답 정보가 포함 된 Body 요소
  • 에러 및 상태 정보를 포함하는 결함 요소

모든 요소는 위의 SOAP 봉투에 대한 기본 네임 스페이스에 선언되어있다 :

http://www.w3.org/2003/05/soap-envelope/

그리고 SOAP 인코딩 및 데이터 유형에 대한 기본 네임 스페이스는 다음과 같습니다

http://www.w3.org/2003/05/soap-encoding


구문 규칙

다음은 몇 가지 중요한 구문 규칙은 다음과 같습니다 :

  • SOAP 메시지는 XML을 사용하여 인코딩해야
  • 는 SOAP 봉투 네임 스페이스를 사용해야합니다 SOAP 메시지
  • SOAP 인코딩 네임 스페이스를 사용해야합니다 SOAP 메시지
  • DTD를 참조를 포함 할 수 없습니다 SOAP 메시지
  • SOAP 메시지는 XML 처리 지침을 포함 할 수 없습니다

해골 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>

비누 봉투 요소

필요한 SOAP 엔벨로프 소자는 SOAP 메시지의 루트 요소이다. 이 요소는 SOAP 메시지로서 XML 문서를 정의한다.

<?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>

의 xmlns : 비누 네임 스페이스

위의 예에서 비누 네임 스페이스 다음의 xmlns를 알 수 있습니다. : 항상 값이 있어야합니다 "http://www.w3.org/2003/05/soap-envelope/" .

네임 스페이스는 SOAP 봉투와 봉투를 정의합니다.

다른 네임 스페이스를 사용하는 경우, 애플리케이션이 에러를 생성하고, 메시지를 폐기한다.


encodingStyle 속성

encodingStyle 속성은 문서에 사용되는 데이터 유형을 정의하는데 사용된다. 이 속성은 SOAP 요소에 표시하고, 요소의 내용과 모든 자식 요소에 적용 할 수 있습니다.

SOAP 메시지에는 기본 인코딩이 없습니다.

통사론

soap:encodingStyle="URI"

<?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>

비누 헤더 요소

옵션 SOAP 헤더 요소는 응용 프로그램 특정 정보가 포함 (like authentication, payment, etc) SOAP 메시지에 대한합니다.

헤더 요소가 존재하는 경우, 봉투 요소의 첫 번째 자식 엘리먼트이어야한다.

Note: 머리글 요소의 모든 직계 자식 요소가 네임 스페이스 자격이 있어야합니다.

<?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>

이 예는 위의와 헤더 포함 "Trans" 소자, "mustUnderstand" 1의 값을 가지는 속성, 234의 값입니다.

SOAP는 기본 네임 스페이스의 세 가지 특성을 정의합니다. 이러한 특성은 다음과 같습니다 mustUnderstand에, 배우, 그리고 인코딩 스타일.

는 SOAP 헤더에 정의 된 속성은받는 사람이 SOAP 메시지를 처리하는 방법을 정의합니다.


mustUnderstand 속성

비누 mustUnderstand에 속성은 헤더 항목은 수신자가 처리 할 필수인지 임의인지를 나타내는데 사용될 수있다.

만약 = "1"헤더 요소의 하위 요소로 mustUnderstand에 추가하는 경우는 헤더를 처리하는 수신기는 요소를 인식해야한다는 것을 나타낸다. 수신기가 요소를 인식하지 못하는 경우 헤더를 처리 할 때 실패합니다.

통사론

soap:mustUnderstand="0|1"

<?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>

actor 특성

SOAP 메시지는 메시지 경로를 따라 상이한 엔드 포인트를 통과하여 수신기로 송신기로부터 이동된다. 그러나, SOAP 메시지의 모든 부분은 최종 종료점 의도 될 수없는 대신에,이 메시지 패스에 엔드 포인트 중 하나 이상의 의도 될 수있다.

비누 액터 속성은 특정 엔드 포인트에 헤더 요소를 해결하기 위해 사용된다.

통사론

soap:actor="URI"

<?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>

encodingStyle 속성

encodingStyle 속성은 문서에 사용되는 데이터 유형을 정의하는데 사용된다. 이 속성은 SOAP 요소에 나타날 수 있으며 그 요소의 내용과 모든 자식 요소에 적용됩니다.

SOAP 메시지에는 기본 인코딩이 없습니다.

통사론

soap:encodingStyle="URI"

비누 바디 요소

필요한 SOAP 본체 요소는 메시지의 궁극적 인 엔드 포인트를위한 실제 SOAP 메시지가 포함되어 있습니다.

는 SOAP Body 요소의 직계 자식 요소는 네임 스페이스 자격이 될 수있다.

<?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>

위의 예는 사과의 가격을 요청합니다. GetPrice 및 항목 요소 위의 응용 프로그램 특정 요소 같습니다 m가 있습니다. 그들은 SOAP 네임 스페이스의 일부가 아닙니다.

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:Body>
  <m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


비누 장애 요소

선택적 SOAP 결함 요소는 에러 메시지를 표시하기 위해 사용된다.

비누 결함 요소는 SOAP 메시지에 대한 오류 및 상태 정보를 보유하고있다.

결함 요소가 존재하면, 상기 몸체 요소의 하위 요소로 나타나야한다. 결함 요소는 SOAP 메시지 번 나타날 수있다.

비누 장애 요소는 다음과 같은 하위 요소가 있습니다 :

하위 요소 기술
<faultcode> 오류를 식별하기위한 코드
<faultstring> 고장의 사람이 읽을 수있는 설명
<faultactor> 발생하는 오류를 일으켰 사람에 대한 정보
<detail>

본문 요소와 관련된 응용 프로그램 특정 오류 정보를 보유

SOAP 결함 코드

결함들을 설명 할 때 아래 정의 faultCode에 값이 faultCode를 소자에 사용되어야

오류 기술
VersionMismatch 는 SOAP 봉투 요소에 대한 잘못된 네임 스페이스를 찾을 수
MustUnderstand 와 헤드 소자의 직계 자식 요소 mustUnderstand 설정된 속성 "1" 이해되지
Client 메시지가 잘못 형성되거나 잘못된 정보를 포함하고
Server 메시지가 진행되지 수 있도록 서버에 문제가 발생했습니다

HTTP 프로토콜

HTTP는 TCP / IP를 통해 통신한다. HTTP 클라이언트는 TCP를 사용하여 HTTP 서버에 연결합니다. 접속을 확립 한 후에, 클라이언트는 서버로 HTTP 요청 메시지를 전송할 수있다 :

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

서버는 요청을 처리하고 클라이언트에게 되돌려 HTTP 응답을 전송한다. 응답은 상기 요청의 상태를 나타내는 상태 코드를 포함

200 OK
Content-Type: text/plain
Content-Length: 200

위의 예에서, 서버는이 표준 HTTP 성공 코드 (200)의 상태 코드를 리턴.

서버가 요청을 디코딩 할 수없는 경우,이 같은 것을 반환 할 수 :

400 Bad Request
Content-Length: 0

SOAP 바인딩

SOAP 사양은이 교환되지 방법 SOAP 메시지의 구조를 정의한다. 이 간격은 소위에 의해 채워집니다 "SOAP Bindings" . SOAP 바인딩은 SOAP 메시지를 효율적으로 전송 프로토콜을 사용하여 교환 될 수있는 메커니즘이다.

대부분의 SOAP 구현은 HTTP 나 SMTP와 같은 일반적인 전송 프로토콜에 대한 바인딩을 제공합니다.

HTTP 동기 널리 사용되고있다. 콘텐츠 유형 및 콘텐츠 길이 : 비누 HTTP 요청은 두 개 이상의 HTTP 헤더를 지정합니다.

SMTP는 비동기이고 최후의 수단 또는 특별한 경우에 사용된다.

SOAP의 자바 구현은 일반적으로 JMS 바인딩을 특정 제공 (Java Messaging System) 프로토콜을.


콘텐츠 유형

SOAP 요청 및 응답의 Content-Type 헤더는 메시지와 문자 인코딩의 MIME 타입 정의 (optional) 요청 또는 응답의 XML 본체에 사용합니다.

통사론

Content-Type: MIMEType; charset=character-encoding

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

콘텐츠 길이

SOAP 요청 및 응답에 대한 콘텐츠 길이 헤더는 요청이나 응답의 본문의 바이트 수를 지정한다.

통사론

Content-Length: bytes

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

비누 예

아래의 예에서, GetStockPrice 요청이 서버로 전송됩니다. 요청은 StockName 매개 변수 및 응답으로 반환됩니다 가격의 매개 변수가 있습니다. 함수에 대한 네임 스페이스에 정의 된 "http://www.example.org/stock" .

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>

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>