Versioning
Here is a simple example. maru_version
1. add versioning
to your config.exs
versioning
to your config.exsuse Mix.Config
config :maru, MaruVersion.API,
versioning: [
using: :path
],
http: [port: 4001]
use Mix.Config
config :maru, MaruVersion.API,
versioning: [
using: :param,
parameter: "v"
],
http: [port: 4001]
use Mix.Config
config :maru, MaruVersion.API,
versioning: [
using: :accept_version_header
],
http: [port: 4001]
2. use version/1
or version/2
DSL
version/1
or version/2
DSLdefmodule MaruVersion.API.V1 do
use Maru.Router
version "v1"
desc "get v1"
get do
"It works V1!"
end
mount Maru.Version.API.Shared
end
defmodule MaruVersion.API.V2 do
use Maru.Router
version "v2" do
desc "get v2"
get do
"It works V2!"
end
mount Maru.Version.API.Shared
end
end
3. mount to top API router
defmodule MaruVersion.API do
use Maru.Router
mount MaruVersion.API.V1
mount MaruVersion.API.V2
end
Version Extend
defmodule MaruVersion.API.V2 do
use Maru.Router
version "v2" do
desc "get v2"
get do
"It works V2!"
end
get :extend do
"This will be extended!"
end
get :no_extend do
"This will NOT be extended!"
end
end
end
defmodule MaruVersion.API.V3 do
# extend all
version "v3", extend: "v2", at: MaruVersion.API.V2,
# extend only
version "v3", extend: "v2", at: MaruVersion.API.V2, only: [
get: "/extend/*",
]
# extend except
version "v3", extend: "v2", at: MaruVersion.API.V2, except: [
match: "/no_extend",
]
# high priority
get do
"It works V3!"
end
end
Updated less than a minute ago