PHP > LIBRARY > PHP를 이용한 웹 서비스 개발(3)
 
PHP
Library
Tip&Tech
Q&A
 
PHP Function
phpschool
그누보드
LIBRARY
  HOME > PHP > LIBRARY
 
PHP를 이용한 웹 서비스 개발(3)
작성일 : 10-02-25
조회 : 3,298  
PHP를 이용한 웹 서비스 개발(3)

등록일 : 2007년 09월 05일 | 조회수 : 1,698

제공 : 한빛 네트워크
저자 : Deepak Vohra
역자 : 이대엽
원문 : Developing Web Services Using PHP

[이전 기사 보기]
PHP를 이용한 웹 서비스 개발(1)
PHP를 이용한 웹 서비스 개발(2)

XML-RPC 서버 만들기

PHP XML-RPC 확장은 XML-RPC 명세의 PHP 구현체이다. XML-RPC PHP 클래스 라이브러리는 XML-RPC 서버를 만들고 서버의 메소드를 호출할 수 있는 함수들을 제공한다. 몇가지 널리 사용되는 XML-RPC 함수들이 표 4에 나열되어 있다.

표 4. XML-RPC PHP 함수
함수 설명
xmlrpc_server_create () XML-RPC 서버를 생성한다.
xmlrpc_encode_request ( string method, mixed params [, array output_options] ) 메소드 요청이나 응답에 대한 XML을 생성한다. 문자열이나 오류 발생시 FALSE를 반환한다.
xmlrpc_encode ( mixed value ) PHP 변수에 대한 XML을 생성한다.
xmlrpc_decode_request ( string xml, string &method [, string encoding] ) XML을 PHP로 디코딩한다. 배열을 반환.
xmlrpc_get_type ( mixed value ) XML-RPC 데이터 타입을 반환하는데, 예를 들면 PHP 값에 대해 “struct”, “int”, “string”, “base64”를 반환한다.
xmlrpc_set_type ( string &value, string type ) PHP 문자열 값에 대한 base64내지는 datetime으로 xmlrpc 타입을 지정한다.
xmlrpc_server_register_method ( resource server, string method_name, string function ) PHP 함수를 웹 서비스 메소드로 등록한다. method_name 값은 XML-RPC 요청에 들어있는 methodName 엘리먼트의 값과 동일하다.
xmlrpc_server_call_method ( resource server, string xml, mixed user_data [, array output_options] ) XML 요청을 파싱하여 메소드를 호출한다. 메소드 호출 결과를 반환한다. user_data 매개변수는 메소드 핸들러 함수에 필요한 모든 애플리케이션 데이터를 지정한다. output_options 매개변수는 응답 XML을 생성하는데 필요한 옵션에 대한 해시 배열을 지정한다. 다음의 옵션들을 지정할 수 있다.
output_type: “php”나 “xml”과 같은 출력 데이터 타입을 지정하며 기본 데이터 타입은 “xml”이다. 만약 출력 타입이 “php”일 경우 다른 값들은 무시된다.verbosity: 생성된 메시지의 간결함(compactness) 정도를 지정한다.
escaping: 몇몇 문자들에 대한 이스케이프를 방법을 지정한다.
version: 사용할 XML의 버전을 지정하며, 버전값으로 “xmlrpc”, “soap 1.1”, “simple”을 값으로 지정할 수 있으며 들어오는 요청에 사용된 버전을 사용하도록 “auto”로 지정할 수도 있다.
encoding: 데이터의 인코딩을 지정한다. 기본값은 “iso-8859-1”이다.
output_options 매개변수를 사용하는 예를 들자면 다음과 같다: .$output_options = array( "output_type" => "xml", "verbosity" => "no_white_space", "escaping" => array("markup", "non-ascii", "non-print"), "version" => "xmlrpc", "encoding" => "utf-8" );
xmlrpc_is_fault ( array arg ) 배열값이 XML-RPC fault를 나타내는지를 판단한다.
xmlrpc_server_destroy ( resource server ) 서버 자원을 제거한다.

xmlrpc-webservice.php라는 이름의 PHP 스크립트를 C:/Apache2/htdocs 디렉터리에 만든다. PHP 스크립트에는 hello_func라는 함수를 하나 정의한다. 클라이언트에서 호출하는 모든 함수는 3개의 매개변수를 받아들일 필요가 있는데, 첫번째 매개변수는 호출되는 XML-RPC 메소드의 이름이다. 두 번째 매개변수는 클라이언트로부터 전달되는 매개변수들의 배열을 담는다. 세 번째 매개변수는 xmlrpc_server_call_method() 함수의 user_data 매개변수로 전달되는 애플리케이션 데이터이다. hello_func 함수에서는 클라이언트로부터 전달되는 첫 번째 매개변수인 이름을 받아, Hello 메시지를 출력한다.
function hello_func($method_name, $params, $app_data)
{
$name = $params[0];
return "Hello $name.";
}
xmlrpc_server_create() 메소드를 이용하여 XML-RPC 서버를 생성한다.
$xmlrpc_server=xmlrpc_server_create();
xmlrpc_server_create 메소드가 서버를 생성하지 못할 경우 FALSE를 반환한다. xmlrpc_register_method 메소드를 이용하여 서버에 hello_func 함수를 등록한다. xmlrpc_server_register_method 메소드의 첫 번째 인자는 XML-RPC 서버 응답이다. 두 번째 인자는 웹 서비스에 의해 제공되는 메소드의 이름이며, XML-RPC 요청에 들어있는 <methodName> 엘리먼트의 값이다. 세 번째 인자는 서버에 등록되는 PHP 함수이다.
$registered=xmlrpc_server_register_method 
($xmlrpc_server, "hello", "hello_func" );
PHP 함수가 등록되면 xmlrpc_server_registere_method는 TRUE를 반환한다.

