我正在构建我的第一个Rails应用程序,我希望它能够使用REST API中的所有内容。我想要做的是让Rails服务我的Web应用程序作为我的API的前端。据我所知(我现在正在盯着Rails),Rails在ORM和直接访问数据库系统方面具有很大的潜力。另一方面,我的平台的设计方式是通过定义的接口(在本例中为REST API)访问每一层,因此不会从任何客户端读取数据库,而是通过其接口读取数据库。
例如,我的API公开了以下资源:
https://api.example.com/v1/users/feature-xxx [GET]
我希望我的网络应用程序有一个类似的页面:
https://example.com/feature
因此,用户将访问此URL,登录后,Rails应用程序将请求数据从我的API生成此动态内容。
问题是:
谢谢!
答案 0 :(得分:31)
ActiveResource不再包含在Rails 4.0中。 Word现在几乎没有维护,并且很难为REST API端点定制,而这些端点没有根据" Rails方式"制定。
经过一番研究,我非常赞成使用Faraday。它包括对使用不同HTTP请求适配器的支持。它可以直接使用EventMachine,或者在您决定获得并发时使用像Typhoeus这样的库。它还支持类似Rack的中间件,可以无缝地包括身份验证。
对于容易配置的Rails中的REST ORM,相对较新的(大约一年)Her看起来非常有前途,并且使用法拉第。
<强>更新强>
我完全&lt; 3 RestClient。很简单。如果您需要ORM风格的功能,那么您需要更高级别的抽象,但是为了简单地使用API,您无法超越它的简单性。它只是做了它应该没有大惊小怪的事情,具有合理的默认值,并且能够设置高级选项,例如auth标题。
答案 1 :(得分:21)
我强烈建议ActiveResource满足您的要求。我的经验非常好。如果您打算使用的API是真的 REST,我认为没有任何更清洁的设计可以通过REST API使用数据。从它的README,
活动资源
活跃资源(ARes) 连接业务对象和 代表性国家转移(REST) 网页服务。它实现了 REST Web的对象关系映射 服务提供透明 客户端之间的代理功能 (ActiveResource)和RESTful服务 (由Simply RESTful提供 路由 ActionController的::参考资料)。
哲学
Active Resource尝试 提供连贯的包装 REST Web的对象关系映射 服务。它遵循相同的原则 哲学作为积极记录,在那 其主要目标之一是减少 映射到这些代码所需的代码量 资源。这是可能的 依赖于一些代码和 制定的基于协议的约定 Active Resource很容易推断出来 复杂的关系和结构。 这些惯例概述于 文档中的详细信息 的ActiveResource ::基
概述
模型类映射到 Active的远程REST资源 资源与Active一样 记录将模型类映射到数据库 表。当向a发出请求时 远程资源,一个REST XML请求 生成,传输和结果 收到并序列化为可用的 Ruby对象。
配置和使用
放置活跃 使用的资源非常相似 积极记录。这很简单 创建一个继承的模型类 来自ActiveResource :: Base和 为它提供一个网站类变量:
class Person < ActiveResource::Base self.site = "http://api.people.com:3000/" end
现在 Person类启用了REST并且 可以非常调用REST服务 类似于Active Record调用的方式 运作的生命周期方法 对持久的商店。
# Find a person with id = 1 ryan = Person.find(1) Person.exists?(1) # => true
如您所见,方法是 与Active Record非常相似 处理数据库的方法 记录。而不是处理 直接用数据库记录, 你正在处理HTTP资源 (可能是也可能不是数据库 记录)。
答案 2 :(得分:7)
如果您决定不使用像Farady或HTTParty这样的HTTP客户端库,则可以使用open-uri从您需要的端点获取数据,并使用JSON解析它。
要求:open-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 %>
答案 3 :(得分:4)
是的,这可能是一个很好的设计。
我的建议是“使用Ruby和Rails进行面向服务的设计: http://www.amazon.com/Service-Oriented-Design-Rails-Addison-Wesley-Professional/dp/0321659368
它专注于Restful Ruby应用程序,就像你的例子一样,强调缩放和性能。它还研究了不同的框架(Rack,Sinatra,Rails)以及它们填补的角色。
不幸的是我没有实现这个策略我的自己(还是!)所以我不能给你任何第一手的建议。