이 문서는 NuSOAP를 구하고 설치하는 방법을 설명하고 NuSOAP의 기능을 설명하는 몇 가지 예를 제공합니다. 이는 NuSOAP에 대한 포괄적인 소개는 아니지만 일부 PHP 개발자가 좋은 소개를 할 수 있기를 바랍니다.
NuSOAP는 개발자가 SOAP 웹 서비스를 생성하고 사용할 수 있도록 하는 PHP 클래스 세트입니다. PHP 확장을 설치할 필요가 없습니다. 2004년 12월 3일 개발되었으며 현재 버전은 NuSOAP(0.6.7)이다. SOAP 1.1 사양을 지원하여 WSDL 1.1을 생성 및 사용할 수 있으며 rpc/encoded 및 document/literal 서비스도 지원합니다. 그러나 NuSOAP는 .NET 및 Apache Axis와 같은 완전한 구현을 제공하지 않는다는 점에 유의하는 것이 중요합니다.
안녕하세요, 세계
"Hello, World" 예제부터 시작하여 기본 NuSOAP 클라이언트 및 서버 코드를 작성하겠습니다.
먼저 서버 측부터 시작하겠습니다. 왜냐하면 서버 측이 없으면 클라이언트 측을 갖는 것은 의미가 없기 때문입니다. 우리는 단일 매개변수를 취하고 문자열을 반환하는 Hello라는 SOAP 메서드를 작성할 것이며, 코드의 주석이 유용한 지침을 제공할 수 있기를 바랍니다.
<?php
// NuSOAP 코드를 가져옵니다.
require_once('nusoap.php');
// 서버 인스턴스 생성
$server = 새로운 비누_서버;
// 노출할 메소드를 등록합니다.
$server->register('안녕하세요');
// 메소드를 PHP 함수로 정의합니다.
함수 hello($name) {
'안녕하세요'를 반환합니다.
}
// 요청을 사용하여 서비스를 호출(시도)합니다.
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) $HTTP_RAW_POST_DATA : '';
$서버->서비스($HTTP_RAW_POST_DATA);
?>
다음은 클라이언트 코드입니다. 주의할 사항은 다음과 같습니다. 먼저, 인스턴스 SoapClient를 생성할 때 서비스 URL을 매개변수로 지정해야 합니다. 이 예에서는 helloworld.php 에 액세스합니다. localhost/phhack 의. 물론, 사용하려는 서비스는 다른 URL에 배치됩니다. 둘째, 서비스를 호출할 때 첫 번째 매개변수는 유효한 메소드 이름과 일치해야 하는 서비스 이름입니다(일부 서버는 대소문자를 구분합니다). 이 예에서는 helloworld.php에 이미 등록된 메소드와 일치해야 합니다. 마지막으로 두 번째 매개변수는 SOAP 서비스 메소드에 매개변수로 전달될 배열입니다. helloworld.php의 hello 메소드에는 하나의 매개변수만 있으므로 배열에는 하나의 요소만 있습니다.
<?php
// NuSOAP 코드를 가져옵니다.
require_once('nusoap.php');
// 클라이언트 인스턴스 생성
$client = new Soapclient('http://localhost/phphack/helloworld.php');
// SOAP 메소드 호출
$result = $client->call('hello', array('name' => 'Scott'));
// 결과 표시
print_r($결과);
?>
디버깅 중
프로그래밍할 때 문제가 발생할 때마다 디버깅해야 합니다. NuSOAP는 이를 수행하는 데 도움이 되는 도구 세트를 제공합니다. NuSOAP 디버깅 시 확인해야 할 정보는 전송된 요청 정보와 해당 정보가 반환되는 것입니다. NuSOAP의 클라이언트 클래스를 사용하면 두 멤버를 통해 이 정보를 볼 수 있습니다. 예를 들어, 다음은 요청과 응답을 보여주는 helloworldclient.php의 수정된 버전입니다. 다음 섹션에서는 클라이언트 코드에 표시되는 요청 및 응답 정보를 검토하겠습니다.
<?php
// NuSOAP 코드를 가져옵니다.
require_once('nusoap.php');
// 클라이언트 인스턴스 생성
$client = new Soapclient('http://localhost/phphack/helloworld.php');
// SOAP 메소드 호출
$result = $client->call('hello', array('name' => 'Scott'));
// 결과 표시
print_r($결과);
// 요청과 응답을 표시합니다.
echo '<h2>요청</h2>';
echo '<pre>' .htmlspecialchars($client->request, ENT_QUOTES) .
echo '<h2>응답</h2>';
echo '<pre>' .htmlspecialchars($client->response, ENT_QUOTES) .
?>
NuSOAP는 클래스를 사용하여 로그를 통해 디버깅 정보를 볼 수 있는 방법도 제공합니다. 다음 코드를 추가하면 긴 디버깅 정보가 표시됩니다. 불행히도 출력에 대한 설명은 독자에게 맡겨야 합니다.
// 디버그 메시지 표시
echo '<h2>디버그</h2>';
echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
흥미롭게도 이러한 디버깅 정보는 해당 SOAP 끝에 있는 xml 형식입니다. 클라이언트에서 볼 수 있도록 표시됩니다. 서버측 디버깅은 다음과 같습니다:
<?php
// NuSOAP 코드를 가져옵니다.
require_once('nusoap.php');
// 서버 인스턴스를 만들기 *전에* 디버깅을 활성화합니다.
$디버그 = 1;
// 서버 인스턴스 생성
$server = 새로운 비누_서버;
// 노출할 메소드를 등록합니다.
$server->register('안녕하세요');
// 메소드를 PHP 함수로 정의합니다.
함수 hello($name) {
'안녕하세요'를 반환합니다.
}
// 요청을 사용하여 서비스를 호출(시도)합니다.
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) $HTTP_RAW_POST_DATA : '';
$서버->서비스($HTTP_RAW_POST_DATA);
?>
세 번째 디버깅 방법은 실제 디버깅이 아니라 좋은 프로그래밍 습관입니다. 위의 예에서는 SOAP를 호출할 때 오류 검사를 수행하지 않습니다. 보다 강력한 클라이언트는 다음과 같습니다.
<?php
// NuSOAP 코드를 가져옵니다.
require_once('nusoap.php');
// 클라이언트 인스턴스 생성
$client = new Soapclient('http://localhost/phphack/helloworld.php');
// 오류가 있는지 확인
$err = $client->getError();
만약 ($err) {
// 오류 표시
echo '<p><b>생성자 오류: ' . $err .
// 이 시점에서 다음 호출이 실패할 것임을 알 수 있습니다.
}
// SOAP 메소드 호출
$result = $client->call('hello', array('name' => 'Scott'));
// 오류가 있는지 확인
if ($client->fault) {
echo '<p><b>오류: ';
print_r($결과);
에코 '</b></p>';
} 또 다른 {
// 오류 확인
$err = $client->getError();
만약 ($err) {
// 오류 표시
echo '<p><b>오류: ' . $err .
} 또 다른 {
// 결과 표시
print_r($결과);
}
}
?>
코드를 테스트하려면 오류가 발생하도록 해야 합니다. 예를 들어 호출된 메서드 이름 hello를 안녕으로 변경합니다.
요청과 응답
위의 예에서는 SOAP 요청 및 응답 정보를 표시하는 것이 얼마나 쉬운지 보여주었습니다. 다음은 hello2client.php에 대한 요청 정보입니다.
POST /phphack/helloworld2.php HTTP/1.0
호스트: 로컬호스트
사용자 에이전트: NuSOAP/0.6.8 (1.81)
콘텐츠 유형: text/xml charset=ISO-8859-1
SOAP액션: ""
콘텐츠 길이: 538
<?xml version="1.0" 인코딩="ISO-8859-1"?>
<SOAP-ENV:봉투
SOAP-ENV:encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope/ "
xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xmlns:SOAP-ENC=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:si=" http://soapinterop.org/xsd ">
<SOAP-ENV:본문>
<ns1:hello xmlns:ns1=" http://testuri.org ">
<name xsi:type="xsd:string">스콧</name>
</ns1:안녕하세요>
</SOAP-ENV:본문>
</SOAP-ENV:봉투>
HTTP 헤더에서 SOAPAction이 기본값인 빈 문자열임을 알 수 있습니다. 서비스 메소드는 SOAPAction의 값을 설정할 수 있으며, 클라이언트 코드는 SOAPAction을 매개변수로 지정하여 메소드를 호출할 수 있습니다.
XML 페이로드에서 NuSOAP가 잘 알려진 ISO-8859-1 인코딩을 Latin-1로 사용하는 것을 볼 수 있습니다. 다른 인코딩을 지정하려면 클라이언트 Soapclient 인스턴스에서 Soap_defencoding 속성을 설정할 수 있습니다. 물론 지정된 인코딩을 사용하여 매개변수 데이터를 인코딩하는 것은 프로그래머의 책임입니다. 다행스럽게도 PHP는 UTF-8과 같은 SOAP에서 가장 일반적인 인코딩 데이터를 인코딩하고 디코딩하는 많은 기능을 제공합니다.
주목해야 할 또 다른 점은 요소 가 호출될 메소드를 지정한다는 것입니다. 실제 도메인 이름을 지정하는 것은 많은 서비스에서 매우 일반적입니다. .필요합니다. 향후 문서는 여기에 표시됩니다.
SOAP 서비스는 다음과 같이 응답합니다.
HTTP/1.1 200 OK
서버: Microsoft-IIS/5.0
날짜: 2004년 11월 3일 수요일 21:32:34 GMT
X-Powered-By: ASP.NET
X-Powered-By: PHP/4.3.4
서버: NuSOAP 서버 v0.6.8
X-SOAP-서버: NuSOAP/0.6.8 (1.81)
콘텐츠 유형: text/xml charset=ISO-8859-1
콘텐츠 길이: 556
<?xml version="1.0" 인코딩="ISO-8859-1"?>
<SOAP-ENV:봉투
SOAP-ENV:encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope/ "
xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xmlns:SOAP-ENC=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:si=" http://soapinterop.org/xsd ">
<SOAP-ENV:본문>
<ns1:helloResponse xmlns:ns1=" http://tempuri.org ">
<return xsi:type="xsd:string">안녕하세요, 스캇</return>
</hello응답>
</SOAP-ENV:본문>
</SOAP-ENV:봉투>