XML-RPC 클라이언트 만들기

다음으로는 요청을 XML-RPC 서버로 전송하는 XML-RPC 클라이언트를 만들어보도록 하겠다. 먼저 요청에 보낼 XML 문자열을 지정한다.
$request_xml = <<< END
<?xml version="1.0"?>
<methodCall>
    <methodName>hello</methodName>
      <params>
        <param>
          <value>
            <string>Deepak</string>
          </value>
        </param>
      </params>
<methodCall>
END;
PHP에 XML을 이스케이프하기 위해 <<<END ...END;를 사용하였다. XML 문서 구분자로는 END 외에도 사용할 수 있다. methodCall 엘리먼트는 호출될 웹 서비스 메소드를 지정한다. xmlrpc_server_call_method 함수를 이용하여 웹 서비스 메소드를 호출한다. xmlrpc_server_call_method 함수의 첫 번째 인자는 서버 리소스이다. 두 번째 인자는 XML-RPC 요청을 담고 있는 문자열이다. 세 번째 인자는 메소드 핸들러 함수의 세 번째 매개변수로 전달되는 애플리케이션 데이터이다.
$response=xmlrpc_server_call_method( $xmlrpc_server, 
$request_xml, '', array(output_type => "xml"));
서버로부터 반환된 XML-RPC 응답을 출력한다.
print $response;
xmlrpc-webservice.php PHP 스크립트가 아래에 나타나 있다.
<?php
function hello_func($method_name, $params, $app_data)
{
$name = $params[0];
return "Hello $name.";
}

$xmlrpc_server=xmlrpc_server_create();
$registered=xmlrpc_server_register_method 
($xmlrpc_server, "hello", "hello_func" );

$request_xml = <<< END
<?xml version="1.0"?>
<methodCall>
    <methodName>hello</methodName>
      <params>
        <param>
          <value>
            <string>Deepak</string>
          </value>
        </param>
      </params>
</methodCall>
END;
$response=xmlrpc_server_call_method( $xmlrpc_server, 
$request_xml, '', array(output_type => "xml"));
print $response;
?>
xmlrpc-webservice.php 스크립트를 C:/Apache2/htdocs 디렉터리로 복사한다. http://localhost/xmlrpc-webservice.php URL을 통해 PHP 스크립트를 호출한다. 서버로부터 전달되는 응답을 브라우저에 출력해 보면 그림 2와 같다.


그림 2. XML-RPC 웹 서비스로부터 전달된 응답

요청에 오류가 들어있을 때 응답 XML이 <fault> 엘리먼트로 반환되도록 요청 XML을 유효하지 않은 XML로 만들어 본다. 예를 들면 $request_xml의 </methodCall>을 <methodCall>로 바꾸고 xmlrpc-webservice.php를 호출한다. 서버로부터 전달되는 응답은 struct엘리먼트 값으로 이루어져 있는 <fault> 엘리먼트이며, faultCode와 faultString 멤버로 구성되어 있으며 그림 3에 나타나 있는 것과 같다.


그림 3. fault 엘리먼트로 반환된 응답

참고자료

좀 더 자세한 내용을 보려면 W3C의 WSDL 페이지SOAP Primer를 참조한다.


저자 Deepak Vohra는 NuBean사의 컨설턴트이자 웹 개발자이다.

 
 

Total 25
번호 제   목 조회
공지 php 라이브러리 134
25 php 라이브러리 134
24 isset, empty, is_null의 상관 관계와 정보 요약 / define(), de… 1397
23 cookie(쿠키) & session(세션) 4791
22 PHP4 + NuSOAP 4232
21 Java + PHP SOAP 모듈 설치 4748
20 PHP SOAP Extension 6403
19 PHP를 이용한 웹 서비스 개발(3) 3299
18 PHP를 이용한 웹 서비스 개발(2) 3143
17 PHP를 이용한 웹 서비스 개발(1) 3890
16 파일-텍스트 카운터 만들기/파일-이미지 카운터 만들기/DB-이미… 2732
15 간단한 문자열분리,찾기,변환 => explode,substr,strstr,ereg… 7688
14 php 이전 경로를 알아내는 함수 6551
13 php 함수정리 1 5458
12    php 함수정리 all 4207
11 CLASS 3659
10 GD and Image 함수 목록 6261
9 file()관련함수 4058
8 array 배열 함수 목록 4134
7 String 함수 목록 3763
6 each() 3008
 1  2  
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.