12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package versioning
- import (
- "github.com/kataras/iris/context"
- "github.com/kataras/iris/core/router"
- )
- // Group is a group of version-based routes.
- // One version per one or more routes.
- type Group struct {
- router.Party
- // Information not currently in-use.
- version string
- deprecation DeprecationOptions
- }
- // NewGroup returns a ptr to Group based on the given "version".
- // It sets the API Version for the "r" Party.
- //
- // See `Handle` and `RegisterGroups` for more.
- func NewGroup(r router.Party, version string) *Group {
- // Note that this feature alters the RouteRegisterRule to RouteOverlap
- // the RouteOverlap rule does not contain any performance downside
- // but it's good to know that if you registered other mode, this wanna change it.
- r.SetRegisterRule(router.RouteOverlap)
- r.UseOnce(Handler(version)) // this is required in order to not populate this middleware to the next group.
- return &Group{
- Party: r,
- version: version,
- }
- }
- // Deprecated marks this group and all its versioned routes
- // as deprecated versions of that endpoint.
- func (g *Group) Deprecated(options DeprecationOptions) *Group {
- // store it for future use, e.g. collect all deprecated APIs and notify the developer.
- g.deprecation = options
- g.Party.UseOnce(func(ctx *context.Context) {
- WriteDeprecated(ctx, options)
- ctx.Next()
- })
- return g
- }
|