Choosing an Interface for Web Service Access
Data services – that is, your XQuery exposed as a Web service – deployed on the XQueryWebService framework can be accessed using two techniques:
SOAP is a W3C Recommendation and has been around for nearly a decade. SOAP is usually the more appropriate of the two techniques for complex processing or when security (exposing sensitive data) is an issue. But REST is gaining popularity for a couple of reasons, including minimal requirements on the client, and an interface – the URI – that is straightforward and well-understood.
Sample XQuery
Let's take a look at emp.xquery, which we have saved to our local XQuery directory (c:\MyQueryDir, as defined in web.xml).
declare variable $id as xs:string external; <root> { for $employee in collection("pubs.dbo.employee")/employee where $employee/emp_id = $id return $employee } </root>When run against the SQL Server pubs sample database, this XQuery returns an employee record given an ID ("A-C71970F").
Using REST
Using REST, this XQuery can be executed from any Internet browser using just this URI:
Notice that with REST, the employee ID ("id=A-C71970F") is visible in the URI.
The result looks something like this:
<dd:Output xmlns:dd="http://www.datadirect.com"> <root> <employee> <emp_id>A-C71970F</emp_id> <fname>Aria</fname> <minit/> <lname>Cruz</lname> <job_id>10</job_id> <job_lvl>87</job_lvl> <pub_id>1389</pub_id> <hire_date>1991-10-26T00:00:00</hire_date> </employee> </root> </dd:Output>Using SOAP
Using SOAP, on the other hand, requires submitting the following SOAP request (XML):
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <dd:emp xmlns:dd="http://www.datadirect.com"> <dd:id>A-C71970F</dd:id> </dd:emp> </SOAP-ENV:Body> </SOAP-ENV:Envelope>The result, shown here, is pretty much the same as the one returned using REST, only now it is “wrapped” in the SOAP envelope:
<SOAP-ENV:Envelope xmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <dd:Output xmlns:dd="http://www.datadirect.com"> <root> <employee> <emp_id>A-C71970F</emp_id> <fname>Aria</fname> <minit> </minit> <lname>Cruz</lname> <job_id>10</job_id> <job_lvl>87</job_lvl> <pub_id>1389</pub_id> <hire_date>1991-10-26T00:00:00</hire_date> </employee> </root> </dd:Output> </SOAP-ENV:Body> </SOAP-ENV:Envelope>Next Steps
The XQueryWebService framework includes some simple tools that let you test the Web service operations you include in your applications. These tools are covered in the next section.