OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: So what do SOAP and XML-RPC buy you?

David Brownell <david-b@pacbell.net> writes:

> > One thing that XML-RPC or SOAP buy you (today) over straight
> > XML+HTTP is automatic marshalling.  Specifically, what is missing
> > is that you can't do:
> > 
> >   http.put(url, anyObject)
> > 
> > and have 'anyObject' marshalled and serialized to XML
> > automatically by the library, and then sent over HTTP.
> If "anyObject" is literally any object, then there's a HUGE downside
> to that: Application developers start to "think" in terms of APIs
> that work within a particular programming environment, rather than
> in terms of interoperable data.  They rely on automagic marshaling
> code they don't/can't control.  And bit by bit, interoperability
> starts to disappear...
> Of course, for folk controlling those programming environments, that
> is a feature (customers then can't switch vendors so easily).  And
> some customers may even be comfortable ceding control over those
> parts of their business strategies, given time-to-market wins.

No need to convince me about the fragility and lock-in of APIs :-)
(considering my "Web RPCs Considered Harmful" article[1]).

> If that's "any object defined using an Interface Definition Language
> (IDL)" then that's less of an issue.

I typically associate IDLs with APIs, so I'm not sure how that
relates to "interoperable data"???

When I think of "interoperale data" at a higher level than straight
XML (or via DOM), I'm thinking of data that interoperable because it
is an encoding format (in XML), a la RDF, SOAP Encoding, or via some
XML Schema magic yet to be developed, that unmarshals to something
more approachable from programming languages than straight XML in a
DOM or via SAX.  More like:

  http.put(url, rdfStatementSet)
  http.put(url, soapObject)
  http.put(url, tupleSpaceTuple)
  http.put(url, xmlSchemableInstance)
  http.put(url, grove)

and, of course, I don't mean to exclude the very basic:

  http.put(url, domObject)

So, I'm agreeing with you, by 'anyObject' I did not mean to imply
literally any object.  Interoperable data first, internal
representation follows.

  -- Ken

[1] <http://monkeyfist.com/articles/514>