如果控制器方法导致外部服务修改数据库,我应该使用GET还是POST?

时间:2018-12-19 14:05:51

标签: ruby-on-rails ruby http post get

我有一个Rails API,我要加载一些用户信息的端点是:

# at user controller
def load_user_info
  user = User.find_by(id: params[:id])
  if user.blank?
    # Here I call an external service to crawl user info from 
    # some webpage, and after get this info I save it in my database
  else
    user
  end
end

在这种情况下,我通往load_user_info的路线应该是GET还是POST?

我已经看过这两个问题,但对我来说还不够清楚,因为我仅在用户不存在时保存一些数据,并且如果我的用户不存在,则不是我的控制器的这种方法会将某些内容保存在我的数据库中,这将是我的外部爬虫类,该爬虫类将从网站上获取信息,而不是User.create(attributes),因此该端点是我的前端页面(将使用此API)只负责返回用户信息,我的客户不知道数据库中是否有任何插入

When do you use POST and when do you use GET?

When should I use GET or POST method? What's the difference between them?

3 个答案:

答案 0 :(得分:3)

根据我仍然有限的知识,我将更改您的操作方式。

好: 将方法更改为user_info并使其成为GET。第一次调用时它会产生一些额外的负载这一事实是不相关的。

更好: 将方法更改为show(标准的Rails方法之一)并使用GET。

也许最好: 将爬网逻辑移至模型或单独的服务。通常,控制器方法不是执行此操作的最佳位置,但是您比我更了解您的应用。

答案 1 :(得分:1)

您正在保存到数据库,所以对我来说,从逻辑上讲这是一个POST。

答案 2 :(得分:1)

这将是POST方法,因为您是从数组中的外部源获取数据,然后将其提取并保存到数据库中。无需使用GET方法。