- From: Christopher B Ferris <chrisfer@us.ibm.com>
- Date: Tue, 27 May 2003 20:08:13 -0400
- To: www-ws@w3.org
+1 I was drafting a near identical response when my mail client crashed. POST means whatever the origin server wants it to mean in the context of the resource's URI. Hence, no set semantic can be assigned. It might as well have been called DOSOMETHINGWITHTHEENTITYBODYINTHEREQUEST:) So, back to Noah's original response, XMLP added the Web method to SOAP, they gave specific recommendations that it should be used. Isn't that enough. The method is only the tip of the visibility iceberg. I think that it is more critical to have visibility of the headers. There's an abundance of "visibility" of the RFC2616 defined HTTP header fields, but the extension headers? No "visibility" there I'm afraid: "The extension-header mechanism allows additional entity-header fields to be defined without changing the protocol, but these fields cannot be assumed to be recognizable by the recipient. Unrecognized header fields SHOULD be ignored by the recipient and MUST be forwarded by transparent proxies." I would actually go as far as to suggest that SOAP is MORE visible than HTTP because a) there is a well defined process model and b) you don't have to concern yourself of having name collision because SOAP headers are namespace qualified. An intermediary can be more certain that it will (correctly) understand SOAP headers (semantic, not syntactic, understanding) than it can HTTP headers because there is always the possibility that HTTP headers that are not defined in RFC2616 might be misconstrued due to name collision. In fact, an intermediary can know if the header is important or can be safely ignored. SOAP *can* be used in a RESTful manner, and the XMLP WG has taken great pains to ensure that to be the case. The fact of the matter is that you are setting the bar higher for Web services than for HTTP itself. There is lots you can do with HTTP that is not very RESTFUL. Should we be falling all over ourselves and raising issues with the TAG to protect the Web from HTTP!? Not likely. You keep claiming that it is only the constraints of REST, manifested in the HTTP protocol, which have allowed the Web to flourish. I think that experience has actually proven such a claim to be somewhat exaggerated. People have used and abused the Web in many nonRESTful ways and yet the Web has flourished despite such abuses. I certainly believe that there is MUCH to be said for REST and its architectural constraints, just as I am sure that those constraints have in some way helped the Web to flourish. However, I also firmly believe that the application of the Web, a hyperlinked information space (typically, but not exclusively, accessed via a browser) is not an application that necessarily maps easily or readily to all other (many, pre-existing and not usually subject to modification (if it ain't broke...)) applications. You will no doubtedly claim otherwise as is your prerogative, but it is yet another unsubstantiated claim. There is nothing stopping you, or anyone else from using SOAP (and WSDL) such that there are only a few well defined methods, possibly ripped right out of RFC2616 (but with a couple of others added in because even you agree that there are new methods worth adding (MONITOR/WATCH). Here, I'll even write the WSDL. <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamesapce="http://markbaker.com" xmlns:tns="http://markbaker.com" xmlns:my="http://markbaker.com/schema" name="myuberservicedescription" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:s="http://schemas.xmlsoap.org/wsdl/soap/"> <types> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://markbaker.com/schema" xmlns:tns="http://markbaker.com/schema" xmlns:xs="http://www,w3.org/2001/XMLSchema"> <element name="uri" type="xs:anyURI"/> <element name="message"> <complexType> <sequence> <element ref="tns:uri"/> <any namespace="##other" processContents="skip" minOccurs="0" maxOccurs="unbounded"/> </sequence> <anyAttribute namespace="##other" processContents="skip"/> </complexType> </element> <element name="faultDetails"> <complexType> <sequence> <element name="code"> <simpleType> <simpleContent> <restriction base="xs:string"> <enumeration value="1xx"/> <enumeration value="2xx"/> <enumeration value="3xx"/> <enumeration value="4xx"/> <enumeration value="5xx"/> </restriction> </simpleContent> </simpleType> </element> <any namespace="##other" processContents="skip" minOccurs="0" maxOccurs="unbounded"/> </sequence> <anyAttribute namespace="##other" processContents="skip"/> </complexType> </element> </schema> </types> <message "justauri"> <part name="x" element="my:uri"/> </message> <message "any"> <part name="x" element="my:message"/> </message> <message "anyFault"> <part name="fault" element="my:faultDetail"/> </message> <portType name="uberalles"> <operation name="GET"> <input message="my:justauri"/> <output message="my:message"/> <fault message="my:anyFault"/> </operation> <operation name="PUT"> <input message="my:message"/> <output message="my:message"/> <fault message="my:anyFault"/> </operation> <operation name="DOSOMETHINGWITHTHEENTITYBODYINTHEREQUEST"> <input message="my:message"/> <output message="my:message"/> <fault message="my:anyFault"/> </operation> <operation name="DELETE"> <input message="my:justauri"/> <output message="my:message"/> <fault message="my:anyFault"/> </operation> </portType> <binding name="onlyoneneeded" type="tns:uberalles"> <s:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="GET"> <s:body use="literal"/> </operation> <operation name="PUT"> <s:body use="literal"/> </operation> <operation name="DOSOMETHINGWITHTHEENTITYBODYINTHEREQUEST"> <s:body use="literal"/> </operation> <operation name="DELETE"> <s:body use="literal"/> </operation> </binding> <service name="[yourservicenamegoeshere]"> <port binding="tns:onlyoneneededbecausehttpistheperfectapplicationprotocol"> <s:address location="[yourresourceurigoeshere]"/> </port> </service> <definitions> I guess we can all go home now, there's nothing more to be done. Cheers, Christopher Ferris STSM, Emerging e-business Industry Architecture email: chrisfer@us.ibm.com phone: +1 508 234 3624 www-ws-request@w3.org wrote on 05/27/2003 05:13:12 PM: > > > Yes, in practice, POST is a bit of a black hole in that respect (but > > with any data, not just binary). > > Mark, you and I had this discussion almost a half a year ago > on rest-discuss. "POST is a bit of a black hole". If indeed it's an > elongated black hole, then that makes it a tunnel. It would be hard > for an intermediary to determine whether any given POST > message was > > a. Appending a database > b. annotating some document > c. submitting data for "processing" > d. adding to a bulletin board > > That being the case, what is the meaning of your next statement > below? The POST action could be darned near anything, so > what's left not to expect? > > > > > FWIW, a RESTful use of POST is quite visible; an intermediary knows that > > there is no expectation of anything happening other than the POST action > > being taken (i.e. no tunneling going on). > > > > Okay, so if the application is not tunneling beyond the tunnel > already provided by POST, then intermediaries know the application > is not doing a GET, and so they know not to cache the response. > Is there anything else? > > Walden > >
Received on Tuesday, 27 May 2003 20:08:21 UTC