
Service-Oriented Design with Ruby and Rails
Paul Dix(Author)
Addison Wesley (Publisher)
Published on 26. August 2010
Book
Paperback/Softback
320 pages
978-0-321-65936-1 (ISBN)
Description
The Complete Guide to Building Highly Scalable, Services-Based Rails Applications
Ruby on Rails deployments are growing, and Rails is increasingly being adopted in larger environments. Today, Rails developers and architects need better ways to interface with legacy systems, move into the cloud, and scale to handle higher volumes and greater complexity. In Service-Oriented Design with Ruby and Rails Paul Dix introduces a powerful, services-based design approach geared toward overcoming all these challenges. Using Dix's techniques, readers can leverage the full benefits of both Ruby and Rails, while overcoming the difficulties of working with larger codebases and teams.
Dix demonstrates how to integrate multiple components within an enterprise application stack; create services that can easily grow and connect; and design systems that are easier to maintain and upgrade. Key concepts are explained with detailed Ruby code built using open source libraries such as ActiveRecord, Sinatra, Nokogiri, and Typhoeus. The book concludes with coverage of security, scaling, messaging, and interfacing with third-party services.
Service-Oriented Design with Ruby and Rails will help you
Build highly scalable, Ruby-based service architectures that operate smoothly in the cloud or with legacy systems
Scale Rails systems to handle more requests, larger development teams, and more complex code bases
Master new best practices for designing and creating services in Ruby
Use Ruby to glue together services written in any language
Use Ruby libraries to build and consume RESTful Web services
Use Ruby JSON parsers to quickly represent resources from HTTP services
Write lightweight, well-designed API wrappers around internal or external services
Discover powerful non-Rails frameworks that simplify Ruby service implementation
Implement standards-based enterprise messaging with Advanced Message Queuing Protocol (AMQP)
Optimize performance with load balancing and caching
Provide for security and authentication
Ruby on Rails deployments are growing, and Rails is increasingly being adopted in larger environments. Today, Rails developers and architects need better ways to interface with legacy systems, move into the cloud, and scale to handle higher volumes and greater complexity. In Service-Oriented Design with Ruby and Rails Paul Dix introduces a powerful, services-based design approach geared toward overcoming all these challenges. Using Dix's techniques, readers can leverage the full benefits of both Ruby and Rails, while overcoming the difficulties of working with larger codebases and teams.
Dix demonstrates how to integrate multiple components within an enterprise application stack; create services that can easily grow and connect; and design systems that are easier to maintain and upgrade. Key concepts are explained with detailed Ruby code built using open source libraries such as ActiveRecord, Sinatra, Nokogiri, and Typhoeus. The book concludes with coverage of security, scaling, messaging, and interfacing with third-party services.
Service-Oriented Design with Ruby and Rails will help you
Build highly scalable, Ruby-based service architectures that operate smoothly in the cloud or with legacy systems
Scale Rails systems to handle more requests, larger development teams, and more complex code bases
Master new best practices for designing and creating services in Ruby
Use Ruby to glue together services written in any language
Use Ruby libraries to build and consume RESTful Web services
Use Ruby JSON parsers to quickly represent resources from HTTP services
Write lightweight, well-designed API wrappers around internal or external services
Discover powerful non-Rails frameworks that simplify Ruby service implementation
Implement standards-based enterprise messaging with Advanced Message Queuing Protocol (AMQP)
Optimize performance with load balancing and caching
Provide for security and authentication
More details
Language
English
Place of publication
New Jersey
United States
Publishing group
Pearson Education (US)
Target group
Professional and scholarly
Dimensions
Height: 231 mm
Width: 181 mm
Thickness: 17 mm
Weight
508 gr
ISBN-13
978-0-321-65936-1 (9780321659361)
Schweitzer Classification
Other editions
Additional editions

E-Book
08/2010
1st Edition
Addison Wesley
€47.49
Available for download

