sinatra杂记
前言
所谓杂记,就是从网络上收集的一些话题的片段。这次,觉得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
例子程序:
- heroku-client,项目不维护,迁移到https://github.com/heroku/heroku, 提供的所谓的Heroku CLI
- couchrest, RESTful CounchDB客户端
恰当的数量,更少的类,更少的继承,URLs,显式的简单性替代隐藏的复杂性,体量小,松耦合,编写快。
对比: Controller object mapping & routes, URLs的对比
思考: 控制器对象映射和路由是Rails的做法,也就是映射URL。REST直接使用URL的语义
sinatra的伙伴
-
实现特定功能的库,比如持久层,邮件,基础扩展包等等。sinatra原来有口号,叫ORM无知,现在随着NOSQL盛行,也可以叫持久层无知。邮件则可以选择pony,active_support也不是必须的,当然可能会被其他的gem引入,有洁癖的话就一一干掉吧。
-
rack中间件。sinatra爱rack,而且Sinatra::Base本身也是一个rack中间件。可以将sinatra看作rack中间件,但大多数情况都是在Sinatra中’use’别的rack中间件来实现一些功能。
-
sinatra插件,sinatra 1.0花了很长时间才发布的一大目的是保证1.x系列的向后兼容性。这意味这sinatra插件的稳定期会比rails插件要更长。但是毕竟Rack中间件更加通用,sinatra插件寥寥无几。
-
rails。rails可以用sinatra,sinatra也可以用rails中的组件来实现功能。这个看上去有点讽刺,
用了sinatra为什么还要用rails?
。原因自然是,时间紧,任务重,rails可以解决这个问题就用嘛。不喜欢的话,就再花点时间,或者索性自己写一个解决方案了
傲娇的使用Disqus