ruby三日游之后(二)——Sinatra RESTful初入

原先的一个最小的物联网系统设计方案及源码,我觉得我似乎把代码写成了,用于解释原理似乎不够简化,于是就开始寻找下一个可以替换的框架。Ruby On Rails算一个,但是考虑到不同的语言之间可能会有不同的人群。以及之前用python下的Django做了一个的RESTful服务,于是就拉到一个新的有趣的东西,即Ruby。好吧,我觉得我还不算会,但是试着写写呗。最终的上的就是用Sinatra构建一个简单的版本来替换掉现有的Laravel,需要注意的是Laravel的代码虽然看上去比较多,但是效率不会比Sinatra差。


安装Sinatra

这部分就比较简单了,参考官方的文档

gem install sinatra

接着写一个脚本

require 'sinatra'

get '/hi' do
  "Hello World!"
end

似乎我们再执行一下

ruby hi.rb

打开浏览器

http://127.0.0.1:4567

就完成简单版的hello,world了。(转载保留 Phodal's Blog Phodal's  zenthink


配置mysql

然后,然后我们需要和数据库连接上,这个就是最简单不过的需要了,所以我们还需要写个Gemfile

source :rubygems
gem 'sinatra'
gem 'data_mapper'
gem 'dm-mysql-adapter'

安装上面的这些东西,一开始的时候试着用active_record,不过似乎不是很理想,或者说用sinatra+data_mapper的会比较多,大家都喜欢轻量级的。

连接数据库

添加下面代码至app.rb

require 'data_mapper'

DataMapper.setup(:default,"mysql://root:940217@localhost/iot")

这个的意思也就是连接到mysql数据库,用户名root,密码940217,数据库名iot

定义数据

然后我们先定义一下Athome

class Athomes
  include DataMapper::Resource

  property :id,         Serial
  property :sensors1,   Float
  property :sensors2,   Float
  property :temperature,Float
  property :led1,       Boolean
end
以便于将它转换为json

于是我们还需要

get '/',:provides=>:json do
  athomes=Athomes.all
  athomes.to_json
end

运行app.rb

ruby app.rb

那么我们就会得到下面的结果

[{"id":1,"sensors1":22.2,"sensors2":7.5,"temperature":19.8,"led1":false},{"id":2,"sensors1":22.0,"sensors2":7.6,"temperature":18.8,"led1":false}]
相对的比Laravel框架下的程序简单,只是不够MVC

结果

最终app.rb的代码

require 'rubygems'
require 'sinatra'
require 'data_mapper'

DataMapper.setup(:default,"mysql://root:@localhost/iot")

class Athomes
  include DataMapper::Resource

  property :id,         Serial
  property :sensors1,   Float
  property :sensors2,   Float
  property :temperature,Float
  property :led1,       Boolean
end

get '/',:provides=>:json do
  athomes=Athomes.all
  athomes.to_json
end

那么,就这样吧。

这部分代码看上去虽然比Laravel简单,但是似乎在运行的时候我们也需要考虑一下。在后面的时间里,加入其他东西后,我们再看看这个框架是否很强大,能替换原来的Laravel框架。



你可能感兴趣的:(Ruby,Restful,Sinatra,ruby三日游)