Service-Oriented Architecture (SOA) is a software architecture paradigm for creating highly-reusable software: at first you create a collection of lousely-coupled components called Web Services, then compose software reusing those components without need to reimplement or install them each time. This is a very abstract description of SOA, you can find more information on the internet or books like Service-Oriented Architecture (SOA): Concepts, Technology, and Design by Thomas Erl, and other sources.
SOA and Web Service are well known words in Java and .NET communities today, because IBM, Microsoft, Sun, HP, Intel and other large corporations have been creating SOA standards, tools and middleware for almost 10 years now.
But what about the others? Do Python, Ruby, PHP and other web-oriented communities that dominates the web market today use SOA?
Practice shows that SOA is for effective IT infrastructure, but it is not widely used for web applications today. On the other hand, Amazon.com, eBay and LinkedIn are only a few examples of successfull SOA for large web applications.
Developers who like REST says that the internet was RESTful web services platform from the beginning. Depending on the point of view, they are right. Internet web sites have web resources (like news, blog posts, etc) with a unique URL (for example, http://www.idiles.com/daylight/1 is a web resource). RESTful web services are very interesting and lightweight SOA solution that works. It differs from WS-* standards very much and lacks lot of features, but RESTful web services are very natural and lightweight. We cannot say that REST is better that WS-* or vise versa, but we can say that for Python/Ruby/PHP world REST is the answer for professional web development.
Last year Idiles developers have been experimenting much with lightweight SOA using Pylons, WSGI and JSON, developing easy-to-use SOA middleware called Dragonfly for use in our own projects. We have been asking ourselves: how can we do more in less time and avoid deep abstractions for reusable components so that web applications remain light and won't become slow and hard to maintain elephants? We have learned a lot, made some mistakes, and today it is much more clear what is bad SOA and what practical SOA for lightweight solutions. We are going to talk more about SOA here in the future, also Idiles is going to make the Dragonfly open source this year.
This is how WS-* and RESTful web apps differ:
- for WSDL/SOAP based software you have to create web services using well-know tools like NetBeans and integrate them in your software using standard SOAP calls
- for REST based web services you have to develop small and specific web applications that have RESTful APIs with automated data transport (using Dragonfly)
There is a niche where RESTful SOA together with scripting languages are great. It is very important to notice that there are no universal solutions. RESTful SOA will success in one environment and fail in another. The same with WS-* and other technologies. Nevertheless, for small and mid-sized web applications that run online business we are very happy to use Python and other web-related open source technologies.