Support Deprecation header
Add new policy to configure Deprecation header field
Add a new DeprecationPolicy which emits a Deprecation header when a matching API version is used.
Description
An API may emit a Deprecation header to inform clients that a resource is/will become deprecated (but may still be available past that point). The new DeprecationPolicy allows users to configure this header, as well as the (optional) associated links. This is analogous to the existing SunsetPolicy.
The implementation follows the existing SunsetPolicy (and associated classes like SunsetPolicyBuilder, SunsetPolicyManager etc) as closely as possible. In an attempt to minimize code duplication between the two, common functionality was extracted into shared base classes/interfaces. There is still some duplication left over, but I chose what seemed like a reasonable a middle ground between streamlining the two policies, and keeping the code clear.
At the time of writing this, no tests have been added yet. Since this is a rather large PR with many changed files, I want a second opinion on the implementation before I start pinning everything down in tests. I did at least verify that the solution compiles.
Design choices
This summarizes the linked issue #1128
The new policy is configured like this:
options.Policies.Deprecate( 0.9 )
.Effective( DateTimeOffset.Now.AddDays( 60 ) )
.Link( "deprecation.html" )
.Title( "Deprecation Policy" )
.Type( "text/html" );
- When a deprecation policy is configured, then it will alwys be omitted, regardless whether the deprecation date is in the future or in the past.
- The RelationType of the configured link must be
deprecationas per the spec. - There is no constraint on the provided media type of the link.
Fixes #1128
@dotnet-policy-service agree
Thanks for this. Just acknowledging that I've seen it. I'll try to put eyes on it ASAP. FYI, I'll be on vacation next week. I'm not ignoring it. 😉