ホームページ バックエンド開発 PHPチュートリアル PHP で SOAP 拡張機能を使用して WebService を実装する方法

PHP で SOAP 拡張機能を使用して WebService を実装する方法

Jan 24, 2017 am 10:06 AM

この記事の例では、PHP が SOAP 拡張機能を使用して WebService を実装する方法について説明します。詳細は次のとおりです。

最近、PHP プロジェクトで外部インターフェイスに接続する場合、検索エンジンに関する関連記事がほとんど見つかりません。強力なオープンソース ソフトウェア NuSOAP (ダウンロード アドレス: http://sourceforge.net/projects/nusoap/) と呼ばれる一部のクラスです。記事で説明している環境はPHP 4.3です。現在ではPHP 5.2またはPHP 5.3が一般的です。最初に試してみたのですが、実行が間違っていました。NuSOAP が提供する Soapclient クラスが、PHP 5 の新しい組み込み SOAP 拡張機能を持つ SoapClient クラスと競合することがわかりました。

NuSOAP はすべての PHP 環境で使用できると主張していますが、サーバーのセキュリティ設定の影響を受けません。ただし、多くのクラスファイルを参照する必要があるため、実用的である限り、PHP 5 で追加された組み込みの SOAP 拡張機能を使用する方が良いと考えています。まず、SOAP について学びます:

1. SOAP と XML-PRC の比較

Web サービス開発の初期の頃、XML 形式のメッセージの最初の主要な用途は、RPC が意味する XML-RPC プロトコルに適用されました。リモートプロシージャコールの場合。 XML リモート プロシージャ コール (XML-RPC) では、クライアントは、名前、サービスを実行しているプログラム、および入力パラメータを含む特定のメッセージを送信します。

XML-RPC は、限られたデータ型といくつかの単純なデータ構造のみを使用できます。このプロトコルは十分強力ではないと考えられたため、SOAP が登場しました。SOAP の元々の定義はシンプル オブジェクト アクセス プロトコルでした。その後、SOAP は単純なものではなく、オブジェクト指向言語を使用する必要がないことに徐々に誰もが気づき、現在では SOAP という名前だけが使われるようになりました。

XML-RPC には単純なデータ型のセットしかありません。代わりに、SOAP は XML スキーマの継続的な進化を活用してデータ型を定義します。同時に、SOAP は XML 名前空間も利用できますが、XML-RPC では必要ありません。これにより、SOAP メッセージの先頭を任意のタイプの XML 名前空間宣言にすることができますが、その代わりに、システム間の複雑さと非互換性が増大します。

コンピューター業界の覚醒により、人々は XML ベースの Web サービスのビジネスの可能性を発見し、企業はアイデア、意見、議論、標準化の試みを継続的に模索し始めました。かつてW3Cは、実際にSOAPを作ったXMLプロトコル・ワーキング・グループ(XML Protocol Working Group)も含めて、「Webサービス活動」の名で成果展示会を開催しようとしたことがある。何らかの形で SOAP に関連している、または SOAP に依存している Web サービスに関連する標準化の取り組みの数は、驚くべき程度に 2 倍に増加しています。

元々、SOAP は XML-RPC の拡張として開発されました。その主な重点は、WSDL ファイルから取得したメソッド名と変数名を使用してリモート プロシージャ呼び出しを行うことです。現在、継続的な進歩により、人々は単なる「ファイル」メソッド (基本的に SOAP エンベロープを使用して XML 形式のファイルを送信する) 以外の SOAP の使用方法を発見しました。いずれにせよ、SOAP をマスターするには、WSDL が果たす役割を理解することが基本です。

2. SOAP パケット構造の分析

SOAP メッセージは、SOAP ヘッダーと SOAP ボディを含めて SOAP エンベロープと呼ばれます。このうち、SOAPヘッダーはセキュリティ(証明書を利用してWebサービスにアクセスする)など、Webサービスの機能を拡張するためのさまざまなメッセージを簡単に挿入することができ、SOAPボディはMarshall以降の情報である特定のメッセージテキストです。

SOAP を呼び出すとき、つまり HTTP Post メッセージを URL (http://api.google.com/search/beta2 など) に送信するとき (SOAP 仕様に従って、HTTP Get メッセージもサポートされます)、メソッドの呼び出し 名前は、HTTP リクエスト ヘッダーの SOAP アクションと、その後に続く SOAP エンベロープで指定されます。サーバーはリクエストを受信し、計算を実行し、返された結果を XML にマーシャリングし、HTTP を使用してクライアントに返します。

3. 単純な SOAP の例

SOAP 開発には通常 3 つの方法があります:

1)、PEAR 独自の SOAP 拡張機能
2)、PHP 独自の SOAP 拡張機能
3)、NuSOAP (純粋な PHP)。

