【发布时间】:2020-08-02 07:17:40
【问题描述】:
我正在 Elixir/Phoenix 中实现一个后端 API。出于安全原因,决定在 URL 上尽可能少地显示,以便将要执行的操作嵌入到 POST 请求的 JSON 有效负载中。例如,我们将在https://my.server.com/api/ 上使用以下有效负载发出一个 POST,而不是类似 REST 的请求 https://my.server.com/api/get_user/42:
{
"action" : "get_user",
"params" : {
"id" : 42
}
}
到目前为止,我的路由器是这样的:
scope "/api", AlaaarmWeb do
pipe_through :api
post "/", ApiController, :process
match :*, "/*path", ApiController, :error_404
end
我有一堆process 函数在params 映射上匹配:
def process(conn, params = %{"action" => "get_user"}) do
# ... get the user from the DB in resp, and sed back
json(conn, resp)
end
它工作正常,但代码不是很清楚:一个大文件,使用相同的控制器,ApiController,而使用UserApiController 管理用户会更清晰,ProductApiController 用于管理产品等等。
所以,我想知道是否有一种方法可以根据有效负载的内容而不仅仅是根据 URL 来选择要调用的模块和函数。
【问题讨论】: