SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
japan.internet.com翻訳記事

AJAXでPHP Webサービスを利用する

NuSOAPライブラリ、AJAX技術、SOAPプロトコルの使用法

  • X ポスト
  • このエントリーをはてなブックマークに追加

 本稿では、NuSOAPライブラリを使用してPHP Webサービスを構築する方法と、AJAX技術およびSOAPプロトコルを使用してPHP Webサービスを利用するJavaScriptクライアントを構築する方法を中心に説明します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 本稿では、NuSOAPライブラリを使用してPHP Webサービスを構築する方法と、AJAX技術およびSOAPプロトコルを使用してPHP Webサービスを利用するJavaScriptクライアントを構築する方法を中心に説明します。まずは、Webサービスの用語について少し説明しましょう。

SOAPおよびWebサービスに関する概略

 SOAP(Simple Object Access Protocol)は、XMLベースの要求/応答メッセージングプロトコルです。SOAPの重要な特徴は、特定のトランスポートプロトコルに依存せず(最も頻繁に使用されるのはHTTPですが、SMTP、MIMEなども使用できます)、特定のオペレーティングシステムやプログラミング言語にも依存しないという点です。そのため、さまざまなソフトウェアアーキテクチャ上で高い柔軟性を発揮するだけではなく、非常に使いやすくなっています。

 Webサービスとは、ネットワーク上でリモートに呼び出されるよう設計されたソフトウェアシステムの一般的な名称です。これらのサービスで実行されるタスクは多岐にわたり、実装もそれぞれに異なりますが、一般的なWebサービスは次のことを前提としています。

  • Webサービスは、一連の操作に基づいて問い合わせを受けるサーバとして公開されます。
  • 利用可能な操作を、WSDL(Webサービス記述言語)ドキュメントと呼ばれるXMLドキュメントを使用して「パブリッシュ」します。通常、このドキュメントは、人間の手ではなく機械によって生成され、解析(分析)されます。
  • Webサービスにアクセスするエンティティは、Webサービスクライアントと呼ばれます。
  • クライアントとサーバ間の通信プロトコルはSOAPです。

PHPでSOAPを使用する

 Webサービスはまたたく間にさまざまな分野で利用されるようになったため、一般的なプログラミング言語のほとんどは、Webサービスの構築と利用に対するサポートを提供し、より強化すべく取り組んできました。例えば、PHPには、Webサービスのサポートを追加するいくつかの拡張機能(PEARとライブラリ)があります。PHP5以降は、このようなサポートはNuSOAPと呼ばれるライブラリとして、PHPに標準装備されています。

 NuSOAPライブラリは操作性と性能に優れているため、本稿では、このライブラリを使用して完全なWebサービスを開発する方法を説明します。もし読者が他の拡張機能/ライブラリに精通していて、本稿の後半部分(JavaScript AJAXクライアントの開発方法)にのみ関心がある場合は、お好みの技術を使用して、サーバ側Webサービスを再構築することももちろん可能です。

 NuSOAPライブラリは、HTTPプロトコルを使用してSOAPメッセージの送受信をサポートするPHPクラスの集合です。NuSOAPライブラリは、別名「SOAPx4」とも呼ばれるNuSphere社の製品で、公式サイトからダウンロードできます。NuSOAPクラスを使用するには、PHPソースファイル内に次のコードスニペットを含めます。

   require_once('{NuSOAPフォルダパスおよびフォルダ名}/lib/nusoap.php');

 本稿でこれからNuSOAPを使って開発するサーバは、TriangleAreaとRectangleAreaという2つのメソッドを公開します。これらのメソッドは、その名のとおり、それぞれ三角形と長方形の面積を求めます。次に、Webサービスを開発する手順を紹介します。

1、メソッドの記述

 まず、2つのメソッドを記述します。お分かりのように単純な作業です。

