W3C home > Mailing lists > Public > www-ws-desc@w3.org > April 2004

Issue 64 resolution: HTTP operations as WSDL operation names

From: David Orchard <dorchard@bea.com>
Date: Wed, 21 Apr 2004 13:19:11 -0700
Message-ID: <32D5845A745BFB429CBDBADA57CD41AF06E20062@ussjex01.amer.bea.com>
To: <www-ws-desc@w3.org>

Proposal: WSDL 2.0 defines an interface consisting of HTTP operations, WSDL interface operations can use the HTTP operation QNames, a definition of an HTTP binding, and WSDL binding operations can use the HTTP binding.

The discrete items proposed:
1. A WSDL 2.0 interface consisting of the HTTP operations.
2. WSDL interface operations extends attribute may use the WSDL 2.0 HTTP interface qname.
3. HTTP Binding Operations contain an optional location attribute.  If set, this is the default URI for any operation bindings done in the binding operations.   This attribute is in soap 1.2 support proposed resolution.
4. HTTP Binding Operations contain an optional interface attribute.  This indicates that the referenced interface is used in it's entirety.  Each operation in the interface is bound to HTTP according to the operation qname in the referenced interface.  The binding is that the local name portion of the QName is mapped to the HTTP Method.  This is very similar to the interface attribute in SOAP 1.2 web method support.
5. HTTP Binding Operations contain an optional extends attribute references a binding.  Typically this will allow the binding to define the location of the service.

This is a logical extension of a description provided by Jonathan Marsh [1]

There are 2 WSDL definitions following.  The first is the WSDL definitions for HTTP operations.  The 2nd WSDL definitions are sample definitions using the proposed interface operation and binding operation constructs.

WSDL definition of HTTP operations
========

<wsdl:definitions 
    targetNamespace="http://example.org/HTTP" 
    xmlns:http="http://example.org/HTTP" 
    xmlns:wsdl="http://www.w3.org/2004/03/wsdl" 
    
    <wsdl:interface name="HTTP">
        <wsdl:operation name="GET">
            <wsdl:input element="#any"/>
            <wsdl:output element="#any"/>
        </wsdl:operation>
                
        <wsdl:operation name="POST">
            <wsdl:input element="#any"/>
            <wsdl:output element="#any"/>
        </wsdl:operation>

        <wsdl:operation name="PUT">
            <wsdl:input element="#any"/>
            <wsdl:output element="#any"/>
        </wsdl:operation>
                
        <wsdl:operation name="DELETE">
            <wsdl:input element="#any"/>
            <wsdl:output element="#any"/>
        </wsdl:operation>
    </wsdl:interface>

    ...

    <wsdl:binding name="http:HTTP">
      <http:binding>
        <operation name="http:GET">
          <http:operation method="GET" />
        </operation>
        <operation name="http:POST">
          <http:operation method="POST" />
        </operation>
        <operation name="http:PUT">
          <http:operation method="PUT" />
        </operation>
        <operation name="http:DELETE">
          <http:operation method="DELETE" />
        </operation>
        ...
      </http:binding>
    </wsdl:binding>
</wsdl:definitions>

Sample third party WSDL definitions using the wsdl http operations and binding directly.
================

<!-- An application using HTTP directly should have a very simple wsdl definitions -->
   <wsdl:definitions 
      xmlns:myns="http://example.org/mystuff"
      xmlns:wsdl="http://www.w3.org/2004/03/wsdl" 

    <wsdl:import href="wsdl:http"/>

     <!-- interface is just HTTP -->
     <wsdl:interface name="StockQuotes" extends="wsdl:http">
     </wsdl:interface>

    <wsdl:binding name="myns:http" extends="http:HTTP">
	<!-- the binding provides a location for all the operations
      <http:binding location="..." interface="myns:StockQuotes"/>
    </wsdl:binding>

    <wsdl:binding name="myns:httpAlt">
	<!-- the binding provides a location for all the operations
      <http:binding location="..." interface="myns:StockQuotes"/>
 	<operation name="http:GET">
          <http:operation method="GET" />
        </operation>
        <operation name="http:POST">
          <http:operation method="POST" />
        </operation>
        <operation name="http:PUT">
          <http:operation method="POST" />
        </operation>
    </wsdl:binding>

   </wsdl:definitions>

Cheers,
Dave 
[1] http://lists.w3.org/Archives/Public/www-ws-desc/2004Apr/0003.html
 
Received on Wednesday, 21 April 2004 16:19:13 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:58:30 GMT