2009-11-02 73 views

回答

24

您可以使用Sinatra非常快速地編寫小而集中的Web應用程序和輕量級REST服務。

documentation節他們突出就這一問題對夫婦的視頻:

  • 亞當·威金斯和布雷克Mizerany目前西納特拉和RestClientRubyConf 2008。談話詳細介紹了Sinatra的基本理念,並反思了使用Sinatra構建真實世界的應用程序。

  • Adam Keys和Pragmatic Programmers在Sinatra上啓動了一系列screencasts。前兩集包括創建一個小型Web應用程序並創建一個REST服務。 5美元的流行音樂。

您還可以使用rails爲好,但是這是一個有點矯枉過正...

+2

+1西納特拉。 – 2009-11-02 16:07:20

7

我使用西納特拉也開發簡單的REST的解決方案。

事情是Sinatra在很多方面都非常靈活。您可以按照自己喜歡的方式構建自己的項目結構。 Usualy我們有一個lib/tmp /和public /目錄以及一個config.ru和app.rb文件,但正如我所說,你可以建立任何你想要的。

要記住的是,Sinatra不僅僅是因爲de M(模型)而是一個通常的MVC。對於簡單CRUD Web應用程序使用sinatra,您只需加載一個gem即可。

require 'datamapper'

或其他您所選擇像sqlite, sequel, ActiveRecord, ...

的,瞧你有你的下一個西納特拉ORM。

在Sinatra下,您可以定義符合四個主要建議GET,PUT POST和DELETE的路線。


require 'rubygems' 
require 'sinatra' 

get '/' do 
    erb :home 
end 

get '/API/*' do 
    api = params[:splat] 
    @command_test = api[0] 
    @command_helo = api[1] 
    #... 
    def do_things(with_it) 
    #... 
    end 
    #... 
end 

__END__ 

@@home 

helo 

以及你得到了IDEIA :)

最後。學習Sinatra並不是浪費時間,因爲它簡單並且因爲它爲我提供了什麼Web編程的基礎。 我想在不久的將來,將「注入」Sinatra應用程序(機架應用程序)到Rails3項目中是可能的。

看看github,你會發現許多用Sinatra構建的項目。 欲瞭解更多結帳Sinatra :: Base。

1

對於簡單的REST API,我還會考慮直接對Rack機架庫進行操作(即,您可能不需要像Sinatra這樣的框架)。例如,路由對於簡單的情況可能非常容易。我在這裏舉了一個小例子:https://gist.github.com/4685445

8

設計RESTful API時涉及到幾個層,每層都有幾個有效的方法。

TCPServer確實是非常低的水平,因爲你必須自己實現HTTP協議,這是不推薦的。

上一步是Rack,它處理所有低級HTTP細節。這就是Rails,Sinatra或Ramaze等所有Ruby Web框架都在使用的底層。它還可以確保您的應用程序在各種應用程序服務器上運行,如Passenger,Thin或Unicorn。

但即使Rack仍然是低級別的,它給了你HTTP,但是更高層次的框架把典型的網絡程序設計拿出來了。對於API,您可以查看像Sinatra這樣的最小框架,或者專門爲API設計的框架,如GrapeRails::API。這些將已經採用REST風格的API,所以你應該認爲它們是非常合適的。

典型的RESTful API的特徵是具有由可猜測(慣例驅動)URL標識的資源,以及基於HTTP方法(動詞)(如GET,POST,PUT,DELETE和PATCH)的資源。要真正接受Roy Fielding描述的REST精神,您可以轉向更完整的「超媒體」API。最明顯的區別是答覆更獨立。它們具有定義明確的媒體類型(由您自己或現有規範定義),其中包含指向相關資源的鏈接,而不僅僅是數字ID。類似的迴應包含描述可以執行的操作的模板/表格。 (還有更多,但在表面層面,這是你會注意到的)。

這使得人們和機器都可以更容易地發現API,並且它允許在演化API時有更大的自由度。可能存在性能缺陷,因爲客戶通常需要做更多的請求來實現同樣的事情,但是這可以通過深思熟慮的設計和緩存來防止。 Garner專門用於提供簡單的服務器端緩存。

您可以定義適合你的應用,常見於JSON或XML的頂部自己的媒體類型,或者你可以看一下現有的規範,特別是Collection+JSONHALJSON-API。目前看起來HAL具有最大的吸引力,在各種平臺上都可以使用several libraries

JSON-API似乎並沒有發生很多事情,但兩個重要項目ActiveModel :: Serializer和Ember-data都採用了(並且同時開發)了這種格式,這意味着它可以成爲Ruby/Rails世界的熱門選擇。

編輯:錯字

相關問題