プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

Sinatraを使って、RESTFulなWeb-APIをためしてみた

Ruby AdventCalender 2011の企画であるSinatraを使って、RESTFulなWeb-APIを作ってみたいをもとに色々と学習していきたいと思います。

やること

記事と同様、hash関数に格納した値をsinatraで呼び出します。
それでは早速コードを晒していきます。

実装

hashで格納したデータを定義し、また呼び出すためのメソッドを実装しています。
rest.rb

require 'rubygems'
class Precure
  def initialize
    @precure = {
    1=>{:name=>"tsubomi",:precure=>"blossom"},
    2=>{:name=>"erica",:precure=>"marine"},
    3=>{:name=>"itsuki",:precure=>"sunshine"},
    4=>{:name=>"yuri",:precure=>"moonlight"},
    }
  end

  def find(id)
    @precure.fetch(id.to_i,false)
  end
end

hash関数のキーを整数で定義しているので、idはto_iで整数に変換しています。idの値はstring型になっているので、to_iで変換しないといけません(ここで苦労しました)。

呼び出し部分の実装です。
precureをキーにしてデータを参照しています(idはここで渡しています)。@cho_co氏にも協力して頂き、上のコードとともに可読性が向上しております(勉強になりました)
app.rb

require 'rubygems'
require 'sinatra'
require 'haml'
require 'erb'
require 'rexml/document'
require './rest.rb'

get '/' do
  'under construction'
end

get '/user/:id' do |id|
  precure = Precure.new.find(id)
  if precure != nil
    @user_name=precure[:name]
    @precure_name=precure[:precure]
    erb :getprecure
  else
    "There is no precure"
  end
end

xmlの表示領域を定義します。
getprecure.xml

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name><%=@user_name%></name>
  <precure><%=@precure_name%></precure>
</user>

これでlocalhost:9393/user/1と打ち込めば、プリキュアの正体がわかるはずです。(テスト済み)

まとめ

@cho_co氏には「なんでXMLやねーん」とツッコミを受けているので、JSONで実装したりなんだりしてみたい。
もちろん、PUTやDELETEメソッドの実装もコツコツ取り組んでいければなあとも思っております。