Ruby on rails 从Rails应用程序使用RESTAPI
我正在构建我的第一个Rails应用程序,我希望它能够使用RESTAPI中的所有内容。我想做的是让Rails作为API的前端服务于我的web应用程序。据我所知(我现在正在关注Rails),Rails在使用ORM和直接访问数据库系统方面有很大的潜力。另一方面,我的平台是这样设计的:每一层都是通过定义的接口(在本例中是RESTAPI)访问的,因此没有数据库是通过任何客户机的接口读取的 例如,my API公开了以下资源:Ruby on rails 从Rails应用程序使用RESTAPI,ruby-on-rails,api,web-applications,rest,Ruby On Rails,Api,Web Applications,Rest,我正在构建我的第一个Rails应用程序,我希望它能够使用RESTAPI中的所有内容。我想做的是让Rails作为API的前端服务于我的web应用程序。据我所知(我现在正在关注Rails),Rails在使用ORM和直接访问数据库系统方面有很大的潜力。另一方面,我的平台是这样设计的:每一层都是通过定义的接口(在本例中是RESTAPI)访问的,因此没有数据库是通过任何客户机的接口读取的 例如,my API公开了以下资源: https://api.example.com/v1/users/feature-
https://api.example.com/v1/users/feature-xxx [GET]
我希望我的web应用程序具有如下页面:
https://example.com/feature
因此,用户将访问此URL,当登录时,Rails应用程序将请求数据以从my API生成此动态内容
问题是:
- 我的Rails应用程序从HTTP/Rest后端使用数据需要哪些步骤?以及
- 这是Rails应用程序的一个好设计吗
谢谢 是的,这可能是一个很好的设计 我的建议是阅读“使用Ruby和Rails进行面向服务的设计: 它关注Restful Ruby应用程序,就像您的示例一样,重点关注可伸缩性和性能。它还研究不同的框架(Rack、Sinatra、Rails)以及它们所扮演的角色 不幸的是,我自己还没有实施这一策略所以我不能给你任何第一手的建议。我强烈推荐你的要求。我在这方面的经验非常好。如果你打算使用的API是真正的REST,我不认为通过REST API使用数据有任何更干净的设计。从它的自述来看 活动资源 主动资源(ARes) 连接业务对象和 代表性状态转移(REST) web服务。它实现 RESTWeb的对象关系映射 提供透明服务 客户端之间的代理功能 (ActiveResource)和RESTful服务 (这是由简单的RESTful提供的 路由选择 ActionController::Resources) 哲学 活动资源尝试 提供一个连贯的包装 RESTWeb的对象关系映射 服务。它遵循相同的原则 作为活动记录的哲学 它的主要目标之一是减少污染 映射到这些对象所需的代码量 资源。这是由 依靠一些代码和 基于协议的约定使 活动资源很容易推断 复杂的关系和结构。 这些公约概述于 详细信息请参见以下文档: ActiveResource::Base 概述 模型类映射到 远程REST资源,按活动 资源的活动方式大致相同 记录将模型类映射到数据库 表。当向 在远程资源中,请求REST XML 生成、传输和结果 接收并序列化为可用的 Ruby对象 配置和使用 积极投入 要使用的资源与 活动记录,简单到 创建继承的模型类 来自ActiveResource::Base和 为其提供站点类变量:
class Person < ActiveResource::Base
self.site = "http://api.people.com:3000/"
end
如您所见,这些方法是
与活动记录非常相似
数据库的处理方法
记录,但不是交易
直接使用数据库记录,
您正在处理HTTP资源
(可能是也可能不是数据库)
记录)
ActiveResource不再包含在Rails 4.0中。据说,现在它几乎没有得到维护,很难为未按照“Rails方式”制定的REST API端点进行自定义 经过一些研究,我非常赞成使用。它包括对使用不同HTTP请求适配器的支持。它可以直接使用EventMachine,或者在您决定并发时使用Typhous之类的库。它还支持机架式中间件,以便无缝地包括(比如)身份验证 对于Rails中易于配置的REST ORM,相对较新的(大约有一年的历史)看起来非常有希望,并且使用了法拉第 更新
我完全如果您决定不使用像Farady或HTTParty这样的HTTP客户端库,您可以使用OpenURI从您需要的端点获取数据,并用JSON解析它 要求:打开uri和json 在控制器中:
@people = JSON.parse(open("http://api.people.com:3000/people").read, symbolize_names: true)
他认为:
<% @people.each do |person| %>
Name:<%= person[:name] %>
Age:<%= person[:age] %>
<% end %>
姓名:
年龄:
我认为现在应该将Duke的答案标记为正确答案。您能将Duke的答案标记为正确答案吗?我的答案在这些时候是旧的和无效的。请注意,不明确删除未使用的临时文件可能会在文件系统上留下大量临时文件,直到它们被垃圾收集。最好在另一行中调用open
,然后关闭返回的温度。我还建议使用curb
。它非常快,是我见过的最快的客户端
<% @people.each do |person| %>
Name:<%= person[:name] %>
Age:<%= person[:age] %>
<% end %>