반응형

 

URI(Uniform Resource Identifiers)

URI란 통합 자원 식별자를 의미하며인터넷에 있는 자원을 나타내는 유일한 주소를 의미합니다.

URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에도 항상 명시됩니다.

가장 잘 알려진 URI로는 인터넷 도메인 주소를 나타내는 URL(Uniform Resource Locator)이 있습니다.

또 다른 URI로는 URN(Universal Resource Name)이 있습니다.

 

XML 네임스페이스(namespace)

XML 네임스페이스는 XML 요소 간의 이름에 대한 충돌을 방지해 주는 방법을 제공합니다.

XML 네임스페이스는 요소의 이름과 속성의 이름을 하나의 그룹으로 묶어주어 이름에 대한 충돌을 해결합니다.

 

이러한 XML 네임스페이스는 URI(Uniform Resource Identifiers)로 식별됩니다.

 

XML 요소 간의 이름 충돌

XML에서는 사용자가 XML 요소의 이름을 직접 정의합니다.

따라서 서로 다른 XML 문서를 통합하려고 할 때 같은 이름을 가진 요소로 인해 충돌이 발생할 수 있습니다.

 

예제 1

<body>

    <h1>html에서의 제목</h1>

    <p>html에서의 단락</p>

</body>

 

예제 2

<body>

    <arm>70</arm>

    <leg>110</leg>

</body>

 

위의 두 예제에서 <body>요소는 서로 완전히 다른 의미로 사용됩니다.

예제 1에서는 HTML 문서의 <body>태그로 사용되었습니다.

예제 2에서는 실제 몸을 의미하여, 각 신체 부위의 치수를 기록하기 위해 사용되었습니다.

하지만 사용자나 XML 응용 프로그램은 두 <body>요소의 이러한 차이점을 어떻게 다뤄야 하는지 알지 못합니다.

 

XML 네임스페이스의 선언

XML에서는 접두사(prefix)를 이용하여 위와 같은 이름의 충돌을 방지하고 있습니다.

서로 같은 이름에 요소마다 서로 다른 접두사를 붙이면 이름의 충돌을 방지할 수 있게 됩니다.

 

XML에서 이러한 접두사를 사용하려면, 반드시 먼저 접두사에 대한 네임스페이스를 선언해야 합니다.

 

XML에서 네임스페이스를 선언하는 문법은 다음과 같습니다.

 

문법

<요소이름 xmlns:prefix="URI">

 

XML 네임스페이스의 선언은 xmlns xmlns:로 시작합니다.

prefix 속성값에는 이름 앞에 붙게 되는 네임스페이스 접두사(namespace prefix)를 명시합니다.

접두사로 사용되는 URI 네임스페이스 식별자를 의미합니다.

 

예제

<root>

    <a:body xmlns:a="https://www.w3.org/TR/html5/">

        <a:h1>html에서의 제목</a:h1>

        <a:p>html에서의 단락</a:p>

    </a:body>

    <b:body xmlns:b="http://codingsam.com/xml/physical/">

        <b:arm>70</b:arm>

        <b:leg>110</b:leg>

    </b:body>

</root>

 

위의 예제에서 첫 번째 <body>요소의 xmlns 속성은 a:라는 접두사를 선언합니다.

두 번째 <body>요소의 xmlns 속성은 b:라는 접두사를 선언합니다.

 

이렇게 XML 요소에 네임스페이스가 선언되면, 해당 요소의 모든 자식(child) 요소에도 같은 네임스페이스가 선언됩니다.

이러한 네임스페이스 선언은 XML 루트(root) 요소에서도 선언할 수 있습니다.

 

예제

<root

    xmlns:a="https://www.w3.org/TR/html5/"

    xmlns:b="http://codingsam.com/xml/physical/">

    <a:body>

        <a:h1>html에서의 제목</a:h1>

        <a:p>html에서의 단락</a:p>

    </a:body>

    <b:body>

        <b:arm>70</b:arm>

        <b:leg>110</b:leg>

    </b:body>

</root>

반응형

'Onvif' 카테고리의 다른 글

SOAP 메시지 구조 -2  (0) 2022.10.19
SOAP 메시지 구조 -1  (0) 2022.10.18
SOAP(Simple Object Access Protocal)  (1) 2022.10.05
반응형

SOAP - 오류

 

처리 중 오류가 발생하면 SOAP 메시지에 대한 응답은 메시지 body SOAP 오류 요소이며 오류는 SOAP 메시지의 보낸 사람에게 반환됩니다.

SOAP 오류 메커니즘은 미리 정의된 코드, 설명 및 오류를 생성한 SOAP 프로세서의 주소를 포함하여 오류에 대한 특정 정보를 반환합니다.

 

주의 사항

·   SOAP 메시지는 하나의 오류 블록만 전달할 수 있습니다.

·   결함은 SOAP 메시지의 선택적 부분입니다.

·   HTTP 바인딩의 경우 성공적인 응답은 200~299 범위의 상태 코드에 연결됩니다.

·   SOAP 결함은 500~599 범위의 상태 코드와 연결됩니다.

 

결함의 하위 요소

SOAP 오류에는 다음과 같은 하위 요소가 있습니다.

