If you go through all the service definitions in this chapter (and other definitions outside this book), you will find references to a lot of additional attributes that services "may," "must," or "should" have. However, there is no common understanding about whether these additional attributes are really required for services. Here are some typical questions to which different people will give different answers:
Do services have to be stateless?
Do they have to be implemented as Web Services?
Should they be coarse-grained and/or composable?
Care must be taken here. My definition of a service is that it should be an IT representation of a business functionality defined by a (well-defined) interface. Services should also typically be self-contained. Some other attributes usually apply, but I don't believe that any of these other attributes are fundamentally required.
In practice, things differ. In your concrete SOA, you may require some—but not all—of the additional service attributes discussed here, and you may find that some kinds of services have attributes that others do not. For this reason, we usually classify different kinds of services according to their attributes (see Chapter 6 for details).
The details of the possible attributes services can have can be pretty complicated. The various attributes will be discussed throughout this book, according to the general topics of the chapters. However, to provide an initial overview, I'll introduce them ...