REST on Rails指南2 無窮盡的API

2021-06-16 00:38:29 字數 1382 閱讀 8622

通過上一講,我認為你樹立了這個概念:即web其實是一組資源而不是網頁的集合(如果你還不這麼認為,那請你先返回再次閱讀第一講)。這一講我們將從另乙個側面來講解為什麼要有rest?

物件導向設計與分析

如果你曾經學習過物件導向程式設計,那麼你很可能會這樣開始構建你的新程式:

這看起來不錯,事實上我曾經這麼幹了好多年,這種名詞加動詞的程式設計方法被成為「rpc」(遠端過程呼叫),雖然我不明白那個remote(遠端)是指什麼,但rpc的確是構建物件導向軟體的乙個重要方法,不過這種方式卻並不適合web開發。

讓我們回到遠古,假設現在是2023年(或者web出現之前的隨便什麼日子),假設有這樣的三家公司,他們需要開發這樣三種應用:書籍販賣,機票販賣以及 衛星地圖瀏覽。並且他們都遵照了物件導向的設計思想,同時出於長遠考慮,他們都認為總有一天會有第三方的軟體需要同他們的系統進行互動,因此,他們都實現 了他們各自的api。

現在,假設你的老闆分配給你乙個任務:為這三個系統設計乙個統一的前端,你會怎麼做呢?

我想你首先需要學習這三種完全不同的api,然後為每乙個api設計乙個ui控制項,當使用者操作ui控制項時,對應的api就會被呼叫,你可能會通過你學到的一些設計模式知識來簡化你的工作量,並使你的**看起來盡可能酷一些。

無窮盡的api

當然這只是假設,但即使真的如此,在web時代,你也不需要去學習那些無窮盡的糟糕api,你所要做的就是在你的電腦上安裝乙個瀏覽器,不是嗎?瀏覽器對 於你將要訪問的**一無所知,但它卻能夠準確的返回你想要的,你可以通過它購買**,預定機票,甚至從任意遠的距離來欣賞你家的屋頂。

這很神奇,不是嗎?但是讓我們設想一下,如果每個**都有它們自己的api會是什麼樣子?如果你想在amazon買本書,瀏覽器必須知道如何呼叫 amazong.buy(),如果你想檢視航班資訊,那麼瀏覽器需要知道如何呼叫unitedairlines.checkflights(),事實上, 這樣通吃所有api的程式永遠也不可能被開發出來。

所以這就決定了web不可能是rpc式的,它只能是rest式的。

以資源為中心的設計

那麼rest究竟是什麼呢?按照維基百科的解釋,rest是指representational state transfer。這是什麼意思呢,簡單的說,就是現在每個名詞都不再擁有它們各自獨一無二的動詞了,在rest的世界裡,所有名詞擁有的動詞都是一樣 的,並且數量也很有限。換句話說,也就是所有的資源都提供了一組相同的api,這些api的實質就是允許隨便什麼客戶端:

等一下!那麼究竟上面那個api可以讓我「購買一本書」呢?搜尋「下周二從紐約飛往洛杉磯的航班」又是哪個api完成的呢?

我們將在下一講回答這個問題,但是如果你已經改變思維,不再認為」買書「就是乙個網頁,而是開始思考這其實是某個資源的建立,那麼我想你其實應該已經知道答案了。

REST on Rails指南4 路由

通過上一講我們了解到,restful設計的關鍵就是定義系統中的資源,這一講我們將學習在rails中,如何將請求路由到我們的資源,以及我們應該如何來處理它。不過,有一點需要先說明 rest並不是rails的一部分,在rails出現之前,rest的概念已經存在很多年了,並且rest的應用也並不侷限於we...

無源定位2

clc clear all 相位內插法 fs 1024 取樣率 n 2 9 n 0 n 1 t n fs 時長 angle1 pi 2 angle2 pi 4 f1 341 noise sqrt 1 randn 1,n 1isqrt 1 randn 1,n x exp 1i2pif1t angle1...

Core Data 程式設計指南2

介紹 在cocoa環境下,如果你想使用資料庫 如sqlite 你可以使用sql語句的方式通過相關的工具類進行資料庫的直接操作。當然你也可以通過別人封裝之後的一些簡單框架,使得你的操作更加簡單 如fmdb bnrpersistence cocoa框架本身提供了coredata這個api可方便的讓開發者...