[MUSIC] In order to provide services that are useful and reusable there are best practices for services and service oriented architectures. These various best practices, guidelines, and principles all tend to touch on the desirable properties of services in a service oriented architecture. So let's talk about what those desirable properties are. Modular, services should be modular and loosely coupled, this gives them the property of being reusable and combinable. Services are meant to be mixed and matched. In object oriented programming, loose coupling is achieved by only exposing the relevant elements of a class or component to its client. In service oriented architecture, requests are made by passing communication to the service in a way that aligns with its interface. The service performs the necessary operations then passes back a communication containing the results of the service or a confirmation that the request was fulfilled. We will see that this can look quite similar to a method call, having a named operation and relevant parameters. It can also be more like a document that embodies a request with the content of the document including the information that the service provider needs. Composable, services can and should be used in combination to create usable applications or other services. In order to be composable the services must be modular. Using services in combination is like composing objects in an object oriented programming paradigm. Just like objects can be combined to provide the desired behavior so too can services in SOA. Platform- and Langugage-Independent, a good service is platform- and language-independent. For example, a service which is coded in Java can be used by a service requester coded in Ruby. Platform and language-independence is achieved by following communication standards and protocols. In the case of services on the Internet, services are often requested with an XML file or an HTTP request. The key to coordinating services on different platforms or in different languages is enforcing well defined communication. Self-describing, a service should describe how to interact with it. In other words, it describes its own interface. This includes what input it takes and what output it gives. There are formal standards for describing services. Using WSDL, which stands for web services description language. We will talk more about WSDL later in the course. Self-Advertising, in order to say service, potential clients must know what is available. In house organizations may catalog their surfaces in any way that works for their business. Distributed applications using web services have standards like UDDI, which stands for Universal Description, Discovery and Integration to connect service providers with potential service requesters. Services can be used in different ways. In the context of large organizations providing services for different business units or over the Internet where anyone can provide or use a software service. No matter where or how services are deployed the properties we talked about are essential for effective services and service oriented architectures.