最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

REST架構(gòu)及RESTful應(yīng)用程序簡(jiǎn)介

 更新時(shí)間:2022年03月07日 11:59:45   作者:字正腔圓  
這篇文章主要為大家介紹了REST架構(gòu)及RESTful的應(yīng)用程序簡(jiǎn)介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

REST (REpresentation State Transfer) 描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),指的是一組架構(gòu)約束條件和原則。

RESTful 指的是滿(mǎn)足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)。

RESTful service是一種架構(gòu)模式,它的輕量級(jí)web服務(wù),發(fā)揮HTTP協(xié)議的原生的GET,PUT,POST,DELETE。

REST 并非始終是正確的選擇。 它作為一種設(shè)計(jì) Web 服務(wù)的方法而變得流行,這種方法對(duì)專(zhuān)有中間件(例如某個(gè)應(yīng)用程序服務(wù)器)的依賴(lài)比基于 SOAP 和 WSDL 的方法更少。 

使用REST的關(guān)鍵是如何抽象資源,抽象得越精確,對(duì)REST的應(yīng)用就越好。

REST服務(wù)關(guān)鍵原則:

1. 給一切物體一個(gè)ID

2.連接物體在一起

3.使用標(biāo)準(zhǔn)方法

4.資源多重表述

5.無(wú)狀態(tài)通信

REST能實(shí)現(xiàn)是一種解耦方法,讓我們實(shí)現(xiàn)這些架構(gòu)特性:性能,伸縮性,簡(jiǎn)化,可修改性,擴(kuò)展性 

在J2EE中我們可以使用JAX-RS, Dropwizard… 
dotnet平臺(tái)可以使用Web API, WCF,servicestack,nancyfx 

Web 應(yīng)用程序最重要的 REST 原則是,客戶(hù)端和服務(wù)器之間的交互在請(qǐng)求之間是無(wú)狀態(tài)的。從客戶(hù)端到服務(wù)器的每個(gè)請(qǐng)求都必須包含理解請(qǐng)求所必需的信息。如果服務(wù)器在請(qǐng)求之間的任何時(shí)間點(diǎn)重啟,客戶(hù)端不會(huì)得到通知。此外,無(wú)狀態(tài)請(qǐng)求可以由任何可用服務(wù)器回答,這十分適合云計(jì)算之類(lèi)的環(huán)境。客戶(hù)端可以緩存數(shù)據(jù)以改進(jìn)性能。

在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源。資源是一個(gè)有趣的概念實(shí)體,它向客戶(hù)端公開(kāi)。資源的例子有:應(yīng)用程序?qū)ο蟆?shù)據(jù)庫(kù)記錄、算法等等。每個(gè)資源都使用 URI (Universal Resource Identifier) 得到一個(gè)惟一的地址。所有資源都共享統(tǒng)一的界面,以便在客戶(hù)端和服務(wù)器之間傳輸狀態(tài)。使用的是標(biāo)準(zhǔn)的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是應(yīng)用程序狀態(tài)的引擎,資源表示通過(guò)超鏈接互聯(lián)。

另一個(gè)重要的 REST 原則是分層系統(tǒng),這表示組件無(wú)法了解它與之交互的中間層以外的組件。通過(guò)將系統(tǒng)知識(shí)限制在單個(gè)層,可以限制整個(gè)系統(tǒng)的復(fù)雜性,促進(jìn)了底層的獨(dú)立性。

當(dāng) REST 架構(gòu)的約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)可以擴(kuò)展到大量客戶(hù)端的應(yīng)用程序。它還降低了客戶(hù)端和服務(wù)器之間的交互延遲。統(tǒng)一界面簡(jiǎn)化了整個(gè)系統(tǒng)架構(gòu),改進(jìn)了子系統(tǒng)之間交互的可見(jiàn)性。REST 簡(jiǎn)化了客戶(hù)端和服務(wù)器的實(shí)現(xiàn)。

REST 對(duì)比 RPC 

了解了什么是什么是REST,我們?cè)倏纯碦ESTful的實(shí)現(xiàn)。最近,使用 RPC 樣式架構(gòu)構(gòu)建的基于 SOAP 的 Web 服務(wù)成為實(shí)現(xiàn) SOA 最常用的方法。RPC 樣式的 Web 服務(wù)客戶(hù)端將一個(gè)裝滿(mǎn)數(shù)據(jù)的信封(包括方法和參數(shù)信息)通過(guò) HTTP 發(fā)送到服務(wù)器。服務(wù)器打開(kāi)信封并使用傳入?yún)?shù)執(zhí)行指定的方法。方法的結(jié)果打包到一個(gè)信封并作為響應(yīng)發(fā)回客戶(hù)端。客戶(hù)端收到響應(yīng)并打開(kāi)信封。每個(gè)對(duì)象都有自己獨(dú)特的方法以及僅公開(kāi)一個(gè) URI 的 RPC 樣式 Web 服務(wù),URI 表示單個(gè)端點(diǎn)。它忽略 HTTP 的大部分特性且僅支持 POST 方法。

由于輕量級(jí)以及通過(guò) HTTP 直接傳輸數(shù)據(jù)的特性,Web 服務(wù)的 RESTful 方法已經(jīng)成為最常見(jiàn)的替代方法??梢允褂酶鞣N語(yǔ)言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])實(shí)現(xiàn)客戶(hù)端。RESTful Web 服務(wù)通??梢酝ㄟ^(guò)自動(dòng)客戶(hù)端或代表用戶(hù)的應(yīng)用程序訪(fǎng)問(wèn)。但是,這種服務(wù)的簡(jiǎn)便性讓用戶(hù)能夠與之直接交互,使用它們的 Web 瀏覽器構(gòu)建一個(gè) GET URL 并讀取返回的內(nèi)容。

在 REST 樣式的 Web 服務(wù)中,每個(gè)資源都有一個(gè)地址。資源本身都是方法調(diào)用的目標(biāo),方法列表對(duì)所有資源都是一樣的。這些方法都是標(biāo)準(zhǔn)方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。

在 RPC 樣式的架構(gòu)中,關(guān)注點(diǎn)在于方法,而在 REST 樣式的架構(gòu)中,關(guān)注點(diǎn)在于資源 —— 將使用標(biāo)準(zhǔn)方法檢索并操作信息片段(使用表示的形式)。資源表示形式在表示形式中使用超鏈接互聯(lián)。

Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術(shù)語(yǔ) REST-RPC 混合架構(gòu)。REST-RPC 混合 Web 服務(wù)不使用信封包裝方法、參數(shù)和數(shù)據(jù),而是直接通過(guò) HTTP 傳輸數(shù)據(jù),這與 REST 樣式的 Web 服務(wù)是類(lèi)似的。但是它不使用標(biāo)準(zhǔn)的 HTTP 方法操作資源。它在 HTTP 請(qǐng)求的 URI 部分存儲(chǔ)方法信息。好幾個(gè)知名的 Web 服務(wù),比如 Yahoo 的 Flickr API 和 del.icio.us API 都使用這種混合架構(gòu)。

RESTful的實(shí)現(xiàn):

RESTful Web 服務(wù)的 Java 框架

有兩個(gè) Java 框架可以幫助構(gòu)建 RESTful Web 服務(wù)。erome Louvel 和 Dave Pawson 開(kāi)發(fā)的 Restlet(見(jiàn) 參考資料)是輕量級(jí)的。它實(shí)現(xiàn)針對(duì)各種 RESTful 系統(tǒng)的資源、表示、連接器和媒體類(lèi)型之類(lèi)的概念,包括 Web 服務(wù)。在 Restlet 框架中,客戶(hù)端和服務(wù)器都是組件。組件通過(guò)連接器互相通信。該框架最重要的類(lèi)是抽象類(lèi) Uniform 及其具體的子類(lèi) Restlet,該類(lèi)的子類(lèi)是專(zhuān)用類(lèi),比如 Application、Filter、Finder、Router 和 Route。這些子類(lèi)能夠一起處理驗(yàn)證、過(guò)濾、安全、數(shù)據(jù)轉(zhuǎn)換以及將傳入請(qǐng)求路由到相應(yīng)資源等操作。Resource 類(lèi)生成客戶(hù)端的表示形式。

JSR-311是 Sun Microsystems 的規(guī)范,可以為開(kāi)發(fā) RESTful Web 服務(wù)定義一組 Java API。Jersey是對(duì) JSR-311 的參考實(shí)現(xiàn)。

