Can.Worms.Open()

I'm making available a near final draft of the Busy Developers Guide to WSDL, Part III: a.k.a. document literal.  I may do some more tweaks and respond to suggestions and bug reports. 

The example in this essay is based on the RESTLog create news interface, modified to be compliant with the SOAP 1.1 specifications.

I can't help but note that this document shows how it is possible to answer yes to all eight questions in Paul Prescod's Slippery Soap.  It is also related to the irony that Jon Udell deemed priceless, and, of course, the REST+SOAP essay.

Let the fireworks begin.  And Joe, if the result is any forward progress at all, I promise to go back and address your questions, once the embers have died down, of course.


More RESTful API Discussions.

Joe Gregorio and Sam Ruby have been busy discussing the use of SOAP and WSDL in RESTful APIs like Joe's RESTLog. ... [more]

Trackback from tima thinking outloud. at


Interesting and informative. I do have a question and a comment:

Question: A schema is _required_?

Comment: 90% of the functionality that you are showing is the result of the Schema and a cool capability in the .Net framework that can turn such a Schema into an class for easy serialization/deserialization/manipulation.

If that part can be broken out on it's own you could do the same thing for the RESTian interface. I haven't looked, but given the breadth of classes in the .Net library I wouldn't be suprised to find it.

And thanks for the reminder, I do need to update the documentation for what is returned from each action. In this cast POST returns no content, but returns with a status of 201: Created and has a Location: header that points to the newly created POST. That way it's all prepared for the day XForms hits the web, which will obsolete my little client application.


Posted by joe at

Now this is the discussion I wanted to have, i.e., what are the good pieces of SOAP and REST and how can they be combined? It is also why I made reference to the ironic quote above as I would like to motivate a discussion about having both uniform object access and discoverable representations.

I started this discussion by saying that I would rather see a Valid Web. So the answer to the first question is, yes, in order to have validity one needs to have some description which can be discovered from which dynamic or static proxies can be created.

Hopefully, this essay answers your question as to what a proxy is and how one can be created. Oh, and the .NET program you are looking for is XSD.EXE.

Posted by Sam Ruby at

Sweet... It looks like all the pieces are in place to automate this.

Time to make tools. I like the name Rope: RESTian Object Package Extractor?

So how about this for a tool scenario:

1. Point Rope at a web site.

2. Rope picks up a link to an RSD file.

3. Looks in the RSD file for different APIs and let's you choose which one you want to use.

4. Rope follows the doc links for chosen API and all extensions and pulls down the files looking for RDDL.

5. Pulls down all the Relax NG or Schema files mentioned in the RDDL. (Note the inclusion of Relax NG intentionally chosen for Simon.)

6. Convert Relax NG to Schema.

7. Use XSD.EXE to convert the Schema to interface classes.

Or is all this functionality wrapped up inside WSDL as well?

In the future Rope could be extended to handle auto creation of XML-RPC and SOAP endpoints described in an RSD file as well. No, wait, scratch that, nobody wants SOAP on a Rope.



Posted by joe at

Nothing is new under the sun. Not even the name Remote Object Protocol Extractor.

What you are proposing is merely substituing one set of personal / political preferences (RSD, RDDL, RelaxNG, XML RPC), for another (WSIF, WSDL, XSD, SOAP).

As Seinfeld would say, not that there is anything wrong with that. Sure, you will go and retrace the same steps that the web services folks have already trodden. In the process, you will likely make some of the same mistakes. And they will rightly cluck at you in the same way that the RESTians are currently clucking at the WS folks.

Ignore the politics. The real question is how do you get the Java, Perl, and VB6 guys on board?

Posted by Sam Ruby at

Sam writes:
"Ignore the politics."

I read that as meaning:
"Disagreement with my positions is just politics."

It gets really tired after a while.

Personally, I see RELAX NG and RDDL as great tools for the Java, Perl, and VB folks - I'm not exactly sure why you think them inappropriate.

What Joe's suggesting is using a Web interface rather than a Web Services interface for his project. That seems pretty rational to me, and well-connected to the kinds of things he's been saying for a while on http://wellformedweb.org/.

Ah, tasty worms. Here's a particularly delicious worm that might be worth sampling:
http://www.xml.com/pub/a/2002/06/19/rng-compact.html

Seems like a set of tools that lets developers get work done without getting trapped in a maze of strange schema issues or even angle brackets.

Politics? Dunno. Seems like a good way to get work done to me.

Posted by Simon St.Laurent at

Simon, the "my schema syntax can beat up your schema syntax" is exactly the conversation I wanted to avoid. If it helps further the discussion, I will readily concede the point that the ${SimonsFavoriteSchemaLanguageDuJour} is the be all and end all way in which to express metadata for now and for all time, without peer or equal.

Personally, I think that there are more important things that the people who advocate REST and people who advocate SOAP can learn from each other.

Posted by Sam Ruby at

If you really don't want to talk about substantive issues, there's no way I can make you. Meaningless "concessions" don't further the conversation, nor do they seem likely to further your "mission". I'm not sure how exactly I'm supposed to learn from that message, except perhaps to recognize that this isn't a conversation.

I'll take a closer look at implementing RESTlog in Java over the holidays, and maybe that will interest you more.


Posted by Simon St.Laurent at

"What you are proposing is merely substituing one set of personal / political preferences (RSD, RDDL, RelaxNG, XML RPC), for another (WSIF, WSDL, XSD, SOAP).

That is an interesting comparison, though I would map it out as:

RSD ---- WSIL
XSD.exe ---- WSDL.exe
RDDL+Relax NG+Schema ---- WSDL+Schema
n/a ---- SOAP (SOAP Envelope)

And I wouldn't map the difference as
personal/political, I would map it as an architectural difference as Simon pointed out. Now when we're dealing with the simple example of 'createNews' that difference seems rather trivial, which is why I am holding you to your promise to move on to more substantive differences:
http://www.intertwingly.net/blog/1010.html#c1039978756

I will admit to seeing you're logic in wanting a Valid-Web. You need the schema for the creation of a proxy. There is an opening here for an XPath based proxy/manipulator for documents without a schema.

"Ignore the politics. The real question is how do you get the Java, Perl, and VB6 guys on board? "

Hmmm, I thought starting WellFormedWeb.org was a pretty clear indicator that I was ignoring politics, instead preferring to just implement. If I were interested in politics we'd be having this discussion on www-ws-arch instead of just lurking :)

As for the Java, Perl and VB6 guys, the short answer is: I don't care.

The slightly longer answer is that I didn't get into this to make 'converts'.
I got into this to see if my own theories would hold up under implementation. And remember that I am not just pursuing the Well-Formed Web as an alternative to web services but to the Semantic Web as well. If others look at what I am doing and see value in it then it will spread, like Simon potentially implementing RESTLog in Java. (You're on the hook now Simon, don't let me down! ;) ) And another person who shall remain nameless mentioned doing one in Perl...

If I can summarize so far: REST can learn from SOAP that schemas are important in that they enable generation of nice proxies.

Honestly I wasn't there yet in my thinking. I have been looking at the format and protocol and not thinking about API auto-generation. I considered that quite far off though this conversation has shown that *some* auto-generation may be closer than I thought.

Are we still having the conversation you wanted to have?



Posted by joe at

Can.Worms.Open()

Shouldn't that be:

PUT("http:/can_of_worms.com/state", "open")?

:)

Posted by joe at

If I can summarize so far: REST can learn from SOAP that schemas are important in that they enable generation of nice proxies.



Good summary. What we need to do is to reduce the semantic gap between what is sent across the wire and what the programmer deals with. Either by better programming languages, or by automating the conversions. SAX and DOM aren't it. XPATH is much better, but not close enough.

Posted by Sam Ruby at

"reduce the semantic gap between what is sent across the wire and what the programmer deals with."

Interesting. Are you really going all the way to Web Services to avoid SAX, DOM, and XPath? Seems like a smaller data-binding package might have been an easier route.

(I'm planning to use RELAX NG and data-binding for the RESTlog project, though I actually enjoy SAX2 work.)

Posted by Simon St.Laurent at

Doesn't a rich data binding require more than simply being well formed?

I enjoyed the SAX2 work in the RSS validator. I also very much appreciate the SAX2 design that was done in Ant. The SAX2 work that was done in Axis is a real PITA.

I guess that the motto that applies in the latter case is "we did this so that you don't have to".

Posted by Sam Ruby at


If you want to insist on a valid Web, I guess you're welcome to do so. I don't regard validation as crucial to the success of the well-formed Web - it's a sometimes-useful layer on top of the data, not a mandatory foundation. I definitely can't see why the need for validation would drive anyone all the way to SOAP.

Binary validation and data-binding seem loosely connected to me at best. You may want to validate before you bind your data, but there may be lots of cases where validation is either too restrictive (try validating RDF using W3C XML Schema), incomplete (dependencies better described in RELAX NG or Schematron), or unnecessary (programming styles that prioritize flexibility.)

I don't think XML-RPC even got a DTD, much less a schema, though maybe that's changed over time.

Posted by Simon St.Laurent at

> And another person who shall remain nameless mentioned doing one in Perl...

Its alright Joe, you can put me on the spot. Perhaps it will motivate me beyond lame excuses[1] and into action. Actually like Simon, I had this very high on my list to work on over the holidays. No promises though.

[1] http://www.mplode.com/tima/archives/000172.

Posted by Timothy Appnel at

Tim - "Its alright Joe, you can put me on the spot."

Heheh. Nice of you to own up to it.

Sam - "Either by better programming languages, or by automating the conversions. SAX and DOM aren't it. XPATH is much better, but not close enough."

I agree. I look at my DOM or SAX code and no amount of formatting fixes the ugly. The code is always way too verbose.

One of the things I want is the selector syntax of CSS
In particular E F, E + F, E > F. It strikes me as being much cleaner than XPath.


Posted by joe at


Pingback from Sam Ruby: All the way to SOAP at

Add your comment












Nav Bar