Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
The S stands for Simple (72.249.21.88)
95 points by 10ren on Dec 15, 2009 | hide | past | favorite | 52 comments


The server seems to be back online, but in case it goes down again (or changes IP or whatever), I have mirrored it here:

http://harmful.cat-v.org/software/xml/soap/simple


Did anybody else hear the SOAP Guy's lines in a voice that sounds like a cross between a used car salesman and Foghorn Leghorn?

Also, I like Google's protocol buffers library. It's straightforward, fast, has really nice bindings for C++, Java, and Python, and we know it's stable because it's what Google uses for most of its internal RPC stuff.

http://code.google.com/p/protobuf/


Yea, but the PB library doesn't actually handle sending requests over the network, etc... It literally just encodes data. If you like protocol buffers, check out Thrift. Thrift was designed based off of protocol buffers, but handles everything from end to end. http://incubator.apache.org/thrift/


To be more specific, the protocol buffer library provides an interface for transport, but not the transport layer itself.


It's a good library, I've used it extensively. I only wish it would generate less warnings at compile time. :)


I have to say that SOAP didn't even seem like a good idea at the time.


Dave Winer: Menace, or Monster?


Its been my experience that anything with Simple or Lightweight as one of the letters in the acronym is usually anything but.


In the same way that the old communist states often had both 'democratic' and 'republic' in their over-long official names.

Hmm, LDAP. I'd hate to meet HDAP.


LDAP is "Lightweight" only when compared with X.500..


S3 , SimpleDB are not all that bad.


...except when called via SOAP!


SNMP, for instance.

"The Stupid, it burnnnsss!"


This is part of a general principle that things with feelgood adjectives in their names usually don't really merit them.


Using the Q & A style to introduce a topic works really well. I hope more people start writing like this.


If you like this you should read The Little Schemer (if you haven't yet, that is) it is written in dialogue/question-answer format. Very Socratic method. I can't recommend the rest of the series; I haven't read them yet. The Little Schemer is excellent though.


This method clearly made me understand (and a lot of my fellow Media studies students) the whole Actor-Network theory of Bruno Latour and writing for academic papers in general.

"A prologue in form of a dialog between a Student and his (somewhat) Socratic Professor" http://www.bruno-latour.fr/articles/article/090.html


Like knocking down straw men? I hope not.


Interoperability is a vitally important but hard problem. CORBA and then SOAP have been thoroughly adopted, then widely condemned.

What's next?


Frankly I think there's some kind of Godwin's Law going on here, where something is insufficiently Enterprisey until an 'S' is attached to it, whereupon IT folks and professional donut-stuffing standards committee complexifiers wade in, and three linear bookshelf feet later you've got a Standard. And it's Simple. And all the devs who use it, who have a clue, just want to commit Suicide.

But maybe it's just me.


JSON in HTTP GET/POST. It's more of a nuisance, but it forces you to face the network issues head-on, and code that reads JSON can't afford to make assumptions, so it ends up less brittle.


Not just JSON and HTTP but specifically REST w/ JSON. There's a lot to be said for such a model.


What's the difference between "JSON in GET/POST" and "REST with JSON"?


In one, you are essentially doing RPC: here's the input, do the operation and give me an output. In the other, you are remotely manipulating "documents". Even a command to act consists of emplacing a "request" and being redirected to a "response". You navigate between "documents" by following URLs in links.

To be honest, I like REST for CRUD of things that are natural resources, but I think it's wasted extra work for operations that are natural RPCs.


Ah thanks. Just plain JSON RPC sounds simplest to me.


"REST with JSON" should send the (relative) URL for the next request, not just an ID. Although there's more to it than just that.


Thanks! So, the XML/SOAP/WS stack tried to simplify/abstract too much or wrongly, when problems leak through, it is too impermeable to let you solve them...

The "nuisance" of JSON+HTTP is a backward step in a way, but it lets you solve those problems. Sounds like an ideal solution would be an abstraction with less nuisance, that solves the network issues that it can and gives you access for the others - which may or may not be possible; it's an ideal.

(1) By "network issues" do you mean along the lines of Peter Deutsch's "8 Fallacies of Distributed Computing"? http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Comput...

(2) Regarding "assumptions" and "less brittle", do you mean issues of reading the format correctly, in the face of evolution of the internal structure and/or wire format?


REST, Thrift, AMQP + protobuffs.


http://incubator.apache.org/thrift/ http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protoc... http://code.google.com/p/protobuf/

Sounds intriguing - can you elaborate on why this combination is favoured in particular? Or point to an article that discusses it? It's hard to get widespread adoption if it's not accessible...

incidentally, google protocol buffers seems similar to http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One (ASN.1), which predates XML, but didn't take off.


ASN.1 actually did take off, somewhat, at least in telco. And after comparing thrift to protobuffs to ASN.1 for our internal protocol I ended up chosing ASN.1, mostly because of the great ASN.1 support in the OTP (I'm using Erlang). Erlang protobuffs library, on the other hand, is somewhat lacking and is terrible at encoding/decoding huge messages with big lists.

And AMQP was chosen for the transport layer because it handles persistent messages, transactions, all the routing, buffers messages, etc., etc. I'd have to implement all of these myself, had I chosen thrift.

This is how I ended up with RabbitMQ and ASN.1.


Thanks. The long-term trajectory of programming tools seem to favour developer ease over raw efficiency, as computers get faster but programmers don't (though possibly this might change as Moore's Law diverts from speed increases to multi-core).

Therefore, XML became more popular than ASN.1. I think the successor to XML (and SOAP etc) will be more human-friendly than XML, rather than more efficient.

That's not to say that extremely efficient techniques don't have a place (they do) or they're not cool (they are).


I actually coded one of Facebook's coding puzzles (Battleship) using Thrift and was pleasantly surprised. It provides support for many languages and getting up and running was a snap. I hope it catches on.


I like the MQ stacks (particularly ActiveMQ). I've used a proprietary message bus in the past and it was really nice to just send and receive message at the application level. Of course migrating to an asynchronous model of development can be challenging for some.


XMLRPC. Very easy to use. There is a solid xmlrpc client in python > 2.2

http://www.python.org/doc/2.6/library/xmlrpclib.html

A small criticism : some network overhead (it's XML's fault).


bert-rpc.org


I hope not. Between Protobuf and Thrift, I don't see the point of adopting a less efficient, even more niche NIH serialization format and RPC protocol.


Might be different if there were already numerous libraries that supported it but honestly if the extent of it is support in four languages (plus a few more that support the serializer) it's probably not worth wasting the effort unless it differentiates itself substantially from the existing solutions.


Both protobuf and Thrift are designed exclusively around simple static type-checking with type-erasure. Neither support heterogeneous collections, much less discriminated unions or GADTs.

There are plenty of untaken vertices in the serialization-format hypercube.


Heterogeneous collections, discriminated unions, and GADTs can be implemented easily in either thrift or protobuf by leveraging inclusion of custom type-tagged messages/data.

However, while the encodings are absolutely sufficient to represent these data structures -- if you so choose -- my experience dictates that keeping serialized messages typed and as simple as possible is advantageous from the perspective of long-term maintenance and interoperability.


Of course you can implement custom type-tagged blobs, but that's not using thrift or protobufs -- it's your own nebulous SOAP-style bullshit.


They're not "blobs" if they are also protobuf/thrift messages themselves.


That's certainly cleverer, but it's still a nested user-implemented unsound type-system.


I'm sure I've had this conversation in real life :-) My one experience with SOAP was trying to get a perl client library working with a Java server -- they weren't compatible with each other. In the end I used ethereal with a Java client and dumped the request which I could then replay through perl. In fact, I would go as far to say SOAP is the least fun protocol that I've ever used (including an undocumented one).


