热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Elixir插件中的版本控制API

如何解决《Elixir插件中的版本控制API》经验,为你挑选了1个好方法。

我有两个模块:lib / endpoints / v1 / base.ex和lib / endpoints / v2 / base.ex。

lib / endpoints / v1 / base.ex

defmodule Http.Endpoints.V1.Base do
  require Logger
  use Plug.Router

  plug(:match)
  plug(:dispatch)
  plug(Plug.Logger)
  plug(Plug.Parsers, parsers: [:json], json_decoder: Poison)

  get "/v1/ping" do
    send_resp(conn, 200, "pong!")
  end
end

lib / endpoints / v2 / base.ex

defmodule Http.Endpoints.V2.Base do
  require Logger
  use Plug.Router

  plug(:match)
  plug(:dispatch)
  plug(Plug.Logger)
  plug(Plug.Parsers, parsers: [:json], json_decoder: Poison)

  get "/v2/ping" do
    send_resp(conn, 200, "pong! 2")
  end
end

如果我放入应用程序,则端点可以正常工作。

Plug.Cowboy.child_spec(scheme: :http, plug: Http.Endpoints.V1.Base, options: [port: Application.get_env(:http, :port)])

但是我希望我的应用程序启动所有端点版本。

我尝试使用require Http.Endpoints.V1.Base和创建lib / endpoints.ex,require Http.Endpoints.V2.Base并更改了我的application.ex,但它不起作用。



1> Mike Quinlan..:

您可以从端点文件转发到其他路由器。以下是该forward/2功能的文档:https : //hexdocs.pm/plug/Plug.Router.html#forward/2

基本上,您为v1和v2创建2个路由器:

defmodule MyAppWeb.V2.Router do
  use Plug.Router

  plug :match
  plug :dispatch

  get "/ping" do
    send_resp(conn, 200, "OK")
  end
end

defmodule MyAppWeb.V1.Router do
  use Plug.Router

  plug :match
  plug :dispatch

  get "/ping" do
    send_resp(conn, 200, "OK")
  end
end

然后,在您的端点中,您可以添加所有常用功能并转发至版本化路由,如下所示:

defmodule MyAppWeb.Endpoint do
  require Logger
  use Plug.Router

  plug :match
  plug :dispatch
  plug Plug.Logger
  plug Plug.Parsers, parsers: [:json], json_decoder: Poison

  # Forwarding
  forward "/v2", to: MyApp.V2.Router
  forward "/v1", to: MyApp.V1.Router

  # You should put a catch-all here
  match _ do
    send_resp(conn, 404, "Not Found")
  end
end

然后在application.ex文件中,像以前一样安装端点。然而,在这一点上,你应该能够ping通两个/v1/ping/v2/ping来自同一个端口。

干杯!


推荐阅读
author-avatar
当个里个当
这个世界很大 大到我们错过了彼此 这个世界很小 小到每个细节都充满奇妙
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有