hyperioxx / frontman

Frontman is an open-source API gateway written in Go that allows you to manage your microservices and expose them as a single API endpoint. It acts as a reverse proxy and handles requests from clients, routing them to the appropriate backend service.

Home Page:https://frontman-labs.github.io/frontman/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

API Versioning support for backend services

simonchapman1986 opened this issue · comments

With modern scalable organisations, it is highly desirable, yet frequently difficult, to have solid support canary support or blue/green management at the application gateway/APIM. But additionally, the ability to support multiple long term versions of an api backend.

I propose the ability to support hosting multiple versions of a given backend.

Example: todo-app

userA creates a new release, v1 and makes this available via frontman.

They then want to release another version, which in their release cycle is v2. This in theory, should be possible to easily deploy, yet group with the existing backend. Providing some level of cognitive relationship.

I also think it would be nice to hold support for deprecating api's, rather than simply leaving to the user. Naturally i think these should be optional abilities, and not a forced workflow, but it is something crucially missing.

  • deploy /v1/todo-app/
  • new version
  • deploy /v2/todo-app/
  • new version
  • deploy /v3/todo-app/
  • deprecate /v1/todo-app/

This could intertwine with the gateway policy of % split also..perhaps something like latest or similar... perhaps this crosses paths slightly with #50 ?

maybe there's multiple options.. its not uncommon to access different versions via headers Accept-version: 1.0 or even the slightly more complex version

Accept: application/vnd.example.v1+json
Accept: application/vnd.example+json;version=1.0

the above perhaps could marry with #22

not sure.. just spitballing ideas at this stage to provide conversation to groom something together. Naturally, frontman's winning metric is simplicity, but thinking simplicity can also be in the form of hard to reach features, in a simple to use manner.