// Define the TriangleArea method as a PHP function
function TriangleArea($b, $h) {
return 'The triangle area is:' .((b*h)/2);
   }
  
// Define the RectangleArea method as a PHP function
function RectangleArea($L, $l) {
  return 'The rectangle area is:' .($L*$l);

 それぞれのメソッドは2つのパラメータを取ります。TriangleAreaメソッドは三角形の底辺と高さの整数値、RectangleAreaメソッドは長方形の幅と高さです。どちらのメソッドも、計算において求められた面積の値を含む文字列を返します。

 これら2つのメソッドを記述したら、メソッドを公開するためのWebサービスが必要になります。

2、Webサービスインスタンスを取得

 NuSOAPは、Webサービスの詳細を1つのクラスにカプセル化しているので、次のように空のコンストラクタsoap_serverを呼び出すだけで、Webサービスインスタンスを取得できます。

// Create the server instance
$server = new soap_server();

3、WSDLファイルの名前と名前空間を指定

 Webサービスサーバに対応するWSDLファイルの名前と名前空間を指定します。これを行うには、名前と名前空間のみを必要とするnusoap.phpクラスのconfigureWSDLメソッドを呼び出します。

// Initialize WSDL support
$server->configureWSDL('mathwsdl', 'urn:mathwsdl');

4、メソッドを登録

 次に、メソッドを登録します(この例では2つあります)。メソッドを登録することで、そのメソッドの名前、引数、戻り値の型、SOAPアクション、スタイル、エンコーディング、説明をWebサービスサーバに認識させます。これらのプロパティはすべて、registerという1つのメソッドで指定できます。例えば、TriangleAreaとRectangleAreaメソッドを登録するには、次のように行います。

// Register the TriangleArea method
$server->register('TriangleArea',                  // method name
   array('b' => 'xsd:int', 'h' => 'xsd:int'),     // input parameters
   array('area_t' => 'xsd:string'),               // output parameters
   'urn:mathwsdl',                                // namespace
   'urn:mathwsdl#TriangleArea',                   // soapaction
   'rpc',                                         // style
   'encoded',                                     // use
   'Calculate a triangle area as (b*h)/2'         // documentation
);
  
// Register the RectangleArea method to expose
$server->register('RectangleArea',                 // method name
   array('L' => 'xsd:int', 'l' => 'xsd:int'),     // input parameters
   array('area_r' => 'xsd:string'),               // output parameters
   'urn:mathwsdl',                                // namespace
   'urn:RectangleAreawsdl#RectangleArea',         // soapaction
   'rpc',                                         // style
   'encoded',                                     // use
   'Calculate a rectangle area as (L*l)'          // documentation
);
※注

 この登録内容は、NuSOAP固有のものです。

5、Webサービスを起動

 最後に、次のようにしてNuSOAPのserviceメソッドを呼び出し、Webサービスを起動します。

// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA =
   isset($HTTP_RAW_POST_DATA) ?
   $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);

 このシンプルな5つのステップを実行すると、リスト1のWebサービスのようなコードが得られます(これをwebserviceという名前のフォルダに保存しておきます)。

リスト1 シンプルなWebサービス
<?php
// Pull in the NuSOAP code
require_once('./nusoap-php5-0.9/lib/nusoap.php');
// Create the server instance
$server = new soap_server();
// Initialize WSDL support
$server->configureWSDL('mathwsdl', 'urn:mathwsdl');

// Register the TriangleArea method to expose it
$server->register('TriangleArea',                   // method name
    array('b' => 'xsd:int', 'h' => 'xsd:int'),   // input parameters
    array('area_t' => 'xsd:string'),                // output parameters
    'urn:mathwsdl',                                    // namespace
    'urn:mathwsdl#TriangleArea',                       // soapaction
    'rpc',                                             // style
    'encoded',                                         // use
    'Calculate a triangle area as (b*h)/2'             // documentation
);

