Evaluating WSDL's HTTP Support
This page is a discussion of the strengths, weaknesses
and implementations of the HTTP GET/POST binding for WSDL. This binding is
fairly good but is lacking some features that would make it
useful for sophisticated real-world web services.
Strengths
- Any support for HTTP in a "Web Services" specification is
welcome.
- Support for both
GET and POST is important because GET and POST have very different semantics
- Support for non-XML media types makes the HTTP binding -- this is
especially welcome considering the SOAP binding does not need it.
Crucial Improvements Needed
- There is no reason to require that a single "port" will be provided
by a single machine. It MUST be possible for operation binding addresses
to be absolute URIs or URIs discovered in XML messages at runtime.
- The binding SHOULD support GET/POST/PUT/DELETE. The extra cost
in supporting the extra methods is negligible and it will allow much more
structured web services.
- It MUST be possible for one port to mix multiple HTTP methods. One operation could be GET (safe, idempotent) and the next POST (not safe, not idempotent).
- It MUST be possible for the same URI to accept multiple
methods (GET, POST, etc.).
- It MUST be possible to support a GET with no parameters: i.e
get the content of the URI directly.
- It MUST be possible to describe a Web of ports/services, just
as the HTML Web is a Web of pages. That means that it must be possible to
express the WSDL port type of the referents of hyperlinks in a result.
For instance consider this result document:
<purchaseOrder>
<customer href="http://machine/customers/02343"/>
<product href="http://machine/products/23432"/>
</purchaseOrder>
I should be able to say that "customer" and "product" are of either
"port type" or "service type" "http://machine/wsdls/customer.wsdl" and
"http://machine/wsdls/product.wsdl" respectively. This is discussed further in a message I wrote to the TAG.
- A variety of
clarifications
are needed.
Nice-to-haves
- The binding SHOULD support extension methods, but that could
also wait until WSDL 2.0
- It SHOULD be possible to specify input and output HTTP
parameters.
Implementations
Microsoft .NET
Microsoft has the leading implementation of the HTTP bindings but they
have the following missing features (among others):
- There is no support for the element types described in the WSDL
specification: mime:content (and mime:multipartRelated?).
- Inexplicably, integer and boolean parameters are represented as
strings in generated C# proxies.
- It ignores mime:mimeXml (and presumably other MIME elements) in an
input binding.
Other Implementations
GLUE is
documented as supportinng HTTP GET/POST services. I believe that this is only
on the server side, not the client side.