"How much" you expose is really determined by business needs. You'd expose the functionality you'll need to meet business requirements both now and, ideally, in the future. A more interesting question might be "how 'granular' an interface should I build?" This question gets more to the heart of the difficult trade-off between modularity and performance. That is, if you design a fine-grained interface it may look more like a traditional "component" with each "operation" performing a single function. However, such an interface is likely to require several messages to the service to perform a business function. The additional messages are expensive in a distributed environment and are likely to require the management of conversational state by the service. If you design a coarse-grained interface, each "operation" could be fairly complex, performing a complete business function. Such an interface may be re-usable in fewer situations but would require fewer messages, would result in better distributed performance, and would be more easily made stateless services, simplifying the construction and use of the service. Making such trade-offs is a skill that distributed application architects have got to have in their skill sets.
Dig Deeper on Service-oriented architecture (SOA)
Have a question for an expert?
Please add a title for your question
Get answers from a TechTarget expert on whatever's puzzling you.