지원되는 메시지 프로토콜

클라이언트 응용프로그램은 SOAP/HTTP 또는 SOAP/JMS 프로토콜 또는 세 가지 REST 유사 메시지 프로토콜을 사용하는 메시지를 송신하여 웹 서비스에 액세스할 수 있습니다.

클라이언트 응용프로그램은 데이터베이스 조작을 제공하는 웹 서비스에 대한 요청을 송신하여 데이터베이스 조작을 수행할 수 있습니다. 요청은 다음 여섯 가지 프로토콜 중 하나로 된 메시지입니다.

예를 들어, 웹 서비스가 DB2® SAMPLE 데이터베이스의 EMPLOYEE 테이블에 행을 삽입하도록 클라이언트 응용프로그램이 요청한다고 가정하십시오. EMPLOYEE 테이블에 있는 컬럼의 데이터 유형은 다음과 같게 됩니다.

표 1. EMPLOYEE 테이블의 컬럼
컬럼 이름 데이터 유형
EMPNO integer
LASTNAME varchar
FIRSTNME varchar
SKILLS XML

이 표에는 삽입할 새 행에 있는 값이 있습니다.

표 2. EMPLOYEE 테이블에 삽입할 값
컬럼 이름
EMPNO 200170
LASTNAME Yamamoto
FIRSTNME Kiyoshi
SKILLS
<skills>
<languages>
  <language name="Japanese" native="yes" level="excellent"/>
  <language name="English" native="no" level="good"/>
</languages>
<softskills>
  <skill name="team leadership" level="good"/>
  <skill name="presentation" level="medium"/>
</softskills>
</skills>

다음은 웹 서비스에 정의되는 조작입니다.

INSERT INTO employee values (:empno, :lastname, :firstnme, :skills)

SOAP/HTTP 메시지 프로토콜을 사용하는 예제 입력 메시지

다음은 SOAP/HTTP 프로토콜을 사용하여 클라이언트 응용프로그램이 보낼 수 있는 메시지의 예입니다.

POST /Sample/services/Sample HTTP/1.1
Host: localhost:8070
Content-Type: text/xml; charset=utf-8
Content-Length: 704
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: IBM Web Services Explorer
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: "http://www.example.org/insertEmployee"
Connection: close

<soapenv:Envelope xmlns:q0="http://www.example.org" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <q0:insertEmployee>
  		<empno>200170</empno>
  		<name>Yamamoto</name>
  		<firstname>Kiyoshi</firstname>
		<skills>
			<skills>
				<languages>
  					<language level="excellent" name="Japanese" native="yes"/>
  					<language level="good" name="English" native="no"/>
				</languages>
				<softskills>
  					<skill level="good" name="team leadership"/>
  					<skill level="medium" name="presentation"/>
				</softskills>
			</skills>
		</skills>
	 </q0:insertEmployee>
  </soapenv:Body>
</soapenv:Envelope>

REST 유사 메시지 프로토콜을 사용하는 예제 입력 메시지

다음은 클라이언트 응용프로그램이 보낼 수 있는 REST 유사 메시지의 예입니다. 메시지는 REST 형식을 따르지만 데이터 엔티티에 직접 액세스하지 않기 때문에 일반 REST 메시지처럼 작동하지는 않습니다. 대신 메시지는 기능을 수행합니다. 예를 들어, GET 형식의 메시지는 자원 사본을 요청하지 않습니다. 또한 POST 형식의 메시지는 자원에 정보를 추가하지 않아도 됩니다. 대신 클라이언트 응용프로그램이 보내는 GET 메시지와 POST 메시지는 둘 다 데이터베이스의 데이터에 대해 조작을 수행하기 위한 요청입니다.

REST 유사 메시지에서 널 값은 XML 기반 요청 및 비XML 요청과 다르게 취급됩니다. XML 기반 요청에서 널 값은 xsi:nil="true"를 매개변수 요소에 추가하여 나타냅니다. 비XML 요청에서 널 값은 부재로 표시하는데 즉, 매개변수 이름이 매개변수 또는 값 목록에 나타나지 않습니다.

REST 유사 HTTP GET(url 인코딩됨)을 사용하는 예제 입력 메시지
GET /Sample/RestEndpoint/Sample/insertEmployee?empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++
%3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+
native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csoftskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E%
0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%22%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0A HTTP/1.1
User-Agent: Java/1.5.0
Host: localhost:8070
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
요청의 결과 URL은 다음과 같이 표시됩니다.
http://server:port_number/Sample/RestEndpoint/Sample/insertEmployee?empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++
%3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+
native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csoftskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E%
0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%22%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0A
URL은 UTF-8 문자를 사용하고 RPC 2396 표준을 준수해야 합니다.
REST 유사 HTTP POST(url 인코딩됨)를 사용하는 예제 입력 메시지
POST /Sample/RestEndpoint/Sample/insertEmployee HTTP/1.1
User-Agent: Java/1.5.0
Host: localhost:8070
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 485

empno=200170&name;=Yamamoto&firstname;=Kiyoshi&skills;=%3Cskills%3E%0D%0A%3Clanguages%3E%0D%0A++%3Clanguage+level%3D%22very+good%22+name%3D%22Japanese%22+
native%3D%22yes%22%2F%3E%0D%0A++%3Clanguage+level%3D%22good%22+name%3D%22English%22+native%3D%22no%22%2F%3E%0D%0A%3C%2Flanguages%3E%0D%0A%3Csof
tskills%3E%0D%0A++%3Cskill+level%3D%22good%22+name%3D%22team+leadership%22%2F%3E%0D%0A++%3Cskill+level%3D%22medium%22+name%3D%22presentation%2
2%2F%3E%0D%0A%3C%2Fsoftskills%3E%0D%0A%3C%2Fskills%3E%0D%0A
REST 유사 HTTP POST(text/xml)를 사용하는 예제 입력 메시지
POST /Sample/RestEndpoint/Sample/insertEmployee HTTP/1.1
Content-Type: text/xml; charset=utf-8
User-Agent: Michael
Accept: text/xml, application/dime, multipart/related, text/*
Content-Length: 467
Host: localhost:8070
Connection: keep-alive


<q0:insertEmployee xmlns:q0="http://www.example.org"><empno>200170</empno><name>Yamamoto</name><firstname>Kiyoshi</firstname><skills><skills>
<languages>
<language name="Japanese" native="yes" level="excellent"/>
<language name="English" native="no" level="good"/>
</languages>
<softskills>
<skill name="team leadership" level="good"/>
<skill name="presentation" level="medium"/>
</softskills>
</skills></skills></q0:insertEmployee>
REST 유사 HTTP POST(json)를 사용하는 예제 입력 메시지
POST /Project1WebService1/rest/WebService1/insertEmployee HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Connection: keep-alive
Content-Type: application/json;charset=utf-8
Content-Length: 395

{"insertEmployee":{"EMPNO":200170,"LASTNAME":"Yamamoto","FIRSTNME":"Kiyoshi","SKILLS":"<skills>
<languages>
   <language name=\"Japanese\" native=\"yes\" level=\"excellent\"\/>
   <language name=\"English\" native=\"no\" level=\"good\"\/>
<\/languages>
<softskills>
   <skill name=\"team leadership\" level=\"good\"\/>
   <skill name=\"presentation\" level=\"medium\"\/>
<\/softskills>
<\/skills>"}}

피드백