
什么是REST?以及RESTful的實現(xiàn)_數(shù)據(jù)分析師
什么是REST?
REST (REpresentation State Transfer) 描述了一個架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如 web 應(yīng)用程序。它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫者之一。REST 指的是一組架構(gòu)約束條件和原則。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計就是 RESTful。
Web 應(yīng)用程序最重要的 REST 原則是,客戶端和服務(wù)器之間的交互在請求之間是無狀態(tài)的。從客戶端到服務(wù)器的每個請求都必須包含理解請求所必需的信息。如果服務(wù)器在請求之間的任何時間點重啟,客戶端不會得到通知。此外,無狀態(tài)請求可以由任何可用服務(wù)器回答,這十分適合云計算之類的環(huán)境??蛻舳丝梢跃彺鏀?shù)據(jù)以改進性能。
在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應(yīng)用程序?qū)ο?、?shù)據(jù)庫記錄、算法等等。每個資源都使用 URI (Universal Resource Identifier) 得到一個惟一的地址。所有資源都共享統(tǒng)一的界面,以便在客戶端和服務(wù)器之間傳輸狀態(tài)。使用的是標準的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是應(yīng)用程序狀態(tài)的引擎,資源表示通過超鏈接互聯(lián)。
另一個重要的 REST 原則是分層系統(tǒng),這表示組件無法了解它與之交互的中間層以外的組件。通過將系統(tǒng)知識限制在單個層,可以限制整個系統(tǒng)的復雜性,促進了底層的獨立性。
當 REST 架構(gòu)的約束條件作為一個整體應(yīng)用時,將生成一個可以擴展到大量客戶端的應(yīng)用程序。它還降低了客戶端和服務(wù)器之間的交互延遲。統(tǒng)一界面簡化了整個系統(tǒng)架構(gòu),改進了子系統(tǒng)之間交互的可見性。REST 簡化了客戶端和服務(wù)器的實現(xiàn)。
RESTful的實現(xiàn):RESTful Web 服務(wù)與 RPC 樣式的 Web 服務(wù)
了解了什么是什么是REST,我們再看看RESTful的實現(xiàn)。最近,使用 RPC 樣式架構(gòu)構(gòu)建的基于 SOAP 的 Web 服務(wù)成為實現(xiàn) SOA 最常用的方法。RPC 樣式的 Web 服務(wù)客戶端將一個裝滿數(shù)據(jù)的信封(包括方法和參數(shù)信息)通過 HTTP 發(fā)送到服務(wù)器。服務(wù)器打開信封并使用傳入?yún)?shù)執(zhí)行指定的方法。方法的結(jié)果打包到一個信封并作為響應(yīng)發(fā)回客戶端。客戶端收到響應(yīng)并打開信封。每個對象都有自己獨特的方法以及僅公開一個 URI 的 RPC 樣式 Web 服務(wù),URI 表示單個端點。它忽略 HTTP 的大部分特性且僅支持 POST 方法。
由于輕量級以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,Web 服務(wù)的 RESTful 方法已經(jīng)成為最常見的替代方法??梢允褂酶鞣N語言(比如 Java 程序、Perl、Ruby、Python、PHP 和 javascript[包括 Ajax])實現(xiàn)客戶端。RESTful Web 服務(wù)通??梢酝ㄟ^自動客戶端或代表用戶的應(yīng)用程序訪問。但是,這種服務(wù)的簡便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構(gòu)建一個 GET URL 并讀取返回的內(nèi)容。
在 REST 樣式的 Web 服務(wù)中,每個資源都有一個地址。資源本身都是方法調(diào)用的目標,方法列表對所有資源都是一樣的。這些方法都是標準方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。
在 RPC 樣式的架構(gòu)中,關(guān)注點在于方法,而在 REST 樣式的架構(gòu)中,關(guān)注點在于資源 —— 將使用標準方法檢索并操作信息片段(使用表示的形式)。資源表示形式在表示形式中使用超鏈接互聯(lián)。
Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術(shù)語 REST-RPC 混合架構(gòu)。REST-RPC 混合 Web 服務(wù)不使用信封包裝方法、參數(shù)和數(shù)據(jù),而是直接通過 HTTP 傳輸數(shù)據(jù),這與 REST 樣式的 Web 服務(wù)是類似的。但是它不使用標準的 HTTP 方法操作資源。它在 HTTP 請求的 URI 部分存儲方法信息。好幾個知名的 Web 服務(wù),比如 Yahoo 的 Flickr API 和 del.icio.us API 都使用這種混合架構(gòu)。
RESTful的實現(xiàn):RESTful Web 服務(wù)的 Java 框架
有兩個 Java 框架可以幫助構(gòu)建 RESTful Web 服務(wù)。erome Louvel 和 Dave Pawson 開發(fā)的 Restlet(見 參考資料)是輕量級的。它實現(xiàn)針對各種 RESTful 系統(tǒng)的資源、表示、連接器和媒體類型之類的概念,包括 Web 服務(wù)。在 Restlet 框架中,客戶端和服務(wù)器都是組件。組件通過連接器互相通信。該框架最重要的類是抽象類 Uniform 及其具體的子類 Restlet,該類的子類是專用類,比如 Application、Filter、Finder、Router 和 Route。這些子類能夠一起處理驗證、過濾、安全、數(shù)據(jù)轉(zhuǎn)換以及將傳入請求路由到相應(yīng)資源等操作。Resource 類生成客戶端的表示形式。
JSR-311是 Sun Microsystems 的規(guī)范,可以為開發(fā) RESTful Web 服務(wù)定義一組 Java API。Jersey是對 JSR-311 的參考實現(xiàn)。
JSR-311 提供一組注釋,相關(guān)類和接口都可以用來將 Java 對象作為 Web 資源展示。該規(guī)范假定 HTTP 是底層網(wǎng)絡(luò)協(xié)議。它使用注釋提供 URI 和相應(yīng)資源類之間的清晰映射,以及 HTTP 方法與 Java 對象方法之間的映射。API 支持廣泛的 HTTP 實體內(nèi)容類型,包括 HTML、XML、JSON、GIF、JPG 等。它還將提供所需的插件功能,以允許使用標準方法通過應(yīng)用程序添加其他類型。
RESTful的實現(xiàn):構(gòu)建 RESTful Web 服務(wù)的多層架構(gòu)
RESTful Web 服務(wù)和動態(tài) Web 應(yīng)用程序在許多方面都是類似的。有時它們提供相同或非常類似的數(shù)據(jù)和函數(shù),盡管客戶端的種類不同。例如,在線電子商務(wù)分類網(wǎng)站為用戶提供一個瀏覽器界面,用于搜索、查看和訂購產(chǎn)品。如果還提供 Web 服務(wù)供公司、零售商甚至個人能夠自動訂購產(chǎn)品,它將非常有用。與大部分動態(tài) Web 應(yīng)用程序一樣,Web 服務(wù)可以從多層架構(gòu)的關(guān)注點分離中受益。業(yè)務(wù)邏輯和數(shù)據(jù)可以由自動客戶端和 GUI 客戶端共享。惟一的不同點在于客戶端的本質(zhì)和中間層的表示層。此外,從數(shù)據(jù)訪問中分離業(yè)務(wù)邏輯可實現(xiàn)數(shù)據(jù)庫獨立性,并為各種類型的數(shù)據(jù)存儲提供插件能力。
圖 1 展示了自動化客戶端,包括 Java 和各種語言編寫的腳本,這些語言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。在瀏覽器中運行且作為 RESTful Web 服務(wù)消費者運行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬于此列,因為它們都代表用戶以自動化樣式運行。自動化 Web 服務(wù)客戶端在 Web 層向 Resource Request Handler 發(fā)送 HTTP 響應(yīng)。客戶端的無狀態(tài)請求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應(yīng)操作。每個請求都包含所有必需的信息,包括 Resource Request Handler 用來處理請求的憑據(jù)。
從 Web 服務(wù)客戶端收到請求之后,Resource Request Handler 從業(yè)務(wù)邏輯層請求服務(wù)。Resource Request Handler 確定所有概念性的實體,系統(tǒng)將這些實體作為資源公開,并為每個資源分配一個惟一的 URI。但是,概念性的實體在該層是不存在的。它們存在于業(yè)務(wù)邏輯層。可以使用 Jersey 或其他框架實現(xiàn) Resource Request Handler,它應(yīng)該是輕量級的,將大量職責工作委托給業(yè)務(wù)層。
Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補充的。它們都可以利用大量 Web 技術(shù)和標準,比如 HTML、javascript、瀏覽器對象、XML/JSON 和 HTTP。當然也不需要購買、安裝或配置任何主要組件來支持 Ajax 前端和 RESTful Web 服務(wù)之間的交互。RESTful Web 服務(wù)為 Ajax 提供了非常簡單的 API 來處理服務(wù)器上資源之間的交互。
圖 1 中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能。Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子)。它從瀏覽器接受請求,從業(yè)務(wù)邏輯層請求服務(wù),生成表示并對瀏覽器做出響應(yīng)。表示供用戶在瀏覽器中顯示使用。表示不僅包含內(nèi)容,還包含顯示的屬性,比如 HTML 和 CSS。
業(yè)務(wù)規(guī)則可以集中到業(yè)務(wù)邏輯層,該層充當表示層和數(shù)據(jù)訪問層之間的數(shù)據(jù)交換的中間層。數(shù)據(jù)以域?qū)ο蠡蛑祵ο蟮男问教峁┙o表示層。從業(yè)務(wù)邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助于促進代碼重用,并能實現(xiàn)靈活和可擴展的架構(gòu)。此外,由于將來可以使用新的 REST 和 MVC 框架,實現(xiàn)它們變得更加容易,無需重寫業(yè)務(wù)邏輯層。
數(shù)據(jù)訪問層提供與數(shù)據(jù)存儲層的交互,可以使用 DAO 設(shè)計模式或者對象-關(guān)系映射解決方案(如 Hibernate、OJB 或 iBATIS)實現(xiàn)。作為替代方案,業(yè)務(wù)層和數(shù)據(jù)訪問層中的組件可以實現(xiàn)為 EJB 組件,并取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務(wù)和資源配置。但是,這需要一個遵從 Java EE 的應(yīng)用服務(wù)器,可能無法處理 Tomcat。該層的作用在于針對不同的數(shù)據(jù)存儲技術(shù),從業(yè)務(wù)邏輯中分離數(shù)據(jù)訪問代碼。數(shù)據(jù)訪問層還可以作為連接其他系統(tǒng)的集成點,可以成為其他 Web 服務(wù)的客戶端。
數(shù)據(jù)存儲層包括數(shù)據(jù)庫系統(tǒng)、LDAP 服務(wù)器、文件系統(tǒng)和企業(yè)信息系統(tǒng)(包括遺留系統(tǒng)、事務(wù)處理系統(tǒng)和企業(yè)資源規(guī)劃系統(tǒng))。使用該架構(gòu),您可以開始看到 RESTful Web 服務(wù)的力量,它可以靈活地成為任何企業(yè)數(shù)據(jù)存儲的統(tǒng)一 API,從而向以用戶為中心的 Web 應(yīng)用程序公開垂直數(shù)據(jù),并自動化批量報告腳本。
什么是REST:結(jié)束語
REST 描述了一個架構(gòu)樣式的互聯(lián)系統(tǒng)(如 Web 應(yīng)用程序)。REST 約束條件作為一個整體應(yīng)用時,將生成一個簡單、可擴展、有效、安全、可靠的架構(gòu)。由于它簡便、輕量級以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,RESTful Web 服務(wù)成為基于 SOAP 服務(wù)的一個最有前途的替代方案。用于 web 服務(wù)和動態(tài) Web 應(yīng)用程序的多層架構(gòu)可以實現(xiàn)可重用性、簡單性、可擴展性和組件可響應(yīng)性的清晰分離。Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補充的。開發(fā)人員可以輕松使用 Ajax 和 RESTful Web 服務(wù)一起創(chuàng)建豐富的界面。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
AI 浪潮下的生存與進階: CDA數(shù)據(jù)分析師—開啟新時代職業(yè)生涯的鑰匙(深度研究報告、發(fā)展指導白皮書) 發(fā)布機構(gòu):CDA數(shù)據(jù)科 ...
2025-07-13LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04