클라이언트 애플리케이션은 데이터베이스 조작을 제공하는 웹 서비스에 대한 요청을 송신하여 데이터베이스 조작을 수행할 수 있습니다. 요청은 다음 여섯 가지 프로토콜 중 하나로 된 메시지입니다.
일부 제품에서는 이 메시지 프로토콜이 지원되지 않습니다.
예를 들어, 웹 서비스가 DB2® SAMPLE 데이터베이스의 EMPLOYEE 테이블에 행을 삽입하도록 클라이언트 애플리케이션이 요청한다고 가정하십시오. EMPLOYEE 테이블에 있는 열의 데이터 유형은 다음과 같게 됩니다.
열 이름 | 데이터 유형 |
---|---|
EMPNO | integer |
LASTNAME | varchar |
FIRSTNME | varchar |
SKILLS | XML |
이 표에는 삽입할 새 행에 있는 값이 있습니다.
열 이름 | 값 |
---|---|
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 프로토콜을 사용하여 클라이언트 애플리케이션이 보낼 수 있는 메시지의 예입니다.
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 메시지처럼 작동하지는 않습니다. 대신 메시지는 기능을 수행합니다. 예를 들어, GET 형식의 메시지는 자원 사본을 요청하지 않습니다. 또한 POST 형식의 메시지는 자원에 정보를 추가하지 않아도 됩니다. 대신 클라이언트 애플리케이션이 보내는 GET 메시지와 POST 메시지는 둘 다 데이터베이스의 데이터에 대해 조작을 수행하기 위한 요청입니다.
REST 유사 메시지에서 널 값은 XML 기반 요청 및 비XML 요청과 다르게 취급됩니다. XML 기반 요청에서 널 값은 xsi:nil="true"를 매개변수 요소에 추가하여 나타냅니다. 비XML 요청에서 널 값은 부재로 표시하는데 즉, 매개변수 이름이 매개변수 또는 값 목록에 나타나지 않습니다.
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
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%0AURL은 UTF-8 문자를 사용하고 RPC 2396 표준을 준수해야 합니다.
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
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>
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>"}}