[출처] http://www.hanb.co.kr/network/view.html?bi_id=1434




PHP를 이용한 웹 서비스 개발(3)

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

                       

제공 : 한빛 네트워크
저자 : 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와 같다. 
c01.1188957601@web_php_02.jpg

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

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

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

참고자료

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


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




본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
29 How to Call SWI-Prolog from PHP 5 졸리운_곰 2016.05.10 281
28 neural-network by php file 졸리운_곰 2016.03.16 152
27 Learning Library for PHP file 졸리운_곰 2016.03.16 371
26 php 전문가 시스템 php expert system file 졸리운_곰 2016.03.15 56
25 How to Insert JSON Data into MySQL using PHP file 졸리운_곰 2015.12.04 817
24 이클립스(Eclipse) PHP 개발환경 설정. file 졸리운_곰 2015.11.14 216
23 PHP로 만든 달력 file 졸리운_곰 2015.10.27 118
22 라이트 cms 다운로드 ritecms_2.2.1.zip file 졸리운_곰 2015.10.27 24
21 드루팔 다운로드 drupal-7.41.zip file 졸리운_곰 2015.10.27 11
20 도쿠위키 다운로드 dokuwiki-5422200921b.tgz file 졸리운_곰 2015.10.27 47
19 미디어위키 다운로드 mediawiki-1.25.3.tar.gz file 졸리운_곰 2015.10.27 34
18 워드프레스 다운로드 wordpress-4.3.1-ko_KR.zip file 졸리운_곰 2015.10.27 34
17 제로보드 다운로드 XE Core ver. 1.8.13 xe.zip file 졸리운_곰 2015.10.27 30
16 XE 스킨 제작 매뉴얼 v1.1 XE-Skin_Manual-ko(v1.1).pdf file 졸리운_곰 2015.10.26 21
15 제로보드 XE 개발자 가이드 file 졸리운_곰 2015.10.26 23
14 php로 웹 수집 : Basic PHP Web Scraping Script Tutorial 졸리운_곰 2015.09.20 64
13 PHP 와 MYSQL 연동 졸리운_곰 2015.08.11 585
12 PHP 기반의 Micro Frameworks 정리 졸리운_곰 2015.05.15 276
11 PHP의 composer 란 무엇인가?, PHP 의존성 관리도구 졸리운_곰 2015.05.15 372
10 슬림(Slim): 마이크로 프레임워크 [모바일 restful 서버] 졸리운_곰 2015.05.15 243
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED