Service APIs Client-Service Interactions Request and Response Management Service Implementation Service Infrastructures Service Evolution

Dataset Amendment

A web service has many clients. The service may define message structures through proprietary protocols, or by using open standards like XML.
How can a service augment the information it sends or receives while minimizing the probability of breaking changes?
Clients often ask for data structure changes after services have been released. In an effort to accommodate these clients while avoid breaking changes, the service owner may decide to create additional web services to handle client-specific messages and media types. Unfortunately, this usually results in duplicate code. The service owner could try to persuade all client owners to adopt the data requirements of the requestor, but the other client owners might consider the new structures to be irrelevant or unsuitable for their needs.
Service owners in situations like these might therefore modify messages and media types to support Extension Points. These constructs enable new elements and attributes to be added to messages or representations at predefined locations. Unfortunately, this approach tends to increase service complexity, raise the potential for run-time errors, and undermine the expressive power of simple schemas. How can service messages support extensibility in a way that is explicit and self-descriptive, yet does not break client applications that use older structures?
Append optional data to existing request and response data structures.
Dataset Amendment: Append optional data to existing request and response data structures.
The Dataset Amendment pattern suggests that service owners should append primitive data or complex data structures to any Data Transfer Object as optional data. Web services can be designed to easily recognize and process amendments when they appear in requests. Since amendments are designated as being optional, the service framework can skip parsing and validation of these elements, and can even hide the content from the client application. This helps to mitigate the risk of breaking changes. It is worth noting that the frameworks which hide unrecognized amendments are often able to preserve this content so that it can sent back to the message originator on to other parties that recognize the content .