У меня проблемы с пониманием того, как правильно обращаться с представлениями Феникса.
Допустим, клиент вызывает API «login_user».
Мой контроллер обработает запрос, проверяя, разрешен ли пользователю доступ или нет. В ответ мне нужно отправить данные пользователя вызывающей стороне.
Теперь, после логики входа контроллера, как правильно реагировать?
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-страницу.