I'd like to hear some thoughts on the design of enterprise web services in support of SOA.
Regarding the design of a web service, I can expose methods that represent complete transactions or I can expose methods that are meant to be used as components of a transaction managed outside the service.
The first approach, a service offering transactions, represents a philosophy of building applications that execute packaged business transactions. If the transaction doesn't exist at the service level your application cannot offer the features relying on that transaction.
This approach eliminates the need for transaction management in consuming applications. It would be more robust, protecting the integrity of the data systems behind the service. It would, however, mean the coding of every variety of transaction, perhaps limiting flexiblity. The service definition is likely to see more change as applications mature and data usage changes.
The second approach, a service offering lower-level data operations, represents a philosopy of building applications from data operations, free to use those data operations in any fashion they might need. It offers a great deal of flexibility, but does nothing to ensure that consumers are managing transactions correctly or using data consistently across the enterprise. It is more resistant to change, since the raw operations are not as likely to change as are the way those operations are used.
My instinct is to favor transaction services, as they seem to be more suited to SOA governance and to promoting consistent use of data across the enterprise. What does your experience say?