当前位置:  开发笔记 > 后端 > 正文

如何为Ruby应用程序创建REST API?

如何解决《如何为Ruby应用程序创建RESTAPI?》经验,为你挑选了3个好方法。

我想知道如何使用REST API提供Ruby应用程序.我可以基于Ruby的TCPServer API编写代码,但这看起来有点低级.你认为这是一个很好的解决方案吗?或者你推荐一种更好的方法吗?



1> Filipe Migue..:

您可以使用Sinatra快速编写微小的,专注的Web应用程序和轻量级REST服务.

在文档部分,他们重点介绍了几个关于此事的视频:

Adam Wiggins和Blake Mizerany 在RubyConf 2008上展示了Sinatra和RestClient.该演讲详细介绍了Sinatra的基本理念,并反映了使用Sinatra构建真实世界的应用程序.

Adam Keys和The Pragmatic Programmers已经在Sinatra上开始了一系列的截屏视频.前两集包括创建一个小型Web应用程序并创建REST服务.流行音乐5美元.

你也可以使用rails,但这有点矫枉过正......



2> Arne Brasseu..:

在设计RESTful API时涉及多个层,每层都有几种有效的方法.

TCPServer确实是非常低级别的,因为您必须自己实现HTTP协议,这是不推荐的.

最后一步是Rack,它负责处理所有低级HTTP细节.这就是所有Ruby Web框架如Rails,Sinatra或Ramaze在幕后使用的原因.它还确保您的应用程序可以在各种应用程序服务器上运行,例如Passenger,Thin或Unicorn.

但即使Rack仍然处于低级别,它为您提供HTTP,但更高级别的框架将典型的Web编程从样板中取出.对于API,您可以查看像Sinatra这样的最小框架,或者专门为Grape或Rails :: API等API设计的框架.这些已经假设一个RESTful样式的API,所以你应该发现它们很自然.

典型的RESTful API的特点是具有可猜测(约定驱动)URL标识的资源,以及基于HTTP方法(动词)的操作,如GET,POST,PUT,DELETE和PATCH.要真正接受Roy Fielding所描述的REST精神,你可以转向更完整的"超媒体"API.最明显的区别是响应更加独立.它们具有明确定义的媒体类型(由您自己或现有规范定义),其中包含相关资源的链接,而不仅仅是数字ID.类似地,响应包含描述可以执行的操作的模板/表单.(还有更多,但在表面层面上,你会注意到.)

这使得API更容易被人和机器发现,并且它允许更大的自由来发展API.可能存在性能缺陷,因为客户端通常需要执行更多请求才能实现相同的功能,但这可以通过深思熟虑的设计和缓存来防止.Garner专门用于提供简单的服务器端缓存.

您可以定义适合您的应用程序的媒体类型,通常在JSON或XML之上,或者您可以查看现有规范,特别是Collection + JSON,HAL和JSON-API.目前看来,HAL拥有最大的牵引力,在各种平台上提供了多个库.

围绕JSON-API似乎并没有发生很多事情,但是两个重要的项目,ActiveModel :: Serializers和Ember-data都采用(并同时开发)这种格式,这意味着它可能成为一种流行的选择在Ruby/Rails世界中.

编辑:错字



3> include..:

我也在使用Sinatra来开发简单的REST解决方案.

问题是Sinatra在很多方面都非常灵活.您可以按照自己喜欢的方式构建项目结构.Usualy我们有一个lib/tmp /和public /目录以及一个config.ru和app.rb文件,但正如我所说,你可以构建你想要的任何东西.

要记住,Sinatra不是通常的MVC,因为de M(模型).为了将sinatra用于Simple CRUD Web应用程序,您只需加载gem即可.

require 'datamapper'

或者你喜欢的其他选择 sqlite, sequel, ActiveRecord, ...

并且你的Sinatra下有一个ORM.

在Sinatra下,您可以定义遵循四个主要建议GET,PUT POST和DELETE的路线.

require 'rubygems'
require 'sinatra'

get '/' do
  erb :home
end

get '/API/*' do
  api = params[:splat]
  @command_test = api[0]
  @command_helo = api[1]
  #...
  def do_things(with_it)
    #...
  end
  #...
end

__END__

@@home

helo

那么你有意识形态:)

最后.学习Sinatra并不是浪费时间,因为它简单易行,因为它为我提供了网络编程的基础.我想在不久的将来,可以将Sinatra应用程序(Rack Apps)"注入"Rails3项目.

看看github,你会发现很多用Sinatra建造的项目.如需进一步阅读结账Sinatra :: Base.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有