まずはHello Worldを表示する
bundle init
でGemfile生成- Gemfileに以下を追加
gem 'sinatra' gem 'json' gem 'sinatra-contrib'
bundle install --path vendor/bundle
でインストール
適当にapi.rbでも作って
require 'sinatra' require 'json' require "sinatra/reloader" if development? get '/hello' do content_type :json data= { message: "Hello" } data.to_json end
最後に実行
bundle exec ruby api.rb -o 0.0.0.0
ActiveRecordを使ってMySQLデータベースと連携してみる
CRUDを実現してみる
まずはGemfileを以下に変更
source "https://rubygems.org" gem 'sinatra' gem 'json' gem 'sinatra-contrib' gem "activerecord" gem "mysql2"
そのあとにbundle install --path vendor/bundle
で再度インストールを実行
MySQLを操作してデータベースを作成 Railsの流儀でテーブル名は複数形でなければならない
mysql> drop database hoge; Query OK, 1 row affected (0.04 sec) mysql> create database hoge; Query OK, 1 row affected (0.00 sec) mysql> use hoge Database changed mysql> create table users( -> id int unsigned not null auto_increment, -> name varchar(255) not null, -> loc varchar(255) not null, -> created_at datetime not null, -> primary key(id) -> ); Query OK, 0 rows affected (0.10 sec) mysql> desc users; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | loc | varchar(255) | NO | | NULL | | | created_at | datetime | NO | | NULL | | +------------+------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
テストでデータを追加してみる
mysql> insert into users values(1, "taro", "Tokyo", now()); Query OK, 1 row affected (0.05 sec) mysql> select * from users; +----+------+-------+---------------------+ | id | name | loc | created_at | +----+------+-------+---------------------+ | 1 | taro | Tokyo | 2014-10-22 19:03:34 | +----+------+-------+---------------------+ 1 row in set (0.00 sec)
次にRubyからデータベースにアクセスできるようにdatabase.ymlを作成
development: adapter: mysql2 database: hoge host: localhost username: root password: xxxxxxxxxxx encoding: utf8
最後にapi.rb
# encoding: utf-8 require 'active_record' require 'mysql2' require 'sinatra' require 'json' require "sinatra/reloader" if development? ActiveRecord::Base.configurations = YAML.load_file('database.yml') ActiveRecord::Base.establish_connection('development') class User < ActiveRecord::Base end get '/users.json' do content_type :json users = User.all users.to_json end # ユーザー新規追加 post '/add' do name = params[:name] loc = params[:loc] # データ保存 user = User.new user.name = name user.loc = loc if user.save user.to_json else halt 500 end end
これでbundle exec ruby api.rb -o 0.0.0.0
した状態でhttp://*****:4567/users.jsonにアクセスすると全ユーザーがJSON形式で表示される