A set of related software functions are exposed as web services. These services are frequently called in specific sequences. For example, a client that calls an "Order Creation" service will frequently call "Order Update", "Order Cancel", and "Order Status" services thereafter.
Once a service has processed a request, how can a client discover the related services that may be called, and also be insulated from changing service locations and URI patterns?
Clients must, of course, have a way to acquire service URIs. One approach is to store this information in configuration files on the client. However, service owners must give adequate notice when a service URI or interface changes, and client developers must deploy the updated files at the just the right time in order to avoid Breaking Changes. Some organizations solve this problem by providing a central Service Registry that stores current service addresses. Others require clients to submit all requests to a "broker service" (e.g. Enterprise Service Bus) that finds and executes services for clients. Unfortunately, the client must know how to find and use these infrastructures, and response times may increase due to their inherent overhead. Furthermore, infrastructures like these often entail steep learning curves, significant cash outlays, and vendor lock-in. They also do little to help the client understand what they can do after a given service call. Fortunately, service developers can use hyperlinks to provide clients with properly formatted URIs that are both current and relevant to the most recent request.
Only publish the addresses of a few root web services. Include the addresses of related services in each response. Let clients parse responses to discover subsequent service URIs.
The service owner publishes one or a few "root services" that provide the initial "entry points" for a set of related functions. When a service prepares a response, it includes addresses of related services. If the client invokes an "Order Creation" service, the response might, for example, contain addresses for "Order Update", "Order Cancel", and "Order Status" services.