Cesare Pautasso
http://www.pautasso.info
[email protected]
@pautasso
The notion of designing services to be loosely coupled is the most important, the most far reaching, and the least understood service characteristic.
Eric Newcomer and Greg Lomow, Understanding SOA with Web Services
, Addison-Wesley, 2004
WSDL/SOAP supports interoperability between heterogeneous platforms and programming languages: loosely coupled?
WSDL interface changes may break clients: tightly coupled?
How does the client locate the service?
UDDI
Hypermedia
How does the client address a service features?
WSDL Names
Names outside of their scope need to be contextualized
URI
Unique identifiers in a global address space
How deeply must clients understand a service?
Automatic WSDL generators
Leakage of internal data models/schemas
REST Representations
Standardized message formats mapped to/from internal model
How precisely services satisfy their clients?
WSDL
API targets specific clients
HTTP GET, PUT, DELETE, POST
Generic API targeting all possible clients
When do clients interact with the service?
RPC
Clients and services must be available at the same time
Messaging
Store and Forward: clients survive temporary service outages
When do clients locate the service?
Who writes the code to invoke a service?
RPC IDL, WSDL
Client recompilation is needed when service description changes
REST
Clients are manually written without relying on any formal service description
Does interoperability require clients and services to use the same middleware platform or programming language?
DCOM, Java RMI
CORBA, WSDL/SOAP, JSON/HTTP
Are multiple interactions from the same client independent from the previous ones?
WebSockets
Service scaling limited by total number of connected clients
HTTP without session cookies
Service scaling limited by number of active client requests
How do clients know how to use a service?
Process Models
Explicit description of the entire conversation
Hypermedia
Decide next step based on results of the previous
RPC | Messaging | RESTful HTTP | |
Discovery | Centralized | Centralized | Decentralized |
Identification | Local | Local | Global |
Model | Depends | Depends | Representations |
Granularity | Depends | Depends | Uniform Interface |
Interaction | Synchronous | Asynchronous | Asynchronous |
Binding | Early or Late | Late | Late |
Code Generation | Automatic | Automatic | Manual |
Platform | Independent | Independent | Independent |
Shared State | None | None | None |
Conversation | Static | Static | Dynamic |
Use a spacebar or arrow keys to navigate