// Register the RectangleArea method to expose it
$server->register('RectangleArea',                  // method name
    array('L' => 'xsd:int', 'l' => 'xsd:int'),   // input parameters
    array('area_r' => 'xsd:string'),                // output parameters
    'urn:mathwsdl',                                    // namespace
    'urn:RectangleAreawsdl#RectangleArea',             // soapaction
    'rpc',                                             // style
    'encoded',                                         // use
    'Calculate a rectangle area as (L*l)'              // documentation
);

// Define the TriangleArea method as a PHP function
function TriangleArea($b, $h) {
        return 'The triangle area is: ' .((b*h)/2);
}

// Define the RectangleArea method as a PHP function
function RectangleArea($L, $l) {
        return 'The rectangle area is: ' .($L*$l);
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Webサービスを確認する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Octavia Andreea Anghel(Octavia Andreea Anghel)

経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3939 2009/05/29 14:00
" ); }

おすすめ

アクセスランキング

  1. 1
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  2. 2
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    Google、社内AIエージェント「Google Agentspace」発表
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  1. 6
    Linuxディストリビューション「Serpent OS」、アルファ版がリリース
  2. 7
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  3. 8
    中小企業の約6割、外部委託エンジニアの獲得に意欲的も、65.1%が「円滑な業務契約に向けた対策」の必要性を実感
  4. 9
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  5. 10
    「イテレータ」 ~マンガでプログラミング用語解説

アクセスランキング

  1. 1
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  2. 2
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    Google、社内AIエージェント「Google Agentspace」発表
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  6. 6
    Linuxディストリビューション「Serpent OS」、アルファ版がリリース
  7. 7
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  8. 8
    中小企業の約6割、外部委託エンジニアの獲得に意欲的も、65.1%が「円滑な業務契約に向けた対策」の必要性を実感
  9. 9
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  10. 10
    「イテレータ」 ~マンガでプログラミング用語解説
  1. 1
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 2
    「CUDA」 ~マンガでプログラミング用語解説
  3. 3
    ITエンジニア本大賞2025、投票締切直前! みんなで選んだ歴代の大賞本を振り返って一挙紹介
  4. 4
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 5
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  6. 6
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  7. 7
    2024年12月に開催される注目のITエンジニア向けカンファレンス5選
  8. 8
    日本在住の英語を話すソフトウェア開発者、年収の中央値は950万円に
  9. 9
    Google、社内AIエージェント「Google Agentspace」発表
  10. 10
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  2. 2
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    Google、社内AIエージェント「Google Agentspace」発表
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  1. 6
    Linuxディストリビューション「Serpent OS」、アルファ版がリリース
  2. 7
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  3. 8
    中小企業の約6割、外部委託エンジニアの獲得に意欲的も、65.1%が「円滑な業務契約に向けた対策」の必要性を実感
  4. 9
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  5. 10
    「イテレータ」 ~マンガでプログラミング用語解説

アクセスランキング

  1. 1
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  2. 2
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    Google、社内AIエージェント「Google Agentspace」発表
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  6. 6
    Linuxディストリビューション「Serpent OS」、アルファ版がリリース
  7. 7
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  8. 8
    中小企業の約6割、外部委託エンジニアの獲得に意欲的も、65.1%が「円滑な業務契約に向けた対策」の必要性を実感
  9. 9
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  10. 10
    「イテレータ」 ~マンガでプログラミング用語解説
  1. 1
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 2
    「CUDA」 ~マンガでプログラミング用語解説
  3. 3
    ITエンジニア本大賞2025、投票締切直前! みんなで選んだ歴代の大賞本を振り返って一挙紹介
  4. 4
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 5
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  6. 6
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  7. 7
    2024年12月に開催される注目のITエンジニア向けカンファレンス5選
  8. 8
    日本在住の英語を話すソフトウェア開発者、年収の中央値は950万円に
  9. 9
    Google、社内AIエージェント「Google Agentspace」発表
  10. 10
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略