Sr.No 하위 요소 및 설명
1 <faultCode>
오류 클래스를 나타내는 데 사용되는 텍스트 코드입니다사전 정의된 오류 코드 목록은 다음 표를 참조하십시오.
2 <faultString>
오류를 설명하는 문자 메시지입니다.
3 <faultActor>
누가 오류를 일으켰는지 나타내는 텍스트 문자열입니다. SOAP 메시지가 SOAP 메시지 경로의 여러 노드를 통해 이동하고 클라이언트가 오류를 일으킨 노드를 알아야 하는 경우에 유용합니다최종 목적지로 작동하지 않는 노드는 
faultActor 
요소를 포함해야 합니다.
4 <detail>
응용 프로그램별 오류 메시지를 전달하는 데 사용되는 요소입니다상세 요소는 상세 항목이라는 하위 요소를 포함할 수 있습니다.

 

SOAP 오류 코드

아래에 정의된 faultCode 값은 오류를 설명하는 동안 faultcode 요소에 사용해야 합니다.

Sr.No 오류 및 설명
1 SOAP-ENV:VersionMismatch
SOAP envelope 요소에 대해 잘못된 네임스페이스를 찾았습니다.
2 SOAP-ENV:MustUnderstand
mustUnderstand 속성이 "1"로 설정된 Header 요소의 직계 자식 요소를 이해하지 못했습니다.
3 SOAP-ENV:Client
메시지 형식이 잘못되었거나 잘못된 정보가 포함되어 있습니다.
4 SOAP-ENV:Server
서버에 문제가 있어 메시지를 진행할 수 없습니다.

 

SOAP 오류 예

다음 코드는 샘플 오류입니다클라이언트가 ValidateCreditCard 라는 메서드를 요청했지만 서비스는 이러한 메서드를 지원하지 않습니다이것은 클라이언트 요청 오류를 나타내며 서버는 다음 SOAP 응답을 반환합니다.

 

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xsi:type = "xsd:string">SOAP-ENV:Client</faultcode>
         <faultstring xsi:type = "xsd:string">
            Failed to locate method (ValidateCreditCard) in class (examplesCreditCard) at
               /usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.
         </faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

SOAP - 인코딩

SOAP에는 데이터 유형을 인코딩하기 위한 기본 제공 규칙 세트가 포함되어 있습니다이를 통해 SOAP 메시지는 integer, float, double 또는 array와 같은 특정 데이터 유형을 나타낼 수 있습니다.

 

·   SOAP 데이터 유형은 스칼라 유형과 복합 유형의 두 가지 광범위한 범주로 나뉩니다.

·   스칼라 유형에는 이름, 가격 또는 제품 설명과 같은 정확히 하나의 값이 포함됩니다.

·   복합 유형에는 구매 주문서 또는 주식 시세 목록과 같은 여러 값이 포함됩니다.

·   복합 유형은 배열과 구조체로 더 세분화됩니다.

·   SOAP 메시지의 인코딩 스타일은 SOAP-ENV:encodingStyle 속성을 통해 설정됩니다.

·   SOAP 1.1 인코딩을 사용하려면 http://schemas.xmlsoap.org/soap/encoding/ 값을 사용하십시오.

·   SOAP 1.2 인코딩을 사용하려면 http://www.w3.org/2001/12/soap-encoding 값을 사용하십시오.

·   최신 SOAP 사양은 XML Schema에 의해 정의된 모든 내장 유형을 채택합니다여전히 SOAP는 배열 및 참조와 같이

 

XML 스키마에 의해 표준화되지 않은 구성을 정의하기 위한 고유한 규칙을 유지합니다.

 

스칼라 유형

스칼라 유형의 경우 SOAP XML 스키마 사양에 지정된 모든 기본 제공 단순 유형을 채택합니다여기에는 string, float, double integer가 포함됩니다.

 

다음 표는 XML 스키마 파트 0 - 입문서 http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/ 에서 발췌한 주요 단순 유형을 나열합니다.

XML 스키마에 내장된 단순 유형
단순형  
string Confirm this is electric.  
boolean true, false, 1, 0.  
float -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN.  
double -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN.  
decimal -1.23, 0, 123.4, 1000.00.  
binary 100010  
integer -126789, -1, 0, 1, 126789.  
nonPositiveInteger -126789, -1, 0.  
negativeInteger -126789, -1.  
long -1, 12678967543233  
int -1, 126789675  
short -1, 12678  
byte -1, 126  
nonNegativeInteger 0, 1, 126789  
unsignedLong 0, 12678967543233  
unsignedInt 0, 1267896754  
unsignedShort 0, 12678  
unsignedByte 0, 126  
positiveInteger 1, 126789.  
date 1999-05-31, ---05.  
time 13:20:00.000, 13:20:00.000-05:00  

 

예를 들어, 다음은 이중 데이터 유형의 SOAP 응답입니다.

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
   
   <SOAP-ENV:Body>
      <ns1:getPriceResponse 
         xmlns:ns1 = "urn:examples:priceservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
         <return xsi:type = "xsd:double">54.99</return>
      </ns1:getPriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

복합 유형

SOAP 배열에는 요소 유형과 배열 크기를 모두 지정해야 하는 매우 구체적인 규칙 집합이 있습니다. SOAP는 다차원 배열도 지원하지만 모든 SOAP 구현이 다차원 기능을 지원하는 것은 아닙니다.

배열을 생성하려면 배열의 xsi:type 으로 지정해야 합니다 . 배열에는 arrayType 속성도 포함되어야 합니다이 속성은 포함된 요소의 데이터 유형과 배열의 차원을 지정하는 데 필요합니다.

 

예를 들어 다음 속성은 10개의 이중 값 배열을 지정합니다.

arrayType = "xsd:double[10]"

대조적으로 다음 속성은 문자열의 2차원 배열을 지정합니다.

arrayType = "xsd:string[5,5]"

다음은 이중 값 배열이 있는 샘플 SOAP 응답입니다.

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getPriceListResponse 
         xmlns:ns1 = "urn:examples:pricelistservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

         <return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"  
            xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
            <item xsi:type = "xsd:double">54.99</item>
            <item xsi:type = "xsd:double">19.99</item>
         </return>
      </ns1:getPriceListResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

구조체에는 여러 값이 포함되지만 각 요소는 고유한 접근자 요소로 지정됩니다예를 들어, 제품 카탈로그 내의 항목을 고려하십시오이 경우 구조체에는 제품 SKU, 제품 이름, 설명 및 가격이 포함될 수 있습니다다음은 그러한 구조체가 SOAP 메시지에서 표현되는 방법입니다.

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getProductResponse
         xmlns:ns1 = "urn:examples:productservice" 
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

         <return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
            <name xsi:type = "xsd:string">Red Hat Linux</name>
            <price xsi:type = "xsd:double">54.99</price>
            <description xsi:type = "xsd:string">
               Red Hat Linux Operating System
            </description>
            <SKU xsi:type = "xsd:string">A358185</SKU>
         </return>
      </ns1:getProductResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

참고 - SOAP 코드를 작성하는 동안 적절한 들여쓰기에 주의하십시오구조체의 각 요소는 고유한 접근자 이름으로 지정됩니다예를 들어 위의 메시지에는 이름, 가격, 설명 및 SKU의 네 가지 접근 요소가 포함됩니다각 요소는 고유한 데이터 유형을 가질 수 있습니다예를 들어 name은 문자열로 지정되고 price double로 지정됩니다.

 

SOAP - 전송

SOAP는 전송 프로토콜에 연결되어 있지 않습니다. SOAP SMTP, FTP, IBM MQSeries 또는 MSMQ(Microsoft Message Queuing)를 통해 전송할 수 있습니다.

SOAP 사양에는 HTTP에 대한 세부 정보만 포함됩니다. HTTP는 가장 널리 사용되는 SOAP 전송 프로토콜로 남아 있습니다.

 

HTTP를 통한 SOAP

논리적으로 SOAP 요청은 HTTP 요청을 통해 전송되고 SOAP 응답은 HTTP 응답의 내용 내에서 반환됩니다. SOAP 요청은 HTTP GET을 통해 보낼 수 있지만 사양에는 HTTP POST에 대한 세부 정보만 포함되어 있습니다.

또한 콘텐츠 유형을 text/xml로 설정하려면 HTTP 요청과 응답이 모두 필요합니다.

SOAP 사양은 클라이언트가 SOAPAction 헤더를 제공해야 한다고 요구 하지만 SOAPAction 헤더의 실제 값은 SOAP 서버 구현에 따라 다릅니다.

 

예를 들어, XMethods에서 호스팅하는 AltaVista BabelFish 번역 서비스에 액세스하려면 다음을 SOAPAction 헤더로 지정해야 합니다.

urn:xmethodsBabelFish#BabelFish

서버에 전체 SOAPAction 헤더가 필요하지 않더라도 클라이언트는 빈 문자열("") 또는 null 값을 지정해야 합니다예를 들어 -

SOAPAction: ""
SOAPAction:

 

다음은 HTTP를 통해 XMethods Babelfish 번역 서비스로 전송된 샘플 요청입니다.

POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.com
Content-Type: text/xml; charset = utf-8
Content-Length: 538
SOAPAction: "urn:xmethodsBabelFish#BabelFish"

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:BabelFish
         xmlns:ns1 = "urn:xmethodsBabelFish"
         SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/">
         <translationmode xsi:type = "xsd:string">en_fr</translationmode>
         <sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata>
      </ns1:BabelFish>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

컨텐츠 유형 및 SOAPAction 헤더를 확인하십시오또한 BabelFish 메서드에는 두 개의 String 매개변수가 필요합니다번역 모드 en_fr은 영어에서 프랑스어로 번역합니다.

 

다음은 XMethods의 응답입니다.

HTTP/1.1 200 OK
Date: Sat, 09 Jun 2001 15:01:55 GMT
Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2
SOAPServer: SOAP::Lite/Perl/0.50
Cache-Control: s-maxage = 60, proxy-revalidate
Content-Length: 539
Content-Type: text/xml

<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
   SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
   
   <SOAP-ENV:Body>
      <namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish">
         <return xsi:type = "xsd:string">Bonjour, monde!</return>
      </namesp1:BabelFishResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

HTTP를 통해 전달되는 SOAP 응답은 동일한 HTTP 상태 코드를 따라야 합니다예를 들어 상태 코드 200 OK는 성공적인 응답을 나타냅니다상태 코드 500 내부 서버 오류는 서버 오류가 있고 SOAP 응답에 Fault 요소가 포함되어 있음을 나타냅니다.

 

SOAP -

아래 예에서 GetQuotation 요청은 HTTP를 통해 SOAP 서버로 전송됩니다요청에 QuotationName 매개변수가 있으며 응답으로 견적이 반환됩니다.

함수의 네임스페이스는 http://www.xyz.org/quotation 주소에 정의되어 있습니다.

다음은 SOAP 요청입니다.

 

POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
      <m:GetQuotation>
         <m:QuotationsName>MiscroSoft</m:QuotationsName>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

해당 SOAP 응답은 다음과 같습니다.

HTTP/1.0 200 OK
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotation">
      <m:GetQuotationResponse>
         <m:Quotation>Here is the quotation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

SOAP - 표준

SOAP 1.1은 원래 2000 5월에 W3C에 제출되었습니다. 공식 제출자에는 Microsoft, IBM, Ariba와 같은 대기업과 UserLand Software DevelopMento와 같은 소규모 회사가 포함되었습니다.

2001 7 XML 프로토콜 작업 그룹은 SOAP 1.2 "작업 초안"을 발표했습니다. W3C 내에서 이 문서는 공식적으로 진행 중인 작업입니다. , 문서가 완성되기 전에 여러 번 업데이트될 가능성이 있습니다.

SOAP 버전 1.1 http://www.w3.org/TR/SOAP/ 에서 온라인으로 사용할 있습니다.

SOAP 버전 1.2의 작업 초안은 http://www.w3.org/TR/soap12/ 에서 있습니다.

W3C는 또한 핵심 SOAP 사양에서 분리되는 "첨부 파일이 있는 SOAP 메시지"에 대한 제출을 호스팅합니다이 사양을 사용하면 SOAP 메시지에 이미지 및 사운드 파일과 같은 이진 첨부 파일이 포함될 수 있습니다자세한 내용은 http://www.w3.org/TR/SOAP-attachments 에서 W3C 참고 사항을 참조하십시오.

 

반응형

'Onvif' 카테고리의 다른 글

XML 네임스페이스  (0) 2022.10.20
SOAP 메시지 구조 -1  (0) 2022.10.18
SOAP(Simple Object Access Protocal)  (1) 2022.10.05
반응형

SOAP의 특징을 다시 한번 정리하면 다음과 같습니다.

 

·  SOAP는 인터넷을 통해 통신하도록 설계된 통신 프로토콜입니다.

·  SOAP XML 메시징을 위해 HTTP를 확장할 수 있습니다.

·  SOAP는 웹 서비스에 대한 데이터 전송을 제공합니다.

·  SOAP는 완전한 문서를 교환하거나 원격 프로시저를 호출할 수 있습니다.

·  SOAP는 메시지를 브로드캐스트하는데 사용할 수 있습니다.

·  SOAP는 플랫폼과 언어에 독립적입니다.

·  SOAP는 전송되는 정보와 방법을 정의하는 XML 방식입니다.

·  SOAP를 사용하면 클라이언트 응용 프로그램이 원격 서비스에 쉽게 연결하고 원격 메서드를 호출할 수 있습니다.

 

SOAP - 메시지 구조

SOAP 메시지는 다음 요소를 포함하는 일반 XML 문서입니다.

·  Envelope - 메시지의 시작과 끝을 정의합니다필수 요소입니다.

·  Header - 중간 지점이나 궁극적인 끝 지점에서 메시지 처리에 사용되는 메시지의 선택적 속성을 포함합니다선택적 요소입니다.

·  Body - 전송되는 메시지를 구성하는 XML 데이터를 포함합니다필수 요소입니다.

·  Fault - 메시지를 처리하는 동안 발생하는 오류에 대한 정보를 제공하는 선택적 Fault 요소입니다.

 

이러한 모든 요소는 SOAP envolope의 기본 네임스페이스http://www.w3.org/2001/12/soap-envelope )에 선언되어 있으며 SOAP 인코딩 및 데이터 유형의 기본 네임스페이스는 다음과 같습니다http://www.w3.org/2001/12/soap-encoding

 

참고 - 이 모든 사양은 변경될 수 있습니다따라서 W3 웹사이트에서 제공되는 최신 사양으로 계속 업데이트해야합니다.

 

SOAP 메시지 구조

다음 블록은 SOAP 메시지의 일반 구조를 나타냅니다.

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      ...
      ...
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      ...
      ...
      <SOAP-ENV:Fault>
         ...
         ...
      </SOAP-ENV:Fault>
      ...
   </SOAP-ENV:Body>
</SOAP_ENV:Envelope>

 

SOAP - envelope

SOAP envelope는 메시지의 시작과 끝을 나타내므로 수신자는 전체 메시지가 언제 수신되었는지 알 수 있습니다. SOAP envelope는 메시지 수신을 완료하고 처리할 준비가 된 시점을 아는 문제를 해결합니다따라서 SOAP envelope는 기본적으로 패키징 메커니즘입니다.

 

