WSDL, a W3C recommendation, is the Web Services Description Language. It is commonly used to spell out in detail the services offered by a SOAP server. While WSDL is flexible in service binding options (for example, services can be offered via SMTP mail servers), it did not originally support HTTP operations other than GET and POST. Since REST services often use other HTTP verbs, such as PUT and DELETE, WSDL was a poor choice for documenting REST services.
With version 2.0, WSDL supports all HTTP verbs and it is now considered to be an acceptable method of documenting REST services.
The second alternative is WADL, the Web Application Description Language. WADL is championed by Sun Microsystems. Like the rest of REST, WADL is lightweight, easier to understand and easier to write than WSDL. In some respects, it is not as flexible as WSDL (no binding to SMTP servers), but it is sufficient for any REST service and much less verbose.
Here is a fragment from a WADL specification, describing Amazon's "Item Search" service:
<method name="GET" id="ItemSearch"> <request> <param name="Service" style="query" fixed="AWSECommerceService"/> <param name="Version" style="query" fixed="2005-07-26"/> <param name="Operation" style="query" fixed="ItemSearch"/> <param name="SubscriptionId" style="query" type="xsd:string" required="true"/> <param name="SearchIndex" style="query" type="aws:SearchIndexType" required="true"> <option value="Books"/> <option value="DVD"/> <option value="Music"/> </param> <param name="Keywords" style="query" type="aws:KeywordList" required="true"/> <param name="ResponseGroup" style="query" type="aws:ResponseGroupType" repeating="true"> <option value="Small"/> <option value="Medium"/> <option value="Large"/> <option value="Images"/> </param> </request> <response> <representation mediaType="text/xml" element="aws:ItemSearchResponse"/> </response> </method>
As you can see, for format is mostly self-explanatory, and it enriches REST with such goodies as type safety using XML schema types.
- The entire document is only about 10 lines longer than this fragment (including XML namespace specifications, importing schema grammers, etc.) and can be found in the WADL specification.
- For another real-world WADL document, check out the W3C Unicorn project's specification of the CSS validator service.
Some REST advocates, however, find even the lightweight WADL to be an overkill. And indeed, most REST services are documented by no more than a textual description (a human-readable HTML file).