E-Book
08/2010
1st Edition
Addison Wesley
€31.99
Available for download
Person
Paul Dix is co-founder and CTO at Market.io. In the past, he has worked at Google, Microsoft, McAfee, Air Force Space Command, and multiple startups, filling positions as a programmer, software tester, and network engineer. He has been a speaker at multiple conferences, including RubyConf, Goruco, and Web 2.0 Expo, on the subjects of service-oriented design, event-driven architectures, machine learning, and collaborative filtering. Paul is the author of multiple open source Ruby libraries. He has a degree in computer science from Columbia University.
Content
Foreword xiii Preface xv
Acknowledgments xix
About the Author xxi
Chapter 1: Implementing and Consuming Your First Service 1
What's a Service? 1
Service Requirements 2
The Ruby Tool Set 2
The User Service Implementation 5
Implementing the Client Library 18
Putting It All Together 26
Conclusion 26
Chapter 2: An Introduction to Service-Oriented Design 27
Use of Service-Oriented Design in the Wild 27
Service-Oriented Design Versus Service-Oriented Architecture Versus
RESTful-Oriented Architecture 28
Making the Case for Service-Oriented Design 29
Conclusion 38
Chapter 3: Case Study: Social Feed Reader 41
A Typical Rails Application 41
The Rails Social Feed Reader Application 45
Converting to Services 54
Conclusion 58
Chapter 4: Service and API Design 59
Partitioning Functionality into Separate Services 59
Versioning Services 64
URIs and Interface Design 66
Successful Responses 68
Error Responses 72
Handling Joins 73
API Complexity 75
Conclusion 78
Chapter 5: Implementing Services 79
The Vote Service 79
Models 86
Rails 88
Sinatra 95
Rack 100
Conclusion 106
Chapter 6: Connecting to Services 107
Blocking I/O, Threading, and Parallelism 107
Typhoeus 109
Multi-threaded Requests 113
JRuby 115
Logging for Performance 117
Handling Error Conditions 118
Testing and Mocking Service Calls 119
Requests in Development Environments 121
Conclusion 121
Chapter 7: Developing Service Client Libraries 123
Packaging 123
Parsing Logic 127
ActiveModel 132
Connection and Request Logic 136
Mocks, Stubs, and Tests 143
Conclusion 146
Chapter 8: Load Balancing and Caching 147
Latency and Throughput 147
Load Balancing 148
Caching with Memcached 155
HTTP Caching 162
Conclusion 166
Chapter 9: Parsing XML for Legacy Services 167
XML 167
SOAP 177
Conclusion 184
Chapter 10: Security 185
Authentication 185
Authorization 201
Encryption 209
Conclusion 214
Chapter 11: Messaging 215
What Is Messaging? 215
RabbitMQ and AMQP 217
Synchronous Reads, Asynchronous Writes 227
The CAP Theorem 230
Data Is the API 234
Conclusion 236
Chapter 12: Web Hooks and External Services 237
Web Hooks 238
OAuth 245
Integrating with External Services 251
Ensuring Performance and Reliability 258
Conclusion 261
Appendix: RESTful Primer 263
Roy Fielding's REST 263
REST and Resources 265
HTTP and the Uniform Interface 268
Conclusion 275
Index 277
Acknowledgments xix
About the Author xxi
Chapter 1: Implementing and Consuming Your First Service 1
What's a Service? 1
Service Requirements 2
The Ruby Tool Set 2
The User Service Implementation 5
Implementing the Client Library 18
Putting It All Together 26
Conclusion 26
Chapter 2: An Introduction to Service-Oriented Design 27
Use of Service-Oriented Design in the Wild 27
Service-Oriented Design Versus Service-Oriented Architecture Versus
RESTful-Oriented Architecture 28
Making the Case for Service-Oriented Design 29
Conclusion 38
Chapter 3: Case Study: Social Feed Reader 41
A Typical Rails Application 41
The Rails Social Feed Reader Application 45
Converting to Services 54
Conclusion 58
Chapter 4: Service and API Design 59
Partitioning Functionality into Separate Services 59
Versioning Services 64
URIs and Interface Design 66
Successful Responses 68
Error Responses 72
Handling Joins 73
API Complexity 75
Conclusion 78
Chapter 5: Implementing Services 79
The Vote Service 79
Models 86
Rails 88
Sinatra 95
Rack 100
Conclusion 106
Chapter 6: Connecting to Services 107
Blocking I/O, Threading, and Parallelism 107
Typhoeus 109
Multi-threaded Requests 113
JRuby 115
Logging for Performance 117
Handling Error Conditions 118
Testing and Mocking Service Calls 119
Requests in Development Environments 121
Conclusion 121
Chapter 7: Developing Service Client Libraries 123
Packaging 123
Parsing Logic 127
ActiveModel 132
Connection and Request Logic 136
Mocks, Stubs, and Tests 143
Conclusion 146
Chapter 8: Load Balancing and Caching 147
Latency and Throughput 147
Load Balancing 148
Caching with Memcached 155
HTTP Caching 162
Conclusion 166
Chapter 9: Parsing XML for Legacy Services 167
XML 167
SOAP 177
Conclusion 184
Chapter 10: Security 185
Authentication 185
Authorization 201
Encryption 209
Conclusion 214
Chapter 11: Messaging 215
What Is Messaging? 215
RabbitMQ and AMQP 217
Synchronous Reads, Asynchronous Writes 227
The CAP Theorem 230
Data Is the API 234
Conclusion 236
Chapter 12: Web Hooks and External Services 237
Web Hooks 238
OAuth 245
Integrating with External Services 251
Ensuring Performance and Reliability 258
Conclusion 261
Appendix: RESTful Primer 263
Roy Fielding's REST 263
REST and Resources 265
HTTP and the Uniform Interface 268
Conclusion 275
Index 277