주의 사항

·  모든 SOAP 메시지에는 root Envelope 요소가 있습니다.

·  envelope SOAP 메시지의 필수 부분입니다.

·  모든 Envelope 요소는 정확히 하나의 Body 요소를 포함해야 합니다.

·  Envelope Header 요소가 포함되어 있는 경우에는 하나만 포함해야 하며, Body 앞에 Envelope의 첫 번째 자식으로 나타나야 합니다.

·  SOAP 버전이 변경되면 envelope가 변경됩니다.

·  SOAP envelope ENV 네임스페이스 접두사와 Envelope요소를 사용하여 지정됩니다.

·  선택적 SOAP 인코딩은 또한 네임스페이스 이름과 선택적 encodingStyle 요소를 사용하여 지정되며, 이는 SOAP 이외의 인코딩 스타일을 가리킬 수도 있습니다.

·   v1.1 호환 SOAP 프로세서는 v1.2 envelope 이름 공간이 포함된 메시지를 수신하면 오류를 생성합니다.

·   v1.2 호환 SOAP 프로세서는 v1.2 envelope 네임스페이스가 포함되지 않은 메시지를 수신하는 경우 VersionMismatch 오류를 생성합니다.

 

v1.2 호환 SOAP 메시지

다음은 v1.2 호환 SOAP 메시지의 예입니다.

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

 

HTTP POST가 있는 SOAP

다음 예에서는 서버로 메시지를 보내는 HTTP POST 작업 내에서 SOAP 메시지를 사용하는 방법을 보여줍니다. envelope 스키마 정의 및 인코딩 규칙의 스키마 정의에 대한 네임스페이스를 보여줍니다. HTTP헤더의 OrderEntry 참조는 tutorialspoint.com 웹 사이트에서 호출할 프로그램의 이름입니다.

 

POST /OrderEntry HTTP/1.1
Host: www.tutorialspoint.com
Content-Type: application/soap; charset = "utf-8"
Content-Length: nnnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

참고 - HTTP 바인딩은 서비스의 위치를 ​​지정합니다.

 

SOAP - 헤더

선택적 Header 요소는 추가 응용 프로그램 수준 요구 사항을 지정하기 위한 유연한 프레임워크를 제공합니다예를 들어 Header 요소를 사용하여 암호로 보호된 서비스에 대한 디지털 서명을 지정할 수 있습니다마찬가지로, Envelope SOAP 서비스에 대한 계정 번호를 지정하는데 사용할 수 있습니다.

 

주의 사항

·  SOAP 메시지의 선택적 부분입니다.

·  헤더 요소는 여러 번 나타날 수 있습니다.

·  헤더는 새로운 기능을 추가하기 위한 것입니다.

·  SOAP 헤더에는 네임스페이스에 정의된 헤더 항목이 포함되어 있습니다.

·  헤더는 SOAP envelope의 첫 번째 직계 자식 요소로 인코딩됩니다.

·  여러 헤더가 정의되면 SOAP 헤더의 모든 직계 자식 요소가 SOAP 헤더 블록으로 해석됩니다.

 

SOAP 헤더 속성

SOAP 헤더는 다음과 같은 두 가지 속성을 가질 수 있습니다.

 

Actor 속성

SOAP 프로토콜은 메시지 경로를 SOAP 서비스 노드 목록으로 정의합니다이러한 중간 노드 각각은 일부 처리를 수행한 다음 메시지를 체인의 다음 노드로 전달할 수 있습니다. Actor 속성을 설정함으로써 클라이언트는 SOAP 헤더의 수신자를 지정할 수 있습니다.

 

MustUnderstand 속성

헤더 요소가 선택 사항인지 필수 항목인지 나타냅니다. true로 설정하면 수신자는 정의된 의미 체계에 따라 헤더 속성을 이해하고 처리하거나 오류를 반환해야 합니다.

 

다음 예는 SOAP 메시지에서 헤더를 사용하는 방법을 보여줍니다.

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = " http://www.w3.org/2001/12/soap-envelope"   
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      <t:Transaction 
         xmlns:t = "http://www.tutorialspoint.com/transaction/" 
         SOAP-ENV:mustUnderstand = "true">5
      </t:Transaction>
   </SOAP-ENV:Header>
   ...
   ...
</SOAP-ENV:Envelope>

 

SOAP – Body

SOAP body SOAP 메시지에서 교환되는 응용 프로그램 정의 XML 데이터를 포함하는 필수 요소입니다본문은 envelope 내에 포함되어야 하며 메시지에 대해 정의될 수 있는 모든 헤더를 따라야 합니다.

Bodyenvelope의 자식 요소로 정의되고 body에 대한 의미는 연관된 SOAP 스키마에 정의됩니다.

body에는 메시지의 최종 수신자를 위한 필수 정보가 포함되어 있습니다

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotation xmlns:m = "http://www.tp.com/Quotation">
         <m:Item>Computers</m:Item>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

위의 예는 컴퓨터 세트의 견적을 요청합니다위의 m:GetQuotation Item 요소는 응용 프로그램별 요소입니다. SOAP 표준의 일부가 아닙니다.

 

다음은 위의 쿼리에 대한 응답입니다.

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotationResponse xmlns:m = "http://www.tp.com/Quotation">
         <m:Quotation>This is Qutation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

일반적으로 응용 프로그램은 요청 및 응답 요소와 관련된 의미 체계를 포함하는 스키마도 정의합니다.

견적 서비스는 애플리케이션 서버에서 실행되는 EJB를 사용하여 구현될 수 있습니다그렇다면 SOAP 프로세서는 GetQuotationResponse 서비스의 EJB 구현 안팎으로 매개변수로 본문 정보를 매핑해야 합니다. SOAP 프로세서는 본문 정보를 .NET 개체, CORBA 개체, COBOL 프로그램 등에 매핑할 수도 있습니다.

반응형

'Onvif' 카테고리의 다른 글

XML 네임스페이스  (0) 2022.10.20
SOAP 메시지 구조 -2  (0) 2022.10.19
SOAP(Simple Object Access Protocal)  (1) 2022.10.05
반응형

SOAP(Simple Object Access Protocol)는 응용 프로그램의 분산 요소가 통신할 수 있도록 하는 메시지 프로토콜입니다. SOAP는 웹 관련 HTTP (Hypertext Transfer Protocol)를 비롯한 다양한 표준 프로토콜 을 통해 수행될 수 있습니다.

 

SOAP는 프로그래밍 언어가 다른 응용 프로그램의 중간 언어로 개발되어 이러한 응용 프로그램이 인터넷을 통해 서로 통신할 수 있도록 합니다. SOAP는 유연하고 독립적이므로 개발자가 기능과 기능을 추가하는 동시에 다양한 언어로 SOAP API (응용 프로그래밍 인터페이스)를 작성할 수 있습니다.

 

SOAP는 일반적으로 XML (Extensible Markup Language)을 사용하여 웹 API를 만드는 데 사용되는 경량 프로토콜 입니다인터넷, HTTP, SMTP(Simple Mail Transfer Protocol) 및 전송 제어 프로토콜 을 통한 광범위한 통신 프로토콜을 지원합니다 . SOAP 접근 방식은 SOAP 메시지가 처리되는 방법, 포함된 기능 및 모듈, 지원되는 통신 프로토콜 및 SOAP 메시지 구성을 정의합니다. SOAP XML 정보 세트를 메시지 형식으로 사용하고 메시지 전송 및 협상을 위해 HTTP와 같은 응용 프로그램 계층 프로토콜에 의존합니다.

 

애플리케이션 간의 데이터 교환은 오늘날의 네트워크 환경에서 매우 중요합니다그러나 이러한 이기종 애플리케이션 간의 데이터 교환은 복잡할 것입니다이 데이터 교환을 수행하기 위한 코드의 복잡성도 마찬가지입니다.

 

이러한 복잡성을 해결하는 데 사용되는 방법 중 하나는 응용 프로그램 간에 데이터를 교환하기 위한 중간 언어로 XML(Extensible Markup Language)을 사용하는 것입니다.

모든 프로그래밍 언어는 XML 마크업 언어를 이해할 수 있습니다따라서 XML은 데이터 교환의 기본 매체로 사용되었습니다. 그러나 데이터 교환을 위한 모든 프로그래밍 언어에서 XML 사용에 대한 표준 사양은 없습니다그것이 SOAP 소프트웨어가 등장하는 곳입니다.

 

SOAP HTTP를 통해 XML과 함께 작동하도록 설계되었으며 모든 응용 프로그램에서 사용할 수 있는 일종의 사양을 가지고 있습니다. SOAP 프로토콜에 대한 자세한 내용은 다음 장에서 살펴보겠습니다.

 

SOAP의 장점

SOAP는 응용 프로그램 간의 데이터 교환에 사용되는 프로토콜입니다다음은 SOAP가 사용되는 이유에 대한 몇 가지입니다.

 

SOAP 기반 웹 서비스를 개발할 때 웹 서비스가 클라이언트 응용 프로그램과 통신하는 데 사용할 수 있는 일부 언어가 필요합니다. SOAP는 이러한 목적을 달성하기 위해 개발된 완벽한 매체입니다이 프로토콜은 모든 웹 표준의 관리 기관인 W3C 컨소시엄에서도 권장합니다.

 

SOAP는 응용 프로그램 간의 데이터 교환에 사용되는 경량 프로토콜입니다. SOAP 프로그래밍은 그 자체가 경량 데이터 교환 언어인 XML 언어를 기반으로 하기 때문에 SOAP도 같은 범주에 속하는 프로토콜입니다.

 

SOAP는 플랫폼에 독립적으로 설계되었으며 운영 체제에도 독립적으로 설계되었습니다따라서 SOAP 프로토콜은 Windows 및 Linux 플랫폼 모두에서 모든 프로그래밍 언어 기반 응용 프로그램을 작동할 수 있습니다.

 

HTTP 프로토콜에서 작동합니다. SOAP는 모든 웹 응용 프로그램에서 사용하는 기본 프로토콜인 HTTP 프로토콜에서 작동합니다따라서 World Wide Web에서 작동하기 위해 SOAP 프로토콜에 구축된 웹 서비스를 실행하는 데 필요한 일종의 사용자 정의가 없습니다.

 

 SOAP 빌딩 블록 및 메시지 구조 예

Simple Object Access Protocol은 사양으로 웹 서비스 및 클라이언트 응용 프로그램에 전송되는 SOAP 메시지를 정의합니다. SOAP 메시지는 다음 세 가지 기본 빌딩 블록으로 구성된 XML 문서입니다.

 

1.     SOAP envelop는 메시지의 모든 데이터를 캡슐화하고 XML 문서를 SOAP 메시지로 식별합니다.

2.     Header 요소는 SOAP 메시지에 대한 추가 정보를 포함합니다이 정보는 예를 들어 호출 애플리케이션에서 사용하는 인증 자격 증명일 수 있습니다.

3.     Body 요소에는 웹 서비스에서 호출 응용 프로그램으로 보내야 하는 실제 메시지의 세부 정보가 포함됩니다이 데이터에는 통화 및 응답 정보가 포함됩니다.

 

오류 메시지는 선택적 네 번째 빌딩 블록입니다. SOAP 오류가 생성되면 HTTP 500 오류로 반환됩니다오류 메시지에는 오류 코드, 문자열, 행위자 및 세부 정보가 포함됩니다.

 

 

아래의 간단한 SOAP 메시지의 예를 살펴보고 요소가 실제로 수행하는 작업을 살펴보겠습니다.

SOAP 메시지 구조

 

위의 SOAP 메시지에서 볼 수 있듯이 SOAP 메시지의 첫 번째 부분은 전체 SOAP 메시지를 캡슐화하는 데 사용되는 봉투 요소입니다.

 

다음 요소는 실제 메시지의 세부사항을 포함하는 SOAP 본문입니다.

우리 메시지에는 "Guru99WebService"라는 이름의 웹 서비스가 포함되어 있습니다.

"Guru99Webservice" 'int' 유형의 매개변수를 허용하며 이름은 TutorialID입니다.

이제 위의 SOAP 메시지가 웹 서비스와 클라이언트 응용 프로그램 간에 전달됩니다.

 

위의 정보가 클라이언트 애플리케이션에 얼마나 유용한지 알 수 있습니다. SOAP 메시지는 클라이언트 애플리케이션에 웹 서비스의 이름이 무엇인지, 웹 서비스가 예상하는 매개변수와 웹 서비스에서 사용하는 각 매개변수의 유형을 알려줍니다.

  

SOAP는 어떻게 작동합니까?

SOAP 요청은 응답을 생성하고 처리하기 쉽습니다먼저 클라이언트  XML 문서를 사용하여 서비스 요청을 생성합니다다음으로 SOAP 클라이언트는 XML 문서를 SOAP 서버로 보냅니다서버가 SOAP 메시지를 수신하면 요청된 서버 측 애플리케이션에 서비스 호출로 메시지를 보냅니다클라이언트에 대한 요청된 매개변수, 반환 값 및 데이터가 포함된 응답은 먼저 SOAP 요청 핸들러에 반환된 다음 요청 클라이언트에 반환됩니다. SOAP 요청과 응답은 모두 HTTPS (Hypertext Transfer Protocol Secure) 또는 HTTP와 같은 유사한 프로토콜을 사용하여 전송됩니다.

 

SOAP 장점과 단점

SOAP는 서비스 지향 아키텍처SOA )  웹 서비스 사양의 필수적인 부분입니다.

 

SOAP의 장점은 다음과 같습니다.

·  플랫폼 및 운영 체제에 독립적입니다SOAP는 다양한 프로토콜을 통해 수행될 수 있으므로 Windows Linux 모두에서 서로 다른 프로그래밍 언어를 사용하는 응용 프로그램 간의 통신이 가능합니다.

 

· HTTP 프로토콜에서 작동합니다SOAP는 다양한 프로토콜과 함께 작동하지만 HTTP는 웹 응용 프로그램에서 사용하는 기본 프로토콜입니다.

 

· 다른 네트워크 및 보안 장치를 통해 전송할 수 있습니다SOAP는 다른 프로토콜에 특별한 조정이 필요할 수 있는 방화벽 을 통해 쉽게 전달할 수 있습니다.

 

그러나 다음과 같은 단점이 있습니다.

· 참조로 데이터를 전달하는 조항이 없습니다동일한 개체의 여러 복사본이 동시에 전달되는 경우 동기화 문제가 발생할 수 있습니다.

 

·  속도SOAP의 데이터 구조는 XML을 기반으로 합니다. XML은 대부분 사람이 읽을 수 있으므로 SOAP 메시지를 상당히 쉽게 이해할 수 있습니다그러나 이것은 또한 바이너리 데이터를 수용할 CORBA(Common Object Request Broker Architecture)  RPC (원격 프로시저 호출) 프로토콜에 비해 메시지를 상대적으로 크게 만듭니다이 때문에 CORBA RPC가 더 빠릅니다.

 

· 다른 방법만큼 유연하지 않습니다SOAP는 유연하지만 RESTful 아키텍처와 같은 새로운 방법은 XML, JavaScript Object Notation , YAML 또는 필요한 모든 파서를 사용하므로 SOAP보다 유연합니다.

 

SOAP API

