我正在学习Phoenix / Elixir并尝试弄清楚如果你有一个同时使用web作用域和api作用域的应用程序会有什么正确的约定。目前,我在与Web视图控制器DatapointApiController
相同的目录中为API DatapointController
创建了另一个控制器。
我非常确定有关如何处理此问题的惯例?将控制器放在API范围的哪个位置更好,它应该放在项目的哪个位置?
我的router.ex
文件应该提供足够的上下文:
defmodule Web.Router do
use Web.Web, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", Web do
pipe_through :browser # Use the default browser stack
resources "/datapoints", DatapointController
end
scope "/api", Web do
pipe_through :api
resources "/datapoints", DatapointApiController, only: [:create]
end
end
答案 0 :(得分:2)
目前的惯例似乎是:
web/controllers
下,名称为MyApp.FooController
web/controllers/<namespace>
下的其他名称空间下,其名称为MyApp.<Namespace>.FooController
(例如MyApp.API.FooController
下的web/controllers/api
当我对菲尼克斯的惯例和最佳做法感到困惑时,我通常会看hex.pm source code。