JSR-311 提供一組注釋?zhuān)嚓P(guān)類(lèi)和接口都可以用來(lái)將 Java 對(duì)象作為 Web 資源展示。該規(guī)范假定 HTTP 是底層網(wǎng)絡(luò)協(xié)議。它使用注釋提供 URI 和相應(yīng)資源類(lèi)之間的清晰映射,以及 HTTP 方法與 Java 對(duì)象方法之間的映射。API 支持廣泛的 HTTP 實(shí)體內(nèi)容類(lèi)型,包括 HTML、XML、JSON、GIF、JPG 等。它還將提供所需的插件功能,以允許使用標(biāo)準(zhǔn)方法通過(guò)應(yīng)用程序添加其他類(lèi)型。

構(gòu)建 RESTful Web 服務(wù)的多層架構(gòu)

RESTful Web 服務(wù)和動(dòng)態(tài) Web 應(yīng)用程序在許多方面都是類(lèi)似的。有時(shí)它們提供相同或非常類(lèi)似的數(shù)據(jù)和函數(shù),盡管客戶(hù)端的種類(lèi)不同。例如,在線(xiàn)電子商務(wù)分類(lèi)網(wǎng)站為用戶(hù)提供一個(gè)瀏覽器界面,用于搜索、查看和訂購(gòu)產(chǎn)品。如果還提供 Web 服務(wù)供公司、零售商甚至個(gè)人能夠自動(dòng)訂購(gòu)產(chǎn)品,它將非常有用。與大部分動(dòng)態(tài) Web 應(yīng)用程序一樣,Web 服務(wù)可以從多層架構(gòu)的關(guān)注點(diǎn)分離中受益。業(yè)務(wù)邏輯和數(shù)據(jù)可以由自動(dòng)客戶(hù)端和 GUI 客戶(hù)端共享。惟一的不同點(diǎn)在于客戶(hù)端的本質(zhì)和中間層的表示層。此外,從數(shù)據(jù)訪(fǎng)問(wèn)中分離業(yè)務(wù)邏輯可實(shí)現(xiàn)數(shù)據(jù)庫(kù)獨(dú)立性,并為各種類(lèi)型的數(shù)據(jù)存儲(chǔ)提供插件能力。

圖中展示了自動(dòng)化客戶(hù)端,包括 Java 和各種語(yǔ)言編寫(xiě)的腳本,這些語(yǔ)言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。在瀏覽器中運(yùn)行且作為 RESTful Web 服務(wù)消費(fèi)者運(yùn)行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬于此列,因?yàn)樗鼈兌即碛脩?hù)以自動(dòng)化樣式運(yùn)行。自動(dòng)化 Web 服務(wù)客戶(hù)端在 Web 層向 Resource Request Handler 發(fā)送 HTTP 響應(yīng)??蛻?hù)端的無(wú)狀態(tài)請(qǐng)求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應(yīng)操作。每個(gè)請(qǐng)求都包含所有必需的信息,包括 Resource Request Handler 用來(lái)處理請(qǐng)求的憑據(jù)。

從 Web 服務(wù)客戶(hù)端收到請(qǐng)求之后,Resource Request Handler 從業(yè)務(wù)邏輯層請(qǐng)求服務(wù)。Resource Request Handler 確定所有概念性的實(shí)體,系統(tǒng)將這些實(shí)體作為資源公開(kāi),并為每個(gè)資源分配一個(gè)惟一的 URI。但是,概念性的實(shí)體在該層是不存在的。它們存在于業(yè)務(wù)邏輯層。可以使用 Jersey 或其他框架(比如 Restlet)實(shí)現(xiàn) Resource Request Handler,它應(yīng)該是輕量級(jí)的,將大量職責(zé)工作委托給業(yè)務(wù)層。

Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補(bǔ)充的。它們都可以利用大量 Web 技術(shù)和標(biāo)準(zhǔn),比如 HTML、JavaScript、瀏覽器對(duì)象、XML/JSON 和 HTTP。當(dāng)然也不需要購(gòu)買(mǎi)、安裝或配置任何主要組件來(lái)支持 Ajax 前端和 RESTful Web 服務(wù)之間的交互。RESTful Web 服務(wù)為 Ajax 提供了非常簡(jiǎn)單的 API 來(lái)處理服務(wù)器上資源之間的交互。

 Web 瀏覽器客戶(hù)端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能。Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子)。它從瀏覽器接受請(qǐng)求,從業(yè)務(wù)邏輯層請(qǐng)求服務(wù),生成表示并對(duì)瀏覽器做出響應(yīng)。表示供用戶(hù)在瀏覽器中顯示使用。表示不僅包含內(nèi)容,還包含顯示的屬性,比如 HTML 和 CSS。

業(yè)務(wù)規(guī)則可以集中到業(yè)務(wù)邏輯層,該層充當(dāng)表示層和數(shù)據(jù)訪(fǎng)問(wèn)層之間的數(shù)據(jù)交換的中間層。數(shù)據(jù)以域?qū)ο蠡蛑祵?duì)象的形式提供給表示層。從業(yè)務(wù)邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助于促進(jìn)代碼重用,并能實(shí)現(xiàn)靈活和可擴(kuò)展的架構(gòu)。此外,由于將來(lái)可以使用新的 REST 和 MVC 框架,實(shí)現(xiàn)它們變得更加容易,無(wú)需重寫(xiě)業(yè)務(wù)邏輯層。

數(shù)據(jù)訪(fǎng)問(wèn)層提供與數(shù)據(jù)存儲(chǔ)層的交互,可以使用 DAO 設(shè)計(jì)模式或者對(duì)象-關(guān)系映射解決方案(如 Hibernate、OJB 或 iBATIS)實(shí)現(xiàn)。作為替代方案,業(yè)務(wù)層和數(shù)據(jù)訪(fǎng)問(wèn)層中的組件可以實(shí)現(xiàn)為 EJB 組件,并取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務(wù)和資源配置。但是,這需要一個(gè)遵從 Java EE 的應(yīng)用服務(wù)器(比如 JBoss),并且可能無(wú)法處理 Tomcat。該層的作用在于針對(duì)不同的數(shù)據(jù)存儲(chǔ)技術(shù),從業(yè)務(wù)邏輯中分離數(shù)據(jù)訪(fǎng)問(wèn)代碼。數(shù)據(jù)訪(fǎng)問(wèn)層還可以作為連接其他系統(tǒng)的集成點(diǎn),可以成為其他 Web 服務(wù)的客戶(hù)端。

數(shù)據(jù)存儲(chǔ)層包括數(shù)據(jù)庫(kù)系統(tǒng)、LDAP 服務(wù)器、文件系統(tǒng)和企業(yè)信息系統(tǒng)(包括遺留系統(tǒng)、事務(wù)處理系統(tǒng)和企業(yè)資源規(guī)劃系統(tǒng))。使用該架構(gòu),您可以開(kāi)始看到 RESTful Web 服務(wù)的力量,它可以靈活地成為任何企業(yè)數(shù)據(jù)存儲(chǔ)的統(tǒng)一 API,從而向以用戶(hù)為中心的 Web 應(yīng)用程序公開(kāi)垂直數(shù)據(jù),并自動(dòng)化批量報(bào)告腳本。

什么是REST:

REST 描述了一個(gè)架構(gòu)樣式的互聯(lián)系統(tǒng)(如 Web 應(yīng)用程序)。REST 約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)簡(jiǎn)單、可擴(kuò)展、有效、安全、可靠的架構(gòu)。由于它簡(jiǎn)便、輕量級(jí)以及通過(guò) HTTP 直接傳輸數(shù)據(jù)的特性,RESTful Web 服務(wù)成為基于 SOAP 服務(wù)的一個(gè)最有前途的替代方案。用于 web 服務(wù)和動(dòng)態(tài) Web 應(yīng)用程序的多層架構(gòu)可以實(shí)現(xiàn)可重用性、簡(jiǎn)單性、可擴(kuò)展性和組件可響應(yīng)性的清晰分離。Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補(bǔ)充的。開(kāi)發(fā)人員可以輕松使用 Ajax 和 RESTful Web 服務(wù)一起創(chuàng)建豐富的界面。

