- From: Jean-Jacques Moreau <jean-jacques.moreau@crf.canon.fr>
- Date: Thu, 08 Jan 2004 17:38:46 +0100
- To: Philippe Le Hegaret <plh@w3.org>
- Cc: Web Services Description <www-ws-desc@w3.org>
Philippe, is there any chance you could provide a diff over the existing spec text (or any other mechanism that you might deem appropriate), to make it easier to evaluate your proposed changes? Jean-Jacques. Philippe Le Hegaret wrote: > Here is a revised proposal for the HTTP binding. It includes the general > URI replacement with an example. It also includes content duplication if > HTTP POST and General URI replacement mechanism are in use (as discussed > last week). > > [[ > 1 HTTP binding for input message reference components referencing XML > Schema types > > If two operations happen to have the same input, only one is allowed > to be bound to GET. > > [[need better wording to express this constraint in terms of > components. This constraint should probably be applied from the > endpoint component level]] > > All element names and content MUST be URI escaped when inserted in the > URI. > > 1.1 General URI replacement mechanism > > The URI replacement mechanism can be applied to the HTTP binding, > independently of the HTTP method in use. The replacement property > contains a relative URI, without a query part and this URI is relative > to the "service endpoint". In order to apply the URI replacement > mechanism, the Interface Operation component MUST follow the rules of > one of the following operation styles: RPC style, Set-Attribute Style > (only if the HTTP verb in use is POST or PUT), or Get-Attribute Style. > > The URI may also contain one or more patterns for each element of the > sequence defined by the content model. Each pattern MUST reference one > element using its qualified name and an element MUST NOT be referenced > more than once using the URI replacement pattern. Each element MUST > have an XML Schema type that is derived from xsd:anySimpleType > with the exception of the types xsd:hexBinary, xsd:base64Binary, and a > list simple type. > > Note that elements referenced using the URI replacement patterns are > NOT removed from the set of elements when using the HTTP POST and PUT > bindings. Elements referenced using the URI replacement patterns are > removed from the set of elements when using the HTTP GET and DELETE > bindings. > > Example: > > Given the XML schema definition and operation component: > <xs:element name="InputCarData"> > <xs:complexType> > <xs:sequence"> > <xs:element name="license" type="xsd:NCName"/> > <xs:element name="property" type="xsd:NMTOKEN"/> > </xs:sequence"> > </xs:complexType> > </xs:element> > > <interface name='Cars'> > <operation name="getProperty_Input"> > <input message='my:InputCarData' /> > <input message='my:OutputCarData' /> > </operation> > </interface> > > with the following instance message component: > <my:InputCarData> > <my:license>AAA555</my:license> > <property>color</property> > </my:InputCarData> > > The URL of the endpoint is > http://motorvehicles.example.com/cars > > The binding location of the interface operation component is > location='/{my:license}/{my:property}' > > > Using the URI replacement mechanism, a new relative URI is computed > and the license and property parts are inserted into the URL > > http://motorvehicles.example.com/cars/AAA555/color > > 1.2 HTTP GET binding > > The HTTP GET binding SHOULD be used for operations that retrieve a > representation of a resource identified by a URL. As defined by the RFC > 2616 (Section 9), the operation MUST be safe and idempotent. Input > parameters SHOULD be used to filter the content of the representation, > for example to performs searches or queries. Operations that do not > satisfy these requirements SHOULD use the POST binding (or other > application HTTP verbs when bindings for them are specified). > > Once the general URI replacement has been applied, the remaning > elements are encoded as query parameters in the URI of the HTTP GET > request. The body of the HTTP GET request is empty. > > In order to apply the URI replacement mechanism, the Interface > Operation component MUST follow the rules of one of the following > operation styles: RPC style or Get-Attribute Style. > > The local names of the remaining elements MUST be unique, independently > of their associated namespaces. > > 1.2.1 No remaining elements > > In such case, no query parameters are required to be sent to the > resource. The URL used for the HTTP GET request is equivalent to the > one composed from section 1.1. > > Example: > URL used for the HTTP GET request: > http://motorvehicles.example.com/cars/AAA555/color > > 1.2.2 One or more remaining elements > > Each remaining element MUST have an XML Schema type that is derived > from xsd:anySimpleType with the exception of the types xsd:hexBinary > and xsd:base64Binary. > > This HTTP GET binding is NOT applicable if one of the elements > references the following XML Schema types: > - an XML Schema complex type definition > - the XML Schema types xsd:hexBinary and xsd:base64Binary, a type > derived from xsd:hexBinary or xsd:base64Binary. > > Each element binds to one or more pairs of [name, value]. Pairs are > inserted in the query part of the URL. The [local name] property of > the element information item represents the name in the pair. > > Unless the XML Schema type is a list simple type definition, the > element binds to exactly one pair of [name, value] and the value > associated with the name is the content of the instance input message. > > Example: > > <xs:element name="InputCarData"> > <xs:complexType> > <xs:sequence"> > <xs:element name="license" type="xsd:NCName"/> > <xs:element name="property" type="xsd:NMTOKEN"/> > </xs:sequence"> > </xs:complexType> > </xs:element> > > <interface name='Cars'> > <operation name="getProperty_Input"> > <input message='my:InputCarData' /> > <input message='my:OutputCarData' /> > </operation> > </interface> > > with the following instance message component: > <my:InputCarData> > <my:license>AAA555</my:license> > <property>color</property> > </my:InputCarData> > > The URI of the endpoint is > http://motorvehicles.example.com/cars/ > > The binding location of the interface operation component is > location='{my:license}' > > Using the URI replacement mechanism, the license is inserted into the > URI > http://motorvehicles.example.com/cars/AAA555 > > Using the URL encoding mechanism, the my:property element is added in > the query part: > http://motorvehicles.example.com/AAA555?property=color > > If the element has an XML Schema list simple type definition, each item > in the content of the instance element binds to a pair, and the > values are the items themselves (the name remains the same for all > pairs). Note that if the list is empty, no pair will be created. > > Example: > > > <xs:element name="InputCarData"> > <xs:complexType> > <xs:sequence"> > <xs:element name="license" type="xsd:NCName"/> > <xs:element name="properties" type="xsd:NMTOKENS"/> > </xs:sequence"> > </xs:complexType> > </xs:element> > > <interface name='Cars'> > <operation name="getProperty_Input"> > <input message='my:InputCarData' /> > <input message='my:OutputCarData' /> > </operation> > </interface> > > with the following instance message component: > <my:InputCarData> > <my:license>AAA555</my:license> > <properties>color year engine_number</properties> > </my:InputCarData> > > The URI of the endpoint is > http://motorvehicles.example.com/cars/ > > The binding location of the interface operation component is > location='{my:license}' > > Using the URI replacement mechanism, the license is inserted into the > URI > http://motorvehicles.example.com/cars/AAA555 > > Using the URI encoding mechanism, the properties are added in the > query part: > http://motorvehicles.example.com/AAA555?properties=color&properties=year&properties=engine_number > > 1.3 HTTP POST binding > > The HTTP POST binding SHOULD be used for operations that MAY have side > effect on the resource identified by a URI. The operation is NOT > guaranteed to be safe and idempotent, as suggested by the RFC > 2616. > > The elements of the input are encoded in the body of the HTTP POST > request. Note that all elements that have been included in the URI > using the general URI replacement mechanism are included as well in the > body of the HTTP POST request. > > 1.3.1 Using the XML encoding mechanism > > The HTTP header Content-Type must be the media type application/xml or > any derived XML type (*/*+xml). > > The element referenced from the input component of the interface > operation component is the content of the body of the HTTP POST > request. > > Example: > > @@TODO > > 1.3.2 Using the multipart encoding mechanism > > Each element of the sequence inside the element referenced from the > input component of the interface operation component is encoded as a > separate multipart part. In order to apply this mechanism, the > Interface Operation component MUST follow the rules of one of the > following operation styles: RPC style, or Set-Attribute Style. > > For each element in the sequence: > > - If the element has a simple type definition xsd:hexBinary or > xsd:base64Binary or a derived type from xsd:hexBinary or > xsd:base64Binary, the content of the element instance is the content > and the media type is the one specified (@@cf Media types work). > > - Otherwise, the XML representation of the element instance is the > content and the media type is application/xml or any derived XML type > (*/*+xml). > > Example: > > @@TODO > > 1.3.3 Using the application/x-www-form-urlencoded encoding mechanism > > Each element of the sequence referenced from the interface operation > MUST have an XML Schema type that is derived from xsd:anySimpleType > with the exception of the types xsd:hexBinary and xsd:base64Binary. > > This mechanism is NOT applicable if one of the types referenced from > the message parts reference: > - an XML Schema complex type definition > - the XML Schema types xsd:hexBinary and xsd:base64Binary, a type > derived from xsd:hexBinary or xsd:base64Binary. > > [[@@ describe the encoding mechanism or provide a reference to the > right place]] > > Example: > > @@TODO > > 1.4 HTTP PUT binding > > @@TODO > > @@restriction on the output message? > > 1.5 HTTP DELETE binding > > @@TODO > > @@restriction on the output message? > > 2 HTTP binding for output message reference components referencing XML > Schema types > > The content of the output message is encoded in the content of the HTTP > reply. > > [ditto HTTP POST binding for input message, minus the URI mechanisms] > ]] > > Philippe > >
Received on Thursday, 8 January 2004 11:41:15 UTC