"marketecture"
Adam Bosworth from Google was probably the first to destabilize my vision of a global information marketplace using only SOAP messages. he talked about REST at the Web 2.0 conference in a discussion panel titled "The Platform Revolution," and what he said really stuck with me. I don't have any quotes or minutes to look up, so listen to the entire discussion (~1 hr.).
essentially, Bosworth asserted that it is human imperfections that encourage innovation and creativity. and he quickly summarized what I'm about to say in more length...
how this relates to REST vs. SOAP is that SOAP is designed to be The Solution - created to faciliate all communication needs for every situation and in such a way as to be completely and totally independed of underlying transport, extensible beyond imagination, etc. however, that also means that SOAP is very complicated. in order to understand the 'why' of SOAP, you have to at least dabble into a large number of example scenarios of usage of each of the features of SOAP before you appreciate the inclusion of all the complexity. there are (and will be) some good books about it, and I've been thru some. I think I now understand most of the "why" of the complexity of SOAP.
but as I've been learning, knowing the "why" of something is hardly sufficient, even less so when that something is to be used for solving real-world problems. one problem might be the need for cross-communication between system X and system Y by date D. in the purely theoretical world, absent of the date D parameter, you choose SOAP and work until you've got that loosely coupled, platform-independent, extensible solution. but since date D is important in the real world, the below example shows that perfect elegance is not always the best option, and is sometimes no option at all.
I've also done work with REST web services. and I must say that the simplicity and ease of REST is no small convenience. specifically, we consume our current UPS web serices via REST, and we will likely be expanding the number of services we implement because it was only a matter of a few hours from start to finish on implementation. by contrast, when we explored replacing our in-house, expensively maintained, sales-tax tracking system with a StrikeIron web service, we initially had only the WSDL, and therefore SOAP, to work with.
to the discredit of both ColdFusion MX and PHP 5, we found that neither includes built-in, functional support for inclusion of SOAP Headers. In the case of PHP 5, it mangled the XML markup in the header by invoking an http_encode type transformation on it, and it also prematurely closed the root element of the SOAP Body, in addition to erroneously skipping over the first of the items in the parameter array. ColdFusion MX has no support for SOAP Headers, until you download and install an update. And even then, we never were able to work with it, because it would just outright fail to parse the WSDL correctly.
however, to the credit of REST, we were able to more simply and easily work with an RPC-type interface by issuing simple HTTP GET (included in both languages) with the two arguments and receive our XML response. bliss.
it can be reasonably assumed that these particular faults will be corrected in future versions of the languages. indeed, it's easy to think back to the days when HTTP was the brand new, complicated transport that had numerous problems and bugs as people were still learning how to use it. but it doesn't change the fact of the matter that as of right now, before date D, REST lets us do what we need.
bringing it back to the idea of human imperfections...
most reasonable system analysts will say that the REST systems we have implemented are imperfect, and they're correct. but, because it is working right now, it enables methods of communication (however "clunky") that foster innovation in other places. ie, the business users of our system who now have more tools available to them.
now, I'm hardly an advocate of inelegance, and I'd love to eventually replace our REST interfaces with SOAP and WSDL interfaces, along with lots of other changes to our current systems. but as an interim measure, or a quick-and-easy solution, take a REST.</div>
good model
WS-Kernel
I have wondered if something like this were going on, but my initial assumption was that XML processing load made it impractical for low-level system operations. at kernel level, things need to happen fast, and the vast majority of the time (especially in Linux), it's possible, or even easy, to write system components that speak directly to the kernel.
I think the initiative is great, though - the more software projects out there, the better. the area I see service-oriented architecture providing the biggest benefit is to business processes that span multiple disparate systems. I have never thought of an OS as fitting that description at all. however, there may be some killer ideas out there that were waiting on this technology.</div>
BS ==
so, to encourage myself to remain grounded in issues that are relevant to developers, whom I hope will some day be working with me, I'm going to paraphrase certain articles that I read from high-level business rags - translating them from business-speak into something that actually makes sense. with my continual forays into BS ("business speak" or "bull shit," interchangably), I have finally become disillusioned with the practice, and view it only as a necessary evil when analyzing or discussing the business effects of technical (real) progress.
that last paragraph would translate to:
I want to be the boss of some programmers, so I'm going to explain how BS ideas affect programmers.
article number 1 translates:
a decision-maker for IT projects must decide either to buy, build, or re-write programs to fit requirements. this is no different for SOA projects.
but, SOA requirements are not just code, they are largely in configuration.
one analogy would be the way cartoons are animated. if animators took a "just code" approach to building cartoons, they would draw each frame of a cartoon in its entirety, which is an inflexible and wasteful way of doing things. better to draw the background, props, and characters separately on translucent sheets, and then configure interactactions to arrange a scene. each component provides a defined contribution to the over-all objective. back in software...instead of building every application with just code for every feature, you focus on configuring components, or services, with well-defined features to get results.
so, the question is, do you build, buy, or re-write those services?
building...
when building services, remember that you have to create the application logic AND the interface for how it will be used in larger systems. and if the system is a big-deal SOA, much of the logic and other technicals should be put on the interface part. it's very much a top-down approach, where the architecture dictates what the input/output of the service is, and the service restricts its logic to getting that done, not how it will be called or where it fits in with everything else - that's part of the interface setup.
for smaller components - usually basic data queries, calculations/transformations - the app logic is the easiest part. the real important and challenging thing is to build the big system that coordinates them all and glues it together. that big system needs to line up with the way the business operates. but even that bigger system could be a component of a much larger system.
so, since business services rely heavily on figuring out the what and how of the components' interactions, in-house development option gets better as the system's scope is larger, because no-one knows better than the business itself how those things should GSD (get shit done).
re-writing...
a big part of SOA is about re-using services in different systems. but at first, you have to think about features that exist in your current systems. to start out with, you'll probably be exposing functionality from your current systems as services, until you have most of your functionality available as a service, then a lot of development will be about using those services in different configurations. so maybe instead of building all new services, you'd rather find out what code you have that would be useful as a service, and then put a service layer on it.
but it's still better to go with a top-down approach first - design the architecture of the processes, then chunk it up into bite-size pieces, then identify which of those bite-size pieces already exist in your system(s), then either wrap or re-write those. if you just start re-writing all your code as small services, you may never get away from them to a larger SOA, which is what you really benefit from.
recognize that the stuff you already have written was probably not written with any kind of focus on separating the interface from the app logic, as mentioned above. so the biggest work will not be changing app logic, which will probably be identical. the biggest work will be defining those interfaces for the app to the rest of the SOA system.
buying...
because SOA systems are composed of all kinds of services, some of which are small and big, and because these systems mostly just involved composing and configuring those services into a process that matches what your business needs to do, you can buy some or even most of the services from 3rd party providers. there will still be considerable work in making the SOA system match the business logic. smaller services are better to buy than larger ones, and make sure those services you buy are easy to fit into your bigger SOA system.
is it possible that business will want to buy some of those bigger service systems? it's really not a technical issue, it's more of a business issue, since doing so will essentially be out-sourcing a part of your business operations to another company. if you don't want that part of your business outsourced, then buying that larger service system is a bad idea.
and on medium-sized services, you may have different requirements for security, and process fit than a 3rd party provides. the most you can expect is to get a way to simply create and manage the criteria, but you won't have complete control over those. this really means that purchasing services is best for very small fine-grained services, or for outsourcing entire processes. the in-betweens are tricky to get from a 3rd party.
conclusion...
all of the above approaches can be used, and should be used in the most appropriate places. the most important thing is to contstruct a good SOA that matches the business operations. if you've got that, you've got a much easier time of using any of the above to add services to your SOA system.</div>
actual progress is being made
mine has a few key differentiating factors, which I think will make it a great service.
1. built on top of a solid SOA. this is still in progress, but with a proper SOA, keeping up with all the different carriers' online functionality should not be a problem, and developers can be assigned to certain carriers, and to implement the carriers' functionality into the larger shipping management product that we are building. In addition, SOA based on WS-* standards will allow our offering to be incorporated into BPEL processes, which many larger companies will undoubtedly be using in the future.
2. low cost. we use open-source technologies, which makes our software costs approx. 0. I'm almost positive, should demand go as high as I'd like it to, to deploy on Zend Platform, or ActiveGrid, and to use commercial licenses of MySQL, Linux, etc. besides just the software licensing, the popularity of the OS technologies means there will be a huge number of developers as potential employees.
3. relating to a project Matt has going, I will also work on a RAD framework with him that will, hopefully, be built with consideration of allowing developers to quickly and easily set up communications with services such as the one we'll be offering. if that really is the case, then popularity of that framework will only help to accellerate the demand for our service.
4. federated identity. I don't know a LOT about this (yet), but the concept sounds great, and it's one of the differentiating factor that the Rearden group uses. hopefully Rearden will eventually be one of our customers. =)</div>
