Ami*_*ary 3 ruby ruby-on-rails ruby-on-rails-5
正如我在问题标题中提到的,我想知道让它发挥作用的最佳方法,我需要一个示例(非常简单的一个,如下所示:)
假设我有一个 API,它有 1 个控制器和 1 个操作,例如简单起见
root 'main#index'
Run Code Online (Sandbox Code Playgroud)
在我的索引操作中
def index
@date = Data.today
end
Run Code Online (Sandbox Code Playgroud)
然后我有另一个 Rails 应用程序,它将用于前端渲染
我如何将此 @date 作为 JSON 从 API 传递到其他应用程序以呈现它?
我应该在其他应用程序上使用相同的控制器吗?
我如何连接并发送http请求并接收响应?
提前致谢
对于这样一个简单的示例,您可以执行以下简单操作:
def index
@date = Date.today
respond_to do |format|
format.json @date
end
end
Run Code Online (Sandbox Code Playgroud)
但是,您很可能想要处理更复杂的 JSON 响应,因此不久之后您可能会想要使用 Jbuilder gem或ActiveModel Serializers(我的首选方法)之类的东西。
另一方面,您的前端需要发出 HTTP GET 请求。有很多方法(和宝石)可以做到这一点,但一种常见的方法就是使用内置Net::HTTP类。
require 'net/http'
url = URI.parse('http://backend.dev/main/index')
request = Net::HTTP::Get.new(url.to_s)
response = Net::HTTP.start(url.host, url.port) do |http|
http.request(request)
end
raise response.body.inspect
Run Code Online (Sandbox Code Playgroud)
在您的情况下,更好的方法可能是使用Active Resource gem。这个 gem 允许您创建由 REST API 而不是数据库支持的模型。Widget例如,如果您的 API 应用程序通过以下 URL为特定模型(我们称之为 )提供基本的创建-读取-更新-销毁操作:
GET http://backend.dev/widget # listing of widgets
GET http://backend.dev/widget/1 # Read for widget id: 1
POST http://backend.dev/widget # Create new widget
UPDATE http://backend.dev/widget/1 # Update widget id: 1
DELETE http://backend.dev/widget/1 # Destroy widget id: 1
Run Code Online (Sandbox Code Playgroud)
然后在您的前端应用程序中,您可以声明一个活动资源,如下所示:
class Widget < ActiveResource::Base
self.site = "http://backend.dev"
end
Run Code Online (Sandbox Code Playgroud)
它将自动神奇地访问 API 中的所有这些方法,并且行为与常规 Active Record 模型非常相似。这样,您基本上可以像“普通”rails 应用程序一样设计前端应用程序,但使用基于 ActiveResource 的模型代替 ActiveRecord。
不过,我要指出的是,如今更常见的做法是在 Rails 中构建 API,并使用客户端 Javascript 构建前端,使用 JQuery 或 Angular 之类的东西从 API 发出请求。我不确定你通过拆分 API 和前端会获得什么,因为它们都是 Rails 应用程序 - 除非你有令人信服的理由,否则我只会构建一个处理 API 和前端的 Rails 应用程序 -结束,或者构建一个 Rails API + Angular(或类似)前端。
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |