在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Ruby/ 2.2 REST 架構(gòu)
寫在后面
寫在前面
第六章 Rails 的配置及部署
第四章 Rails 中的模型
4.4 模型中的校驗(yàn)(Validates)
1.3 用戶界面(UI)設(shè)計(jì)
6.5 生產(chǎn)環(huán)境部署
3.2 表單
4.3 模型中的關(guān)聯(lián)關(guān)系(Relations)
4.5 模型中的回調(diào)(Callback)
第五章 Rails 中的控制器
4.2 深入模型查詢
5.2 控制器中的方法
6.2 緩存
3.4 模板引擎的使用
6.4 I18n
第一章 Ruby on Rails 概述
6.6 常用 Gem
1.2 Rails 文件簡(jiǎn)介
2.2 REST 架構(gòu)
2.3 深入路由(routes)
第三章 Rails 中的視圖
6.3 異步任務(wù)及郵件發(fā)送
第二章 Rails 中的資源
3.3 視圖中的 AJAX 交互

2.2 REST 架構(gòu)

概要:

本課時(shí)結(jié)合 Rails 路由(routes),詳解 Rails 如何實(shí)現(xiàn) REST 架構(gòu)。

知識(shí)點(diǎn):

  1. REST
  2. CRUD

正文

2.2.1 什么是 REST

REST,Representational State Transfer, 更準(zhǔn)確地表述應(yīng)該是:具有代表性的狀態(tài)轉(zhuǎn)移。這是一種軟件架構(gòu)風(fēng)格。說(shuō)它是風(fēng)格,表明它不具備約束。你可以破壞它,不按照它的風(fēng)格去實(shí)現(xiàn)。但是,REST 擁有簡(jiǎn)潔的設(shè)計(jì)理念,按照它的設(shè)計(jì)可以在開發(fā)中獲得益處。

Rails 是按照 REST 風(fēng)格設(shè)計(jì)的,從1.2版本起,Rails 就開始按照 REST 架構(gòu)管理資源。

如何管理呢?Rails 從以下三個(gè)方面對(duì)資源進(jìn)行定義:

  1. 直觀簡(jiǎn)短的資源地址:URI,比如:http://example.com/resources/。
  2. 可傳輸?shù)馁Y源:Web 服務(wù)接受與返回的互聯(lián)網(wǎng)媒體類型,比如:JSON,XML ,YAML 等。
  3. 對(duì)資源的操作:Web 服務(wù)在該資源上所支持的一系列請(qǐng)求方法(比如:POST,GET,PUT或DELETE)。

在我們的代碼里,我想你已經(jīng)在上一節(jié)創(chuàng)建的項(xiàng)目里體驗(yàn)到了如何增加,修改,和刪除一個(gè)商品。

以上引述于http://zh.wikipedia.org/wiki/REST,并結(jié)合 Rails 做了解釋。這里還有一篇文章,推薦閱讀:如何獲?。℅ET)一杯咖啡——星巴克REST案例分析

REST是資源管理的模式,和 SOAP 和 XML-RPC 相比更加簡(jiǎn)潔,下一節(jié),我們介紹Rails 是如何管理資源的。

2.2.2 CRUD,資源的增刪改查

首先,我們?cè)?Rails 中定義一個(gè)資源,我們?cè)?routes 中使用 resources 這個(gè)方法:

Rails.application.routes.draw do
  ...
  resources :products

我們運(yùn)行這個(gè)命令:

% rake routes | grep product
    products GET    /products(.:format)          products#index
             POST   /products(.:format)          products#create
 new_product GET    /products/new(.:format)      products#new
edit_product GET    /products/:id/edit(.:format) products#edit
     product GET    /products/:id(.:format)      products#show
             PATCH  /products/:id(.:format)      products#update
             PUT    /products/:id(.:format)      products#update
             DELETE /products/:id(.:format)      products#destroy

Rails 為我們提供了7個(gè)方法,他們?cè)?app/controllers/products_controller.rb 這個(gè)文件中。

當(dāng)我們 GET /products 這個(gè)地址時(shí),調(diào)用的是 index 方法,當(dāng)我們 POST /products 地址時(shí),Rails 會(huì)按照 REST 的模式,把請(qǐng)求轉(zhuǎn)入到 create 方法內(nèi)。我們看一下這個(gè)表:

HTTP 請(qǐng)求方法在RESTful Web 服務(wù)中的典型應(yīng)用

資源 GET PUT POST DELETE
一組資源的URI,比如http://example.com/resources/ 列出 URI,以及該資源組中每個(gè)資源的詳細(xì)信息(后者可選)。 使用給定的一組資源替換當(dāng)前整組資源。 在本組資源中創(chuàng)建/追加一個(gè)新的資源。 該操作往往返回新資源的URL。 刪除整組資源。
單個(gè)資源的URI,比如http://example.com/resources/142 獲取 指定的資源的詳細(xì)信息,格式可以自選一個(gè)合適的網(wǎng)絡(luò)媒體類型(比如:XML、JSON等) 替換/創(chuàng)建 指定的資源。并將其追加到相應(yīng)的資源組中。 把指定的資源當(dāng)做一個(gè)資源組,并在其下創(chuàng)建/追加一個(gè)新的元素,使其隸屬于當(dāng)前資源。 刪除指定的元素。

所以,向 PATCHPUT 的地址是一個(gè)具體的資源,比如 /products/1,而 Rails 會(huì)把請(qǐng)求轉(zhuǎn)移到 update 方法中。值得注意的是:在之前的 Rails 版本中,用的是 PUT 動(dòng)作,4.0 后引入PATCH,稍微不同的是,patch 可以表示更新或局部更新,但在使用上,和 PUT 無(wú)異。[1]

:format 表示我們可以接受和響應(yīng)對(duì)應(yīng)的 format 請(qǐng)求。比如 /products/1 響應(yīng)的是 html,而 /products/1.json 響應(yīng)的是 json。

我們可以關(guān)閉這種響應(yīng),只需要 resources :products, format: false

或者更改響應(yīng),只接受和響應(yīng) json,如:resources :products, format: 'json'

在實(shí)踐中,這對(duì) API 的設(shè)計(jì)非常方便,比如頁(yè)面上 ajax 調(diào)用 /api/users/1/status,約束它只返回 json 格式。

從現(xiàn)在開始,我們的代碼主要集中在 app 文件夾內(nèi)。下一節(jié),我們將深入 Rails 的 routes 中,看看實(shí)踐中經(jīng)常遇到的情況,以及如何解決。你也可以請(qǐng)先閱讀以下 Rails 手冊(cè) 中的 routes 章節(jié)。

閱讀

REST服務(wù)開發(fā)實(shí)戰(zhàn)

為啥REST如此重要?