lic*_*rna 26 api rest web-applications ruby-on-rails
我正在构建我的第一个Rails应用程序,我希望它能够使用REST API中的所有内容.我想要做的是让Rails服务我的Web应用程序作为我的API的前端.据我所知(我现在正在盯着Rails),Rails在ORM和直接访问数据库系统方面具有很大的潜力.另一方面,我的平台的设计方式是通过定义的接口(在本例中为REST API)访问每个层,因此不会从任何客户端读取数据库,而是通过其接口读取数据库.
例如,我的API公开以下资源:
https://api.example.com/v1/users/feature-xxx [GET]
Run Code Online (Sandbox Code Playgroud)
我希望我的网络应用程序有一个像这样的页面:
https://example.com/feature
Run Code Online (Sandbox Code Playgroud)
因此,用户将访问此URL,登录后,Rails应用程序将请求数据从我的API生成此动态内容.
问题是:
谢谢!
Duk*_*uke 31
ActiveResource不再包含在Rails 4.0中.Word现在几乎没有维护,并且很难为不按照"Rails方式"制定的REST API端点进行自定义.
经过一番研究,我非常赞成使用法拉第.它包括对使用不同HTTP请求适配器的支持.它可以直接使用EventMachine,或者在您决定获得并发时使用像Typhoeus这样的库.它还支持类似Rack的中间件,可以无缝地包括身份验证.
对于容易配置的Rails中的REST ORM,相对较新的(大约一年)Her看起来很有前途,并且使用法拉第.
更新
我完全<3 RestClient.很简单.如果您需要ORM风格的功能,那么您将需要更高级别的抽象,但是对于简单地使用API,您无法超越其简单性.它只是做了它应该没有大惊小怪的事情,具有合理的默认值,并且能够设置高级选项,如auth标头.
Chi*_*tan 21
我强烈推荐ActiveResource满足您的要求.我对它的体验非常好.如果您打算使用的API 实际上是REST,我认为没有任何更清洁的设计可以通过REST API来使用数据.从它的README,
活跃资源
活动资源(ARes)连接业务对象和Representational State Transfer(REST)Web服务.它实现了REST Web服务的对象关系映射,以在客户端(ActiveResource)和RESTful服务(由ActionController :: Resources中的Simply RESTful路由提供)之间提供透明的代理功能.
哲学
Active Resource尝试为REST Web服务提供连贯的包装器对象关系映射.它遵循与Active Record相同的理念,其主要目标之一是减少映射到这些资源所需的代码量.这可以通过依赖许多基于代码和协议的约定来实现,这些约定使Active Resource可以轻松地推断出复杂的关系和结构.ActiveResource :: Base的文档中详细介绍了这些约定.
概观
模型类通过Active Resource映射到远程REST资源,与Active Record将模型类映射到数据库表的方式大致相同.当向远程资源发出请求时,会生成,传输REST XML请求,并将结果接收并序列化为可用的Ruby对象.
配置和使用
使用Active Resource与Active Record非常相似.它就像创建一个继承自ActiveResource :: Base并为其提供网站类变量的模型类一样简单:
Run Code Online (Sandbox Code Playgroud)class Person < ActiveResource::Base self.site = "http://api.people.com:3000/" end现在,Person类已启用REST,并且可以调用REST服务,与Active Record调用针对持久性存储操作的生命周期方法的方式非常相似.
Run Code Online (Sandbox Code Playgroud)# Find a person with id = 1 ryan = Person.find(1) Person.exists?(1) # => true如您所见,这些方法与Active Record处理数据库记录的方法非常相似.但是,您不是直接处理数据库记录,而是处理HTTP资源(可能是也可能不是数据库记录).
如果您决定不使用HTTP客户端库像法拉第或HTTParty,您可以使用开放式的URI从您的需要和使用JSON解析它的端点获取数据.
要求:open-uri和json
在控制器中:
@people = JSON.parse(open("http://api.people.com:3000/people").read, symbolize_names: true)
Run Code Online (Sandbox Code Playgroud)
在视图中:
<% @people.each do |person| %>
Name:<%= person[:name] %>
Age:<%= person[:age] %>
<% end %>
Run Code Online (Sandbox Code Playgroud)