<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Restful Rails從1.2版本就開始實現RESTful了。 ### 什么是REST(Representational State Transfer) 及 RESTFul REST(Representational State Transfer)軟件架構,是由Roy Thomas Fielding博士在2000年首次提出的。直到2005年,隨著Ajax、Rails等Web開發技術的興起,在Web開發技術社區掀起了一場重歸Web架構設計本源的運動,REST架構風格得到了越來越多的關注。在2007年1月,支持REST開發的Ruby on Rails 1.2版正式發布,并且將支持REST開發作為Rails未來發展中的優先內容。Ruby on Rails的創始人DHH做了一個名為“World of Resources”的精彩演講,DHH在Web開發技術社區中的強大影響力,使得REST一下子處在Web開發技術舞臺的聚光燈之下。 直到今天,幾乎看不到不支持REST開發的Web開發框架了。 所以,要想掌握Rails,REST是必須要理解的概念,除非你回去用Rails1.2之前的版本。 REST軟件架構遵循了CRUD原則,該原則告訴我們對于資源(包括網絡資源)只需要四種行為:創建(Create)、獲取(Read)、更新(Update)和銷毀(DELETE)就可以完成對其操作和處理了。 REST的特點有五個: - 資源(Resource) - 資源的表述(Representation) - 狀態轉移(State Transfer) - 統一接口(Uniform Interface) - 超文本驅動(Hypertext Driven) 分別代表: 1. 資源: 是服務器的一種抽象,服務器是由很多離散資源所組成。資源以名詞為核心來組織,一個資源可由一個或多個URI來標識,URI既是資源的名稱,也是資源的地址。資源可以是系統上的文件、可以是數據庫中的表等具體的東西,也可以說其他抽象的東西,只要開發者自己能理解。 1. 資源的表述: 資源的表述是一段對于資源在某個特定時刻的狀態的描述。可以在客戶端-服務器端之間轉移(交換)。資源的表述可以有多種格式,例如HTML/XML/JSON/純文本/圖片/視頻/音頻等等。資源的表述格式可以通過協商機制來確定。請求-響應方向的表述通常使用不同的格式。 1. 狀態轉移:是指在客戶端和服務端之間通過轉移代表資源狀態的表述(json/html/xml等),來實現操作資源的目的。 1. 統一接口:REST要求,必須通過統一的接口來對資源執行各種操作。對于每個資源只能執行一組有限的操作。以HTTP/1.1協議為例,HTTP/1.1協議定義了一個操作資源的統一接口,主要包括以下內容: 7個HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS 1. 超文本驅動: 資源之間通過超鏈接相互關聯,超鏈接既代表資源之間的關系,也代表可執行的狀態遷移。 ### 與REST架構風格并行的其他架構風格 - 分布式對象(Distributed Objects,簡稱DO) 架構實例有CORBA/RMI/EJB/DCOM/.NET Remoting等等 - 遠程過程調用(Remote Procedure Call,簡稱RPC) 架構實例有SOAP/XML-RPC/Hessian/Flash AMF/DWR等等 ### Rails中的REST實現 - Rails中的每個Controller被看作一個資源 - 資源的CRUD,Rails默認支持使用HTTP的GET/POST/PUT/DELETE - 路由系統和URL Helper 方法生成基于RESTful的超鏈接 Rails中定義資源, config/routes.rb文件中: ~~~ resources :photos ~~~ Rails中action和http 方法的對應表: | HTTP Verb | Path | action | used for | |-----|-----|-----|-----| | GET | /photos | index | 顯示所有的photos資源 | | GET | /photos/new | new | 返回一個創建新photo的頁面 | | POST | /photos | create | 創建一個新的photo資源 | | GET | /photos/:id | show | 顯示一個指定的photo資源 | | GET | /photos/:id/edit | edit | 返回一個編輯指定photo資源的html頁面 | | PATCH/PUT | /photos/:id | update | 更新一個指定的photo資源 | | DELETE | /photos/:id | destroy | 刪除一個指定的photo資源 | 注: PATCH只有Rails4支持。 上面的表中,我們可以看到Rails的action對應的HTTP方法,是符合RESTful的。 再看看Rails提供的URL Helper方法: - photos_path 生成的path: /photos - new_photo_path 生成的path: /photos/new - edit_photo_path(:id) 生成的path: /photos/:id/edit (例如, edit_photo_path(10) 生成的path: /photos/10/edit) - photo_path(:id) 生成的path: /photos/:id (例如, photo_path(10) 生成的path: /photos/10) ### 小結: RESTful架構,我自己的理解,用一句話簡單的描述: 用HTTP本身提供的方法來響應服務器資源,并來修改其狀態,就是RESTful的。 比如 GET [http://www.xxx.com/photos](http://www.xxx.com/photos) 就是要獲取photos的所有資源。 非RESTFul的方式是這樣的,拿RPC風格來舉例: GET或POST請求, [http://www.xxx.com/get_photos](http://www.xxx.com/get_photos) 而這個get_photos是你自己定義的,別人也可以定義為get_all_photos,一點都不統一。并且忽略了HTTP方法本身的意義。 所以,RESTful,叫重歸Web架構設計本源。 對于這個概念,也要求大腦里先有這個概念,后面我們再慢慢深入。 那么REST架構和MVC架構是否沖突? 我覺得不沖突, MVC是來描述系統內部的代碼組織與數據流向,而REST架構,是一種Web Service接口規范。一個是內部,一個是外部。 了解Restful架構,對于我們理解Chef Server Api至關重要。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看