07 November 2014

前言

所谓杂记,就是从网络上收集的一些话题的片段。这次,觉得ITeye上的关于Rails的话题比较多,对感兴趣的内容做个收集。

slideshare

Lightweight web services with Sinatra and RestClient

Sinatra : Small & Beautiful 的Ruby web框架

web services: Rails太大,Bare mongrel handler和Rack app太小。

Sinatra中的内容:模板,测试,before filter,辅助类,Error处理器,HTTP caching, Rack和内建中间件

例子:

  • git-wiki , git-wiki的源代码只有2百多行,路由,视图,方法组合在一起的开发方式。
  • rifgraf , Fire-and-forget data collection and graphing service, 6十行代码
  • github-services,403行ruby代码,
  • scanty, 194行代码,轻量级的博客软件

web service的客户端: ActiveResource, Rest-client, NET:HTTP

Rest-client: 受Sinatra启发而产生的Ruby微型客户端。示例代码如下:

require 'rubygems'
require 'rest_client'

RestClient.get 'http://localhost:4567/posts' , :author => 'Me' , :title => 'First Post'

# 终端中的使用
# restclient http://example.com
# >> post '/resource, :value => 42'
  • RestClient可以看作是更好的curl,其实curl我也不是很熟。
  • 具有Logging & Replay

例子程序:

恰当的数量,更少的类,更少的继承,URLs,显式的简单性替代隐藏的复杂性,体量小,松耦合,编写快。

对比: Controller object mapping & routes, URLs的对比

思考: 控制器对象映射和路由是Rails的做法,也就是映射URL。REST直接使用URL的语义

sinatra的伙伴

  1. 实现特定功能的库,比如持久层,邮件,基础扩展包等等。sinatra原来有口号,叫ORM无知,现在随着NOSQL盛行,也可以叫持久层无知。邮件则可以选择pony,active_support也不是必须的,当然可能会被其他的gem引入,有洁癖的话就一一干掉吧。

  2. rack中间件。sinatra爱rack,而且Sinatra::Base本身也是一个rack中间件。可以将sinatra看作rack中间件,但大多数情况都是在Sinatra中’use’别的rack中间件来实现一些功能。

  3. sinatra插件,sinatra 1.0花了很长时间才发布的一大目的是保证1.x系列的向后兼容性。这意味这sinatra插件的稳定期会比rails插件要更长。但是毕竟Rack中间件更加通用,sinatra插件寥寥无几。

  4. rails。rails可以用sinatra,sinatra也可以用rails中的组件来实现功能。这个看上去有点讽刺,用了sinatra为什么还要用rails?。原因自然是,时间紧,任务重,rails可以解决这个问题就用嘛。不喜欢的话,就再花点时间,或者索性自己写一个解决方案了




傲娇的使用Disqus