【问题标题】:Document API routes using ExDoc使用 ExDoc 记录 API 路由
【发布时间】:2021-11-17 17:12:44
【问题描述】:

我是 Elixir 的新手,我想知道是否可以使用 ExDoc 记录 API 路由?路由器包含在文档中,但不包含在路由中(因为它们不是函数)。

例如,这里是一个示例代码:

scope "/api", MyApp.Api, as: :api do
  pipe_through :api

  scope "/v1", V1, as: :v1 do
    post "/test", MyController, :test
  end
end

我可以记录这是ExDoc,如果可以,如何记录?

对不起,如果我错过了一些明显的东西!

【问题讨论】:

  • 所有这些路由都没有在文档页面MyAppWeb.Router.Helpers.html上列出吗?
  • @zwippie 仅记录路径,而不记录 API 路由。

标签: elixir documentation phoenix-framework ex-doc


【解决方案1】:

不是路由(因为它们不是函数)

这并不完全正确,但让我们暂时忽略它。


取决于“记录”路线的含义。如果您只想列出所有路线,那么您可以使用Phoenix.Router.routes/1:

Phoenix.Router.routes(MyAppWeb.Router)

从技术上讲,您甚至可以在 @moduledoc 属性中使用它,但有一个小要点 - 您不能在 MyAppWeb.Router 中使用它,因为在评估 @moduledoc 时该模块仍未完全编译。幸运的是,您可以在另一个模块中完成所有魔法。然后在那个模块中你可以这样做:

@moduledoc """
Available routes:

```
#{
  for %{verb: verb, path: path} <- Phoenix.Router.routes(MyAppWeb.Router) do
    [String.upcase(to_string(verb)), " ", path, "\n"]
  end
}
```
"""

这将导致类似的结果:

可用路线:

POST /test

在你的情况下。

【讨论】:

  • 感谢您的评论!我试过了,但是放置您提供的代码会导致错误MyAppWeb.Router.__routes__/0 is undefined。函数中的相同代码效果很好,但不能在 @moduledoc 中调用(同样的错误)。
  • @Jeremie 您在哪个模块中调用该函数?
猜你喜欢
  • 2019-05-12
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 2014-04-27
  • 2016-08-16
  • 2020-02-05
相关资源
最近更新 更多