XML-RPC


XML - RPC


XML-RPC는 인터넷을 통해서 원격으로 프로시져를 호출하는 프로토콜입니다. XML-RPC는 HTTP-POST를 사용해서 요청이 전송되며, 요청하는 내용은 XML형식을 사용합니다. 서버에서 처리 후에 반환하는 값 역시 XML 형식입니다.

XML-RPC의 호출

호출 예

POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181

<?xml version="1.0"?>
<methodCall>
   <methodName>examples.getStateName</methodName>
   <params>
      <param>
         <value><i4>41</i4></value>
      </param>
   </params>
</methodCall>

헤더 정보

헤더의 첫 줄에 들어가는 URI에 대해서 특별히 정의된 사항은 없습니다. 서버가 XML-RPC만을 받아 들인다면, 빈줄일 수도 있고 슬래시 하나만 사용할 수도 있습니다. 하지만 서버가 여러종류의 HTTP요청을 받아들이는 경우라면 XML-RPC 요청을 처리하는 코드가 있는 경로로 전달하도록 할 수 있습니다. 위의 예에서는 /RPC2가 이에 해당합니다.

    • User-Agent는 반드시 지정되어야 합니다.
    • Host는 반드시 지정되어야 합니다.
    • Content-type은 text/xml로 지정합니다.
    • Content-length는 정확한 크기로 지정되어야 합니다.

호출 형식

호출하기 위한 XML 문서의 최상위 요소는 <methodCall>입니다.
<methodCall> 요소의 하위에 <methodName>요소를 사용해서 호출할 메서드의 이름을 지정합니다. 메서드 이름으로는 영문자(대/소문자), 숫자, 밑줄(_), 점(.), 콜론(:), 슬래시(/)가 사용될 수 있습니다. 메서드명으로 사용된 문자를 해석하는 방식은 서버에서 결정하게 됩니다.
메서드 호출시에 매개변수가 필요하다면 <params>요소를 표함해야 합니다.
<params>요소의 하위에는 여러개의 <param>요소가 올 수 있으며 하위에 <value>요소를 가집니다.

XML-RPC의 자료형

  • <value>
<value> 내부에 아래의 자료형에 해당하는 요소를 사용해서 값을 표현합니다. 자료형이 정의 되지 않은 <value>는 문자열형으로 간주됩니다.
  • 정수 : 4바이트 부호화 정수
<i4> 또는 <int>
  • 부울 : 0인 경우에 false, 1인 경우에 true입니다.
<boolean>
  • 문자열
<string>
  • 실수 : 배정도 부호화 실수
<double>
  • 날짜/시간
<dateTime.iso8601>
  • 이진코드 : base64 형식으로 인코드된 바이너리 값
<base64>

<value><int>-12</int></value>
<value><boolean>1</boolean></value>
<value><string>hello</string></value>
<value><double>-12.214</double></value>
<value><dateTime.iso8601>20081017T22:23:18</dateTime.iso8601></value>
<value><base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64></value>

  • <struct>
값은 <struct>형일 수도 있습니다. <struct>는 하위에 여러개의 <member>요소를 가질 수 있으며, <member>요소는 아래에 <name>, <value> 요소가 쌍으로 구성됩니다. <struct>에 사용되는 <value>는 <struct>일수도 있고 <array>일 수도 있습니다.

<struct>
   <member>
      <name>lowerBound</name>
      <value><i4>18</i4></value>
   </member>
   <member>
      <name>upperBound</name>
      <value><i4>139</i4></value>
   </member>
</struct>

  • <array>
값은 <array>형일 수도 있습니다. <array>요소의 하위에는 하나의 <data>요소가 포함되며, <data>요소의 내부에는 여러 개의 <value>요소가 포함될 수 있습니다. <name>요소는 사용되지 읺습니다. 여러 자료형을 함께 사용해도 무방하며 값으로 <array>, <struct>도 사용될 수 있습니다.

<array>
   <data>
      <value><i4>12</i4></value>
      <value><string>Egypt</string></value>
      <value><boolean>0</boolean></value>
      <value><i4>-31</i4></value>
   </data>
</array>
 

XML-RPC의 응답

서버에서의 저수준 오류인 때를 제외하고 항상 200 OK가 반환된다.
Content-Type은 text/xml이고, Content-Length는 정확한 길이로 반드시 지정되어야 한다.
응답 XML은 하나의 <methodResponse>로 되어있으며, 그 아래에 하나의 <params>를 가질 수 있고, 그 아래에 하나의 <param>, 그 아래에 하나의 <value>로 구성된다.
실패를 응답하는 때에는 <methodResponse> 아래에 <fault>, 그 아래에 <value> , 그 아래에 <struct> 요소를 가지며, <struct>는 <int>값을 가지는 <faultCode>와  <string>값을 갖는 <faultString> 요소로 이루어진다.
<methodResponse>는 <fault>와 <params>를 동시에 가질 수는 없다.
HTTP/1.1 200 OK
Connection: close
Content-Length: 426
Content-Type: text/xml
Date: Fri, 17 Jul 1998 19:55:02 GMT
Server: UserLand Frontier/5.1.2-WinNT

<?xml version="1.0"?>
<methodResponse>
  <fault>
  <value>
  <struct>
  <member>
  <name>faultCode</name>
  <value><int>4</int></value>
  </member>
  <member>
  <name>faultString</name>
  <value><string>Too many parameters.</string></value>
  </member>
  </struct>
  </value>
  </fault>
</methodResponse>

Comments