My one SOAP exerience was similar but I ended up using LWP and creating my own serializer then they upgraded from .net 1.1 to .net 2.0 and it all broke again. I hated SOAP from then on.


If you know that you're only going to be using the Microsoft stack, and you actually do get to use the tools that cover all this up, do you still end up regretting that there's SOAP under all of it?

I've just found myself working on a project like that for the first time, and saw this, and started wondering.


If both ends of the communication are on the Microsoft stack, setting up SOAP webservices is straightforward. The tools basically take care of everything. In our case, we have a customer who exposed an ASP.NET webservice that we consume (data flows in both directions). Our production apps use VB.NET to hit the webservice, but I was able to easily write a python client for testing (by handrolling the SOAP messages).

My intuition is that SOAP starts becoming unpleasant if you have lots of parties involved and/or multiple platforms. We haven't hit that wall.


Well, yeah, except you used to be able to throw up an endpoint as an asmx file and it just sort of worked. Now you are guided to create a separate WCF application. So you get a book on WCF and start reading. You create a "hello, world" app but it takes three days of playing with the config file and reading half of MSDN to get it to work. Now that you know all kinds of stuff about message and service contracts, you can't do things like pull the raw HTTP headers because it's not necessarily bound to HTTP (who's using those other protocols, again?) And, you can't latch on to just any point in the request handling because it may be any sort of request. Another week with MSDN and you've finally gotten something kind of close to what you want, which involves running with aspNetCompatibility and might as well just have been an asmx endpoint, and which would have taken about half a day's work with the old toolkit.

Not that I would know from personal experience.


Part of me wonders whether this difficulty of interoperation is intentional on the part of Microsoft.


I'm working on some SOAP stuff at work. I think it was a ploy to make me want to quit.


A few notes The "SOAP Guy" sounds rather like a straw man to me. I'd like to hear what a real soap guy has to say. Though I don't know if there is such a guy any more. Soap is just a transport format. Any WCF (http://en.wikipedia.org/wiki/Windows_Communication_Foundatio...) guys around?

We use WFC between .Net programs, and once you connect to the right endpoint, it pretty much just works. You may have a look at the generated WSDL to see if it's sensible, but for the most part, it is "just plumbing. You don’t need to see it."

We're not stupid enough to try to get WCF and SOAP to interop with other languages, though. We'd probably look at using ActiveMQ, or XML and URLs for that kind of job.

Also the statement that "no one actually uses these other transports" is not true - we use TCP transport in some cases, and it's not that unusual.

There are parts - large parts - of the spec (see the WS-* stuff, e.g. http://en.wikipedia.org/wiki/List_of_Web_service_specificati...) which very few people use or care about, which would probably make full-blooded interop with other stacks very hard. It's sad that we didn't get there yet, but I'm glad that we've got what we do have.

In some cases REST is better. Even MS knows this. See http://msdn.microsoft.com/en-us/data/bb931106.aspx


And another thing: the article complains that 1) SOAP sucks and 2) It keeps changing.

There's some merit to both those charges, but change is a legitimate response to something not being right yet. What's the alternative?

Not sure why I'm getting downvotes. Its possible that I'm wrong, but it's a more substantial answer than most comments on this topic. I'd like to hear your point of view. Or are only "LOL I agree soap sucks" comments encouraged?


I can identify with this totally. This was my life like 4 months ago before I started at the startup I am working at now.

Trying to write these schemas by hand IS hell, but putting blind trust in your toolbox is possibly even worse.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: