Most helpful positive review
16 of 17 people found the following review helpful
Great intro to scalable designs for Ruby programmers
on September 11, 2010
I'm a little tired right now to give a thorough review, but I wanted to get something down to benefit other potential buyers. First off, let me give some background on myself so you have a point of reference. I've been programming web software and services as a hobby for the last 10 years. My forte has always been with Perl, with a recent desire to try newer languages like Python and Ruby. My particular interest in this book stems from a new project I'm working on that lends itself to a service-oriented design from the get-go. I have no other experience with Ruby or Rails except for short periods of "play time" with Rails when it first became popular, years ago. But I'm *very* experienced with service-oriented and scalable internet architectures (I work for OmniTI), so I expected much of the book to be a rehash of what I'm exposed to on a daily basis anyways.
The author (Paul Dix) immediately throws the reader into a sample web service, typical to any modern REST web application. What I really appreciated was how he stressed the test-driven development approach via rspec, although it might have been beneficial to give a bit more background into the advantages of TDD and the specifics of rspec within Ruby and Rails testing. Nevertheless there is sufficient coverage of the process to get the reader off on the right foot. There are a few bugs in the included code examples that have either been fixed in the github repository ([...]).
Chapter 2 describes the philosophies and methodologies behind service-oriented designs and the differentiators to SOA, XML-RPC and related books such as "RESTful Web Services". Paul makes a sane argument for service-oriented designs with Ruby over the monolithic Rails applications we've seen as Rails has continued to grow in popularity, introduced to larger production loads. The reader learns about isolating services and the benefits (testing, resiliency, performance) associated with various levels of separation.
Chapter 3 gives experienced Rails developers an example migration by segmenting a "typical" Rails installation into independent services. This had limited value to me, since I plan to write Ruby web applications from scratch. But there is still value in a series of well-presented diagrams demonstrating the MVC equivalence of service-oriented design.
Chapter 4 (along with the "RESTful Primer" appendix) provide an excellent overview of RESTful web services and API design. As there is no formal REST specification, much of this is based on accepted industry practices, but the coverage is thorough and very digestible.
This is all I have time to write up at the moment. Suffice it to say I'm very pleased with this book and will continue to refer back to it as I develop in Ruby. Although the book is designed for experienced Rails programmers, I have no reservation in suggesting this to beginner Ruby/web developers... so long as they have another core Ruby reference at their disposal.