我想知道如何使用REST API提供Ruby应用程序.我可以基于Ruby的TCPServer API编写代码,但这看起来有点低级.你认为这是一个很好的解决方案吗?或者你推荐一种更好的方法吗?
您可以使用Sinatra快速编写微小的,专注的Web应用程序和轻量级REST服务.
在文档部分,他们重点介绍了几个关于此事的视频:
Adam Wiggins和Blake Mizerany 在RubyConf 2008上展示了Sinatra和RestClient.该演讲详细介绍了Sinatra的基本理念,并反映了使用Sinatra构建真实世界的应用程序.
Adam Keys和The Pragmatic Programmers已经在Sinatra上开始了一系列的截屏视频.前两集包括创建一个小型Web应用程序并创建REST服务.流行音乐5美元.
你也可以使用rails,但这有点矫枉过正......
在设计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世界中.
编辑:错字
我也在使用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.