API到底是什麼?RESTful設計會讓我RIP嗎?

很多人可能常常聽到RESTful API,但卻不是很清楚API是什麼?如果又是REST風格的API,可能感覺更一頭霧水。一起來了解這個名詞背後的意義與效用吧。

API,也就是應用程式介面(Application Programming Interface)是一種可以讓兩個系統在網路上進行安全交換的一種介面,可以使得這些資訊的交換可以可靠、安全且有效率地做交換。設計API的人可以用各種方式來建構API,那麼常常聽到的RESTful API也是其中的一個方案。

REST,也就是Representational State Transfer算是一種軟體架構概念。依照這個概念,人們可以架構出更可以擴充的以及更可以移植的API。尤其是當遇上越來越龐大的系統時,這個架構概念可以有效率的解決溝通問題,也更方便修改。

它有個很重要的基礎,就是要有一致的API接口(interface)。這可以使伺服器之間有一個標準格式可以做資料交換。傳送出來的請求會被要求要有相同的字詞可以辨識來確認目前需要做什麼動作,也要明確指出是針對哪個特定資源的處理。

最常見的實作就是透過HTTP方法(HTTP method)來互動,比如說,GET是用來取得指定的資源,在其中加入要取得的指定資源,讓伺服器選出後傳送給客戶端。POST則是可以要求資料的形式,以及透過連續傳送的方式表達是否要對相同資源做出多次的處理。PUT則是更新伺服器上的現有資源,雖然與POST類似。但多次傳送相同的PUT只會有相同的結果。而DELETE則是發出刪除的請求,通常這需要伴隨著身分的驗證,如果沒有驗證成功便不能更改資料。

 

在REST架構裡面,伺服器不保存狀態。而是由客戶端自己保存,等到之後做請求的時候才再一起給伺服器端。這個就叫做無狀態(Stateless)。最常見的就是當伺服器生成可能驗證身分相關的token的時候,就保存有關的資料。這個token會被送去給客戶端,等到下次客戶端請求什麼資料的時候再一起連這個token傳回來,這樣伺服器端就知道傳來的這個是已經有登記過的,也就不用再驗證一次。這樣的話,很多類似的行為可以被抽象化,伺服器端可以做很多類似的事情,同時又處理很多套系統的需求。彼此間的依賴度就會下降很多。也因為如此,伺服器其實可以用同一套邏輯在各個層級之間處理相似的事情。每個伺服器與客戶端之前也都可以再夾上許多的伺服器做其他的處理。最重要的是客戶端並不用看到這其中到底發生了什麼事情。這種將流程藏起來的特色也是讓RESTful這種設計架構的方法可以安全的重要原因。

 

總和一下使用RESTful做成的API有幾個好處。無狀態的特性使得整個系統可以因為不用保留很多客戶端的資訊,就讓伺服器得以消除大部分的工作,這使得它的效能不容易被降低,也可以得到更好的擴展。也因為每個部份可以抽象化地拆開,所以可以降低耦合度。修改某些功能的時候不用為了某一小部分而整組重作。這也就提升了整個架構的靈活度。且因為現在資訊科技的快速發展,許多的API部件可能都出自於不同開發單位或是不同公司,使用RESTful的概念去做架構,也就使得各種不同程式語言、不同環境的應用程式們可以透過API的方式請求資料,而不會被侷限在相同的環境裡。也是降低技術與溝通成本的好方法。用這種概念去設計架構相信大家都會感到很 peaceful而且不會REST in peace(RIP)!


發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料