Web services have been used for many years. In this time, developers and architects have encountered a number of recurring design challenges related to their usage, and have learned that certain service design approaches work better than others to solve certain problems.
In Service Design Patterns, Rob Daigneau codifies proven design solutions for web services that follow the REST architectural style or leverage the SOAP/WSDL specifications. This catalogue identifies the fundamental topics in web service design and lists the common design patterns for each topic. All patterns identify the context in which they may be used, explain the constituent design elements, and explore the relative strengths and trade-offs. Code examples are provided to help you better understand how the patterns work but are kept general so that you can see how the solutions may be applied to disparate technologies that will inevitably change in the years to come.
This book will help readers answer the following questions:
- How do you create a web service API, what are the common API styles, and when should a particular style be used?
- How can clients and web services communicate, and what are the foundations for creating complex conversations in which multiple parties exchange data over extended periods of time?
- What are the options for implementing web service logic, and when should a particular approach be used?
- How can clients become less coupled to the underlying systems used by a service?
- How can information about a web service be discovered?
- How can generic functions like authentication, validation, caching, and logging be supported on the client or service?
- What changes to a service cause clients to break?
- What are the common ways to version a service? How can web services be designed to support the continuing evolution of business logic without forcing clients to constantly upgrade?
This book is an invaluable resource for enterprise architects, solution architects, and developers who use web services to create enterprise IT applications, commercial or open source products, and Software as a Service (SaaS) products that leverage emerging Cloud platforms.
Table of Contents
Foreword by Martin Fowler xi
Foreword by Ian Robinson xiii
About the Author xxv
Chapter 1: From Objects to Web Services 1
What Are Web Services? 2
From Local Objects to Distributed Objects 3
Why Use Web Services? 6
Web Service Considerations and Alternatives 7
Services and the Promise of Loose Coupling 9
What about SOA? 10
Chapter 2: Web Service API Styles 13
Design Considerations for Web Service APIs 14
RPC API 18
Message API 27
Resource API 38
Chapter 3: Client-Service Interactions 51
Media Type Negotiation 70
Linked Service 77
Chapter 4: Request and Response Management 83
Service Controller 85
Data Transfer Object 94
Request Mapper 109
Response Mapper 122
Chapter 5: Web Service Implementation Styles 131
Design Considerations for Web Service Implementation 132
Transaction Script 134
Datasource Adapter 137
Operation Script 144
Command Invoker 149
Workflow Connector 156
Chapter 6: Web Service Infrastructures 165
Service Connector 168
Service Descriptor 175
Asynchronous Response Handler 184
Service Interceptor 195
Idempotent Retry 206
A Quick Review of SOA Infrastructure Patterns 220
Chapter 7: Web Service Evolution 227
What Causes Breaking Changes? 228
Common Versioning Strategies 232
Single-Message Argument 234
Dataset Amendment 237
Tolerant Reader 243
Consumer-Driven Contracts 250
How the Patterns Promote or Hinder Service Evolution 264
Appendix: Reference to External Patterns 269