哪里可以将凤凰控制器用于带有Web前端和API的应用程序

时间:2017-03-04 16:22:07

标签: elixir phoenix-framework

我正在学习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

1 个答案:

答案 0 :(得分:2)

目前的惯例似乎是:

  • 将根范围控制器放在web/controllers下,名称为MyApp.FooController
  • 将控制器放在web/controllers/<namespace>下的其他名称空间下,其名称为MyApp.<Namespace>.FooController(例如MyApp.API.FooController下的web/controllers/api

当我对菲尼克斯的惯例和最佳做法感到困惑时,我通常会看hex.pm source code