使用Phoenix作为RESTful API应用处理视图

时间:2018-08-27 14:19:24

标签: rest api elixir phoenix-framework

我无法理解如何正确处理凤凰视图。 假设某个客户端正在调用“ login_user” api。 我的控制器将处理该请求,检查是否允许用户访问。作为响应,我需要将用户数据发送给呼叫者。 现在,在控制器的登录逻辑之后,正确的响应方式是什么?

1)提取调用者在控制器内部所需的所有数据:

user_data = function_that_fetch_user_data()

conn
|> put_resp_header("content-type", "application/json")
|> put_status(:ok)
|> send_resp(Status.code(:ok), user_data)

2)渲染视图

conn
|> put_resp_header("content-type", "application/json")
|> put_status(:ok)
|> render(login.json, user)

并获取其中的数据

defmodule CryptomonitorWeb.UserView do
  use MyAppWeb, :view

  def render("login.json", user) do
    token = generate_user_token(user.mail)
    %{
       token: token,
       email: user.mail,
       group: "operators"
     }
  end

end

对我来说,获取数据并直接在控制器中建立我的响应更加清晰明了,但是我想知道处理api响应的“正确”方法是什么。我的应用通常只会将json返回给客户端,有时还会渲染一些html页面。

1 个答案:

答案 0 :(得分:1)

视图表示要作为响应发送到的数据。因此,首先,您需要一些数据,其次,您必须以必须在某些API或HTML页面中呈现的方式来呈现它。

您绝对不想从视图进入数据库,但是如果您不去那里,则边框会更加微妙。

仍然,generate_user_token看起来像数据发射器,而不像数据展示者。谁知道呢,也许有一天某人会更改功能,因此它将命中数据库以生成令牌。

为避免相关的麻烦,最好将数据生成器放在视图之外。将它们放入控制器,然后将结果发送到视图。

因此,我对选项1进行投票。