The Best Practices of using WSClient

Monday, January 7, 2008

If you are accessing Webservice in your application, the best practice is to delegate your Webservice accessing aspects to a separate class. This way you can hide the Webservice consumer layer from the rest of the application.

When you are using WSClient in WSO2 Web Service Framework for PHP, you can do this by defining a separate class which extend the WSClient. For an example think about a simple Webservice for ScoreBoard which gives the total score of a Cricket match. Then you will write a PHP class which completely interact with the Service.

  1 <?php
3 class ScoreBoardClient extends WSClient
4 {
5 // Constructor of the new Client
6 public function __construct() {
7 parent::__construct(array( "to" => ""));
8 }
10 // The service operation of getting Total Score
11 // You can provide the match number and the team name
12 public function getTotalScore($match_no, $team) {
14 $xml = <<< XML
15 <GetTotalScore>
16 <match>{$match_no}</match>
17 <team>{$team}</team>
18 </GetTotalScore>
19 XML;
20 try
21 {
22 $res = $this->request($xml);
23 }
24 catch(Exception $e)
25 {
26 // Handle the exception..
27 return -1;
28 }
29 // For the clarity I ignore the response xml processing part
30 return $res->str;
32 }

33 }
35 ?>

  • The PHP Class: (lines 3 -33) - The ScoreBoarClient PHP class which extends the WSClient.
  • The constructor: (lines 6-8) - This calls the WSClient constructor (the parent of the ScoreBoardClient class) with options, in this case only the service endpoint. If you are intending to use WS-Security, you may initialize the service policies here.
  • The Service operation wrapper (lines 12-32) - This is where you do all the Webservice accesing stuffs like building the request payload(lines 14-19), calling the remote service (lines22), and return the result to the caller.

So lets see how the application call the service using this class.

01 $my_scoreboard = new ScoreBoardClient();
03 $total_score = $my_scoreboard->getTotalScore(5, "Sri Lanka");
05 echo "Total Score is: $total_score \n";

It s simple as we are calling another local function. If you like to see more example which follow this pattern, just go to the script/wso2 directory of the WSO2 WSF/PHP distribution and observe how amazon, flickr and yahoo webservices are wrapped with PHP Classes.

No comments: