我的任务是从用户那里获取一些数据。下一部分是对第三方站点的API发出永久请求并处理来自它的响应。我不知道这部分应该放在哪里:型号,控制器或模块?应用程序的最后部分将向用户的电子邮件发送状态。
答案 0 :(得分:1)
处理来自HTTP请求的用户输入通常在控制器中完成。
向rails服务器发送请求,包括用户输入。
请求将路由到适当的控制器操作。在控制器操作中,形成对外部API的HTTP请求,并使用RestClient之类的东西在请求中包含用户输入。
最后,您将向用户发送一封电子邮件,并通过调用发送来包含请求状态!邮件类的方法。
示例:
class UsersController < ApplicationController
def controller_action
@user_input = params[:query]
# Build the external API request URI.
# Using www.icd10api.com as an example.
url = Addressable::URI.new(
scheme: "http",
host: "www.icd10api.com",
query_values: {code: @user_input, r: "json", desc: "long"})
# Perform the external request and parse the response
resp = JSON.parse(RestClient.get(url.to_s))
# Finally, deliver the email.
UserMailer.statuses_email(resp).deliver!
# Return status code
render status: 200
end
end
您始终可以将代码重构为模块,但只有在3个以上的位置使用它才能执行此操作。
如果你不仅仅使用它作为演示应用程序,我会参考Andrew CP Kelley评论中的链接:
Where do API calls go in a ruby on rails MVC framework project?
参考文献:
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
如果您正在使用rails 4 +:
,您也可能需要考虑一下这些问题答案 1 :(得分:0)
我通常将它包装在模块或类中,并将文件放入文件夹
app/models/services/
以下是我放置的所有内容service
的文件夹,例如请求API并从中继续响应的逻辑。