SOAP는 웹 서비스 또는 SOA 프레임워크의 컨텍스트에서 거의 항상 사용되는 프로토콜입니다따라서 해당 API는 일반적으로 SOA에 대한 상위 수준 인터페이스에 의해 숨겨집니다. SOA API 미들웨어 도구는 거의 모든 최신 프로그래밍 언어에 사용할 수 있으며 Microsoft는 다양한 .NET SOAP SOA 도구를 제공합니다.

 

SOAP REST

SOAP는 보안 및 제어를 잃지 않으면서 기존의 모놀리식 애플리케이션을 다중 구성 요소의 분산 형태로 분해하도록 설계되었습니다이와 대조적으로 REST (REpresentational State Transfer) HTTP 프로토콜과 웹 서버가 클라이언트를 지원하는 방식을 기반으로 하는 분산 컴퓨팅 상호 작용의 모델입니다. REST over HTTP는 거의 항상 최신 마이크로서비스 개발 및 통신의 기초입니다RESTful API GET, PUT, POST DELETE 데이터에 대한 HTTP 요청을 사용합니다.

 

REST over HTTP는 간단하고 유연하며 가벼우며 정보를 교환하는 방법 이상을 제공합니다. SOAP HTTP에서도 사용할 수 있지만 웹 서비스 및 SOA 프레임워크와 같은 복잡한 분산 컴퓨팅 도구 세트의 요소와 애플리케이션 구성 요소를 연결하며 이는 전체 서비스 지향 프레임워크의 일부를 형성합니다.

 

단순 개체 액세스 프로토콜의 미래

SOAP는 서비스 지향 아키텍처에서 웹 서비스를 연결하는 데 널리 사용되는 최초의 프로토콜입니다오늘날 분산 애플리케이션의 현대적인 개발은 주로 RESTful 원칙을 기반으로 합니다. SOAP는 거의 항상 레거시 플랫폼으로 제한 됩니다SOAP가 여전히 사용되는 영역 중 하나는 온라인 트랜잭션을 처리하는 응용 프로그램입니다. 이는 더 엄격하고 프로토콜 기반의 API 스타일이기 때문입니다.

 

SOAP 통신 모델

SOAP에 의한 모든 통신은 HTTP 프로토콜을 통해 이루어집니다. SOAP 이전에는 많은 웹 서비스가 통신을 위해 표준 RPC(원격 프로시저 호출) 스타일을 사용했습니다이것은 가장 단순한 형태의 의사소통이지만 많은 한계가 있었습니다.

이제 이 SOAP API 자습서에서 이 통신이 어떻게 작동하는지 보기 위해 아래 다이어그램을 살펴보겠습니다이 예에서 서버가 다음과 같이 2가지 방법을 제공하는 웹 서비스를 호스팅한다고 가정해 보겠습니다.

 

GetEmployee – 모든 직원 세부 정보를 가져옵니다.

SetEmployee – 직원 부서, 급여 등과 같은 세부 정보 값을 적절하게 설정합니다.

 

일반적인 RPC 스타일 통신에서 클라이언트는 요청에 있는 메서드를 호출하고 필요한 매개변수를 서버에 보내고 서버는 원하는 응답을 보냅니다.

 

위의 통신 모델에는 다음과 같은 심각한 제한 사항이 있습니다.

 

언어 독립적 이 아님 - 메서드를 호스팅하는 서버는 특정 프로그래밍 언어로 되어 있으며 일반적으로 서버에 대한 호출은 해당 프로그래밍 언어로만 이루어집니다.

 

표준 프로토콜이 아님 – 원격 프로시저에 대한 호출이 이루어지면 호출은 표준 프로토콜을 통해 수행되지 않습니다이것은 웹을 통한 대부분의 통신이 HTTP 프로토콜을 통해 이루어져야 했기 때문에 문제였습니다.

 

방화벽 – RPC 호출은 일반 프로토콜을 통하지 않기 때문에 클라이언트가 서버와 통신할 수 있도록 서버에서 별도의 포트를 열어야 합니다일반적으로 모든 방화벽은 이러한 종류의 트래픽을 차단하며 클라이언트와 서버 간의 이러한 종류의 통신이 작동하도록 하려면 일반적으로 많은 구성이 필요했습니다.

 

 

위에 언급된 모든 제한 사항을 극복하기 위해 SOAP는 다음 통신 모델을 사용합니다.

클라이언트는 프로시저 호출 및 인수에 관한 정보를 SOAP 메시지로 형식화하고 이를 HTTP 요청의 일부로 서버에 보냅니다데이터를 SOAP 메시지로 캡슐화하는 이 프로세스를 마샬링이라고 합니다.

그런 다음 서버는 클라이언트가 보낸 메시지를 풀고 클라이언트가 요청한 내용을 확인한 다음 적절한 응답을 SOAP 메시지로 클라이언트에 다시 보냅니다클라이언트가 보낸 요청을 래핑 해제하는 방식을 디마샬링이라고 합니다.

 

 

 

반응형

'Onvif' 카테고리의 다른 글

XML 네임스페이스  (0) 2022.10.20
SOAP 메시지 구조 -2  (0) 2022.10.19
SOAP 메시지 구조 -1  (0) 2022.10.18

+ Recent posts