PHP 5 の新機能は、PHP の一部として提供される組み込み SOAP 拡張機能であるため、個別のパッケージをダウンロード、インストール、管理する必要はありません。これは、PHP ではなく C で書かれた最初の SOAP 実装であるため、著者はこれが大幅に高速であると主張しています。関連ドキュメントは、PHP マニュアル (php_soap.dll) の「関数リファレンス」セクションに含まれています。

.NET WEB サービスにアクセスするクライアントの例:

< ? php
$objSoapClient = new SoapClient("http://www.webservicemart.com/uszip.asmx?WSDL");
$param = array("ZipCode"=>&#39;12209&#39;);
$out = $objSoapClient->ValidateZip($param);
$data = $out->ValidateZipResult;
echo $data;
?>
ログイン後にコピー

IV. 例

1)、PHP を使用して SOAP サービスを作成します

soap_server.php を作成します (仮想パスは http://localhost/php です) /soap/soap_server.php)

< ? php
/**
* A simple math utility class
*/
class math{
  /**
  * Add two integers together
  *
  * @param integer $a The first integer of the addition
  * @param integer $b The second integer of the addition
  * @return integer The sum of the provided integers
  */
  public function add($a, $b){
    return $a + $b;
  }
  /**
  * Subtract two integers from each other
  *
  * @param integer $a The first integer of the subtraction
  * @param integer $b The second integer of the subtraction
  * @return integer The difference of the provided integers
  */
  public function sub($a, $b){
    return $a - $b;
  }
  /**
  * Div two integers from each other
  *
  * @param integer $a The first integer of the subtraction
  * @param integer $b The second integer of the subtraction
  * @return double The difference of the provided integers
  */
  public function div($a, $b){
    if($b == 0){
      throw new SoapFault(-1, "Cannot divide by zero!");
    }
    return $a / $b;
  }
}
$server = new SoapServer(&#39;math.wsdl&#39;, array(&#39;soap_version&#39;=>SOAP_1_2));
$server->setClass("math");
$server->handle();
?>
ログイン後にコピー

注:

a)、数学クラスは近々公開される Web サービスです
b)、$server->setClass ではありません。 addClass。
2) PHP クライアントを使用して、新しく作成した SOAP サービスにアクセスします

< ? php
// $client = new SoapClient(&#39;http://localhost/php/soap/math.wsdl&#39;);
$client = new SoapClient("http://localhost/php/soap/soap_server.php?WSDL");
try{
  $result = $client->div(8, 2); // will cause a Soap Fault if divide by zero
  print "The answer is: $result";
}catch(SoapFault $e){
  print "Sorry an error was caught executing your request: {$e->getMessage()}";
}
?>
ログイン後にコピー

基本的に、http://localhost/php/soap/soap_server.php?WSDL は、コメント行が指す wsdl 記述ファイルにアクセスするため、この WSDL ファイルは事前に生成しておく必要があります。 Javaなど他の言語の場合は動的に生成できます。 PHP に付属する SOAP 拡張機能の場合、この WSDL ファイルを事前に生成する必要があります。

ZendStudio を使用して静的 WSDL ファイルを生成できます。このとき、数学クラスの phpdoc が WSDL を生成するためのメタデータとして使用されます。 ZendStudio を使用して wsdl ファイルを生成する場合、Web サービスのターゲット アドレスを正しく指定する必要があります。スニペットは次のとおりです。

...
  <service name="mathService">
    <port binding="typens:mathBinding" name="mathPort">
      <soap:address location="http://localhost/php/soap/soap_server.php"></soap:address>
    </port>
  </service>
...
ログイン後にコピー

   

注:调用PHP Webserver的方法必须传入命名参数。

更多PHP使用SOAP扩展实现WebService的方法相关文章请关注PHP中文网!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles