[Ruby] 使用Sinatra快速建立測試用Web Service

不管是開發 App 或是一般的網頁程式,多少都會遇到跟 Web API 串接的情況,而在 Web API 還沒完工的情況下,通常都會先釋出測試用的 API,而裡面並沒有程式邏輯,只是單純的回應假資料。雖然 C# 或 Java 在開發上很方便,但僅僅只是開發測試用的程式,就必須開啟肥大的 IDE,想想還真是不方便。幸好 Sinatra 能滿足這樣簡單的需求。

Sinatra 是 Ruby 上的 library,只需簡單的幾行程式碼就能開發 Web API,它的安裝也相當簡單:

gem install sinatra

以下是它的 Hello World 範例:

require 'sinatra'

get '/' do
  'Hello World!'
end

執行這段程式碼後,在瀏覽器開啟這個 url:http://localhost:4567。之後就會看到 “Hello World"。

接下來是如何回傳json資料,這部份會需要用到 Yajl,它主要用來處理 json 資料,像是以下程式碼:

require 'sinatra'
require 'yajl'
require 'json'

encoder = Yajl::Encoder.new

get '/aaa3' do
  resource =
      {
          :foo=>'bar',
          :baz=>'qux',
          :my=>{:a=>'aaa3',:b=>true}
      }
  content_type :json
  encoder.encode(resource)
end

執行結果:

{"foo":"bar","baz":"qux","my":{"a":"aaa3","b":true}}

程式在回傳 json 時,記得加上 content_type:json 這一行,雖然看起來結果是對的,但有些程式比較嚴謹,是會檢查 content type 是否正確。另外,除了 Get,那 Post 該怎麼實作呢?這部份也很簡單,像是下列程式碼:

post '/aaa4' do
  data = JSON.parse request.body.read
  data['Foo']
end

除了回傳 json,Sinatra 也能處理 view,也就是回傳一般的 html。語法跟 Ruby on Rails 一樣,也是使用 erb 檔。只要在 views 資料夾下產生 erb 檔就可以了,像是:

<html>
<head>
  <title>Index</title>
</head>
<body>
    <%= Time.now %> <br/>
    <%= foo %> <br/>
    <%= aaa3 %> <br/>
</body>
</html>

程式碼:

get '/TestView' do
  erb :index , :locals => {:foo => 'bar', :aaa3 => 'aaa3'}
end

只要熟悉原有的 Ruby on Rails,學習上不會有太大的問題,對我這種只熟 C# 的工程師而言,其實也不會有太大的門檻,畢竟只是要寫測試用的程式而已。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s