Last week I wrote a how to on Writing a SOAP and REST Service with PHP. It shows how to write a single script that enables the SOAP and REST web services interfaces using WSF/PHP. Today I’m going to show you how you can use WSF/PHP to write clients in both SOAP and REST form.
For that I use the Amazon Client Demo hosted in the PHP Web Services Demo Site. With this demo you can do shopping with Amazon using their web services API. It uses a php library (AmazonClient.php) that allows us to connect Amazon using SOAP or REST libraries.
You can see in the library code It is using different values for “useSOAP” argument depending on what form of messaging we like to use. Amazon SOAP service uses the SOAP 1.1 and the REST service uses the “GET” HTTP method for messaging. We can configure these details as mentioned in the following table.
REST | SOAP |
array( "to"=>self::AMAZON_REST_ENDPOINT, "HTTPMethod"=>"GET", "useSOAP" => FALSE) |
array( "to"=>self::AMAZON_SOAP_ENDPOINT, "useSOAP" => "1.1", "action" => "http://soap.amazon.com") |
Since Amazon requires different request messages for SOAP and REST services, we have to create them separately depending on the request type. But the response returns by the service is same in both cases so we can handle it using the same code.
Here is how ItemLookup operation of the Amazon service is written within the above mentioned constrains.
/** * ItemLookup * @param $ASIN Amaxon Item Id * @return associate array consist of the response parameters */ public function ItemLookup($ASIN) { if($this->is_soap) { $req_payload = <<<XML <ItemLookup xmlns="http://webservices.amazon.com/AWSECommerceService/2007-10-29"> <SubscriptionId>{$this->amazon_key}</SubscriptionId> <ResponseGroup>Medium</ResponseGroup> <Request> <ItemId>{$ASIN}</ItemId> <ReviewPage>1</ReviewPage> </Request> </ItemLookup> XML; } else { $req_payload = <<<XML <ItemLookup xmlns="http://webservices.amazon.com/AWSECommerceService/2007-10-29"> <SubscriptionId>{$this->amazon_key}</SubscriptionId> <Service>AWSECommerceService</Service> <ResponseGroup>Large</ResponseGroup> <Operation>ItemLookup</Operation> <ItemId>{$ASIN}</ItemId> <ReviewPage>1</ReviewPage> </ItemLookup> XML; } $ret_message = $this->request($req_payload); $simplexml = new SimpleXMLElement($ret_message->str); $res = $simplexml; return $res; }
hi
it’s possible to use wsdl mode with REST?
have you an example?
thanks
sandro
Hi,
No, not yet. In WSF/PHP we can’t use REST in WSDL mode.
Thanks
Dimuthu