以上就是REST架構(gòu)及RESTful應(yīng)用程序簡(jiǎn)介的詳細(xì)內(nèi)容,更多關(guān)于REST及RESTful的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java微服務(wù)間接口調(diào)用 feign

    Java微服務(wù)間接口調(diào)用 feign

    這篇文章主要介紹了微服務(wù)間的接口調(diào)用feign,F(xiàn)eign是一種聲明式、模板化的HTTP客戶(hù)端。在spring cloud中使用Feign,可以做到類(lèi)似于普通的接口的請(qǐng)求調(diào)用,感興趣的小伙伴可以參考閱讀
    2023-03-03
  • spring5 webclient使用指南詳解

    spring5 webclient使用指南詳解

    本篇文章主要介紹了spring 5 webclient使用指南詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • java解析json數(shù)組方式

    java解析json數(shù)組方式

    這篇文章主要介紹了java解析json數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 一文徹底弄懂spring?boot自動(dòng)配置的過(guò)程(推薦)

    一文徹底弄懂spring?boot自動(dòng)配置的過(guò)程(推薦)

    SpringBoot的自動(dòng)配置機(jī)制通過(guò)@SpringBootApplication注解作為起點(diǎn),結(jié)合@EnableAutoConfiguration和spring.factories文件,實(shí)現(xiàn)了基于類(lèi)路徑依賴(lài)、環(huán)境配置和自定義代碼的智能化配置,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • java如何根據(jù)IP獲取當(dāng)前區(qū)域天氣信息詳解

    java如何根據(jù)IP獲取當(dāng)前區(qū)域天氣信息詳解

    根據(jù)IP自動(dòng)獲取當(dāng)?shù)氐奶鞖忸A(yù)報(bào)信息這個(gè)功能大家應(yīng)該都遇到過(guò),天氣預(yù)報(bào)信息用途非常廣泛,篇文章主要給大家介紹了關(guān)于java如何根據(jù)IP獲取當(dāng)前區(qū)域天氣信息的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Spring實(shí)現(xiàn)動(dòng)態(tài)修改時(shí)間參數(shù)并手動(dòng)開(kāi)啟關(guān)停操作

    Spring實(shí)現(xiàn)動(dòng)態(tài)修改時(shí)間參數(shù)并手動(dòng)開(kāi)啟關(guān)停操作

    spring實(shí)現(xiàn)定時(shí)任務(wù)的方式有三種,分別是java自帶的timer類(lèi)、spring task和quartz三種。本文只介紹spring自帶的task和第三方quartz,感興趣的朋友參考下吧
    2017-09-09
  • 了解Java線(xiàn)程池創(chuàng)建過(guò)程

    了解Java線(xiàn)程池創(chuàng)建過(guò)程

    那么有沒(méi)有一種辦法使得線(xiàn)程可以復(fù)用,就是執(zhí)行完一個(gè)任務(wù),并不被銷(xiāo)毀,而是可以繼續(xù)執(zhí)行其他的任務(wù)?在Java中可以通過(guò)線(xiàn)程池來(lái)達(dá)到這樣的效果。下面我們來(lái)詳細(xì)了解一下吧
    2019-05-05
  • Mybatis如何自動(dòng)生成數(shù)據(jù)庫(kù)表結(jié)構(gòu)總結(jié)

    Mybatis如何自動(dòng)生成數(shù)據(jù)庫(kù)表結(jié)構(gòu)總結(jié)

    這篇文章主要給大家介紹了關(guān)于Mybatis如何自動(dòng)生成數(shù)據(jù)庫(kù)表結(jié)構(gòu)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 解決@RequestMapping和@FeignClient放在同一個(gè)接口上遇到的坑

    解決@RequestMapping和@FeignClient放在同一個(gè)接口上遇到的坑

    這篇文章主要介紹了解決@RequestMapping和@FeignClient放在同一個(gè)接口上遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java實(shí)現(xiàn)快速將HTML表格轉(zhuǎn)換成Excel

    Java實(shí)現(xiàn)快速將HTML表格轉(zhuǎn)換成Excel

    這篇文章主要為大家詳細(xì)介紹一種使用Java的快速將Web中表格轉(zhuǎn)換成Excel的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05

最新評(píng)論

乳源| 萨迦县| 峨眉山市| 鲜城| 克东县| 甘孜县| 新宁县| 微博| 固始县| 万全县| 镇坪县| 尤溪县| 天等县| 潼南县| 平谷区| 陆良县| 阳山县| 加查县| 金堂县| 黑山县| 东城区| 微山县| 泰宁县| 江津市| 汉沽区| 黑河市| 徐水县| 西林县| 龙南县| 辽源市| 安西县| 方城县| 苗栗县| 太康县| 革吉县| 龙井市| 阿拉尔市| 陆河县| 舟山市| 合水县| 屯门区|