本文目錄一覽:
- 1、如何使用RestTemplate訪問restful服務
- 2、如何在Java中 提供 RESTful Web 服務
- 3、REST是什麼?如何實現RESTful?
- 4、java怎麼做restful介面
- 5、如何在Java客戶端調用RESTful服務
如何使用RestTemplate訪問restful服務
一. 什麼是RestTemplate
傳統情況下在Java代碼里訪問restful服務,一般使用Apache的HttpClient。不過此種方法使用起來太過繁瑣。spring提供了一種簡單便捷的模板類來進行操作,這就是RestTemplate。
二、舉個例子。 //請求地址
String url = “”;
//入參
RequestBean requestBean = new RequestBean();
requestBean.setTest1(“1”);
requestBean.setTest2(“2”);
requestBean.setTest3(“3”);
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
從這個例子可以看出,使用restTemplate訪問restful介面非常的簡單粗暴無腦。(url,
requestMap, ResponseBean.class)這三個參數分別代表 請求地址、請求參數、HTTP響應轉換被轉換成的對象類型。
RestTemplate方法的名稱遵循命名約定,第一部分指出正在調用什麼HTTP方法,第二部分指示返回的內容。本例中調用了restTemplate.postForObject方法,post指調用了HTTP的post方法,Object指將HTTP響應轉換為您選擇的對象類型。
三.手動指定轉換器(HttpMessageConverter)
我們知道,調用reseful介面傳遞的數據內容是json格式的字元串,返回的響應也是json格式的字元串。然而restTemplate.postForObject方法的請求參數RequestBean和返回參數ResponseBean卻都是java類。是RestTemplate通過HttpMessageConverter自動幫我們做了轉換的操作。
默認情況下RestTemplate自動幫我們註冊了一組HttpMessageConverter用來處理一些不同的contentType的請求。
如StringHttpMessageConverter來處理text/plain;MappingJackson2HttpMessageConverter來處理application/json;MappingJackson2XmlHttpMessageConverter來處理application/xml。
你可以在org.springframework.http.converter包下找到所有spring幫我們實現好的轉換器。
如果現有的轉換器不能滿足你的需求,你還可以實現org.springframework.http.converter.HttpMessageConverter介面自己寫一個。
四.設置底層連接方式
要創建一個RestTemplate的實例,您可以簡單地調用默認的無參數構造函數。這將使用java.NET包中的標準Java類作為底層實現來創建HTTP請求。
但很多時候我們需要像傳統的HttpClient那樣設置HTTP請求的一些屬性。RestTemplate使用了一種很偷懶的方式實現了這個需求,那就是直接使用一個HttpClient作為底層實現……
五.設置攔截器(ClientHttpRequestInterceptor)
有時候我們需要對請求做一些通用的攔截設置,這就可以使用攔截器進行處理。攔截器需要我們實現org.springframework.http.client.ClientHttpRequestInterceptor介面自己寫。
以上是如何使用RestTemplate方便快捷的訪問restful介面。其實RestTemplate的功能非常強大
如何在Java中 提供 RESTful Web 服務
通過REST風格體系架構,請求和響應都是基於資源表示的傳輸來構建的。資源是通過全局ID來標識的,這些ID一般使用的是一個統一資源標識符(URI)。客戶端應用使用HTTP方法(如,GET、POST、PUT或DELETE)來操作一個或多個資源。通常,GET是用於獲取或列出一個或多個資源,POST用於創建,PUT用於更新或替換,而DELETE則用於刪除資源。
例如,GET http //host/context/employees/12345將獲取ID為12345的員工的表示。這個響應表示可以是包含詳細的員工信息的XML或ATOM,或者是具有更好UI的JSP/HTML頁面。您看到哪種表示方式取決於伺服器端實現和您的客戶端請求的MIME類型。
RESTful Web Service是一個使用HTTP和REST原理實現的Web Service。通常,一個RESTful Web Service將定義基本資源URI、它所支持的表示/響應MIME,以及它所支持的操作。
本文將介紹如何使用Spring創建Java實現的伺服器端RESTful Web Services。這個例子將使用瀏覽器、curl和Firefox插件RESTClient作為發出請求的客戶端。
本文假定您是熟悉REST基本知識的。
Spring 3的REST支持
在Spring框架支持REST之前,人們會使用其他幾種實現技術來創建Java RESTful Web Services,如Restlet、RestEasy和Jersey。Jersey是其中最值得注意的,它是JAX-RS(JSR 311)的參考實現。
Spring是一個得到廣泛應用的Java EE框架,它在版本3以後就增加了RESTful Web Services開發的支持。雖然,對REST的支持並不是JAX-RS的一種實現,但是它具有比標準定義更多的特性。REST支持被無縫整合到Spring的MVC層,它可以很容易應用到使用Spring構建的應用中。
Spring REST支持的主要特性包括:
注釋,如@RequestMapping 和 @PathVariable,支持資源標識和URL映射
ContentNegotiatingViewResolver支持為不同的MIME/內容類型使用不同的表示方式
使用相似的編程模型無縫地整合到原始的 MVC 層
創建一個示例RESTful Web Service
本節中的例子將演示Spring 3環境的創建過程,並創建一個可以部署到Tomcat中的「Hello World」應用。然後我們再完成一個更複雜的應用來了解Spring 3 REST支持的重要概念,如多種MIME類型表示支持和JAXB支持。另外,本文還使用一些代碼片斷來幫助理解這些概念。
Hello World:使用Spring 3 REST支持
要創建這個例子所使用的開發環境,您需要:
IDE:Eclipse IDE for JEE (v3.4+)
Java SE5 以上
Web 容器:Apache Tomcat 6.0(Jetty或其他容器也可)
Spring 3框架(v3.0.3是本文編寫時的最新版本)
其他程序庫:JAXB 2、JSTL、commons-logging
在 Eclipse 中創建一個Web應用,然後設置Tomcat 6作為它的運行環境。然後,您需要設置web.xml文件來激活Spring
WebApplicationContext。這個例子將Spring bean配置分成兩個文件:rest-servlet.xml 包含與MVC/REST有關的配置,rest-context.xml包含服務級別的配置(如數據源 beans)。清單 1 顯示了web.xml中的Spring配置的部分。
清單 1. 在web.xml中激活Spring WebApplicationContext
以下是引用片段:
contextConfigLocation
/WEB-INF/rest-context.xml
!– This listener will load other application context file in addition to
rest-servlet.xml —
org.springframework.web.context.ContextLoaderListener
rest
org.springframework.web.servlet.DispatcherServlet
1
rest
/service/*
在rest-servlet.xml文件中創建Spring MVC的相關配置(Controller、View、View Resolver)。清單 2 顯示了其中最重要的部分。
清單 2. 在rest-servlet.xml文件中創建Spring MVC配置
以下是引用片段:
bean class=”org.springframework.web.servlet.mvc.annotation
.DefaultAnnotationHandlerMapping” /
bean class=”org.springframework.web.servlet.mvc.annotation
.AnnotationMethodHandlerAdapter” /
bean id=”jaxbMarshaller”
class=”org.springframework.oxm.jaxb.Jaxb2Marshaller”
dw.spring3.rest.bean.Employee
dw.spring3.rest.bean.EmployeeList
bean id=”employees” class=
“org.springframework.web.servlet.view.xml.MarshallingView”
bean id=”viewResolver” class=
“org.springframework.web.servlet.view.BeanNameViewResolver” /
上面的代碼中:
Component-scan啟用對帶有Spring注釋的類進行自動掃描,在實踐中,它將檢查控制器類中所定義的@Controller注釋。
DefaultAnnotationHanlderMappings和AnnotationMethodHandlerAdapter使用@ReqeustMapping注釋的類或函數的beans由Spring處理這個注釋將在下一節進行詳細介紹。
Jaxb2Mashaller定義使用JAXB 2進行對象XML映射(OXM)的編組器(marshaller)和解組器(unmarshaller )
MashallingView定義一個使用Jaxb2Mashaller的XML表示view
BeanNameViewResolver使用用戶指定的bean名稱定義一個視圖解析器
本例將使用名為「employees」的MarshallingView。
這樣就完成了Spring的相關配置。下一步是編寫一個控制器來處理用戶請求。清單3顯示的是控制器類。
REST是什麼?如何實現RESTful?
REST (REpresentation State Transfer) 描述了一個架構樣式的網路系統,比如 web 應用程序。它首次出現在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規範的主要編寫者之一。REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。Web 應用程序最重要的 REST 原則是,客戶端和伺服器之間的交互在請求之間是無狀態的。從客戶端到伺服器的每個請求都必須包含理解請求所必需的信息。如果伺服器在請求之間的任何時間點重啟,客戶端不會得到通知。此外,無狀態請求可以由任何可用伺服器回答,這十分適合雲計算之類的環境。客戶端可以緩存數據以改進性能。在伺服器端,應用程序狀態和功能可以分為各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程序對象、資料庫記錄、演算法等等。每個資源都使用 URI (Universal Resource Identifier) 得到一個惟一的地址。所有資源都共享統一的界面,以便在客戶端和伺服器之間傳輸狀態。使用的是標準的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是應用程序狀態的引擎,資源表示通過超鏈接互聯。另一個重要的 REST 原則是分層系統,這表示組件無法了解它與之交互的中間層以外的組件。通過將系統知識限制在單個層,可以限制整個系統的複雜性,促進了底層的獨立性。當REST 架構的約束條件作為一個整體應用時,將生成一個可以擴展到大量客戶端的應用程序。它還降低了客戶端和伺服器之間的交互延遲。統一界面簡化了整個系統架構,改進了子系統之間交互的可見性。REST 簡化了客戶端和伺服器的實現。RESTful的實現:RESTful Web 服務與 RPC 樣式的 Web 服務了解了什麼是什麼是REST,我們再看看RESTful的實現。最近,使用 RPC 樣式架構構建的基於 SOAP 的 Web 服務成為實現 SOA 最常用的方法。RPC 樣式的 Web 服務客戶端將一個裝滿數據的信封(包括方法和參數信息)通過 HTTP 發送到伺服器。伺服器打開信封並使用傳入參數執行指定的方法。方法的結果打包到一個信封並作為響應發回客戶端。客戶端收到響應並打開信封。每個對象都有自己獨特的方法以及僅公開一個 URI 的 RPC 樣式 Web 服務,URI 表示單個端點。它忽略 HTTP 的大部分特性且僅支持 POST 方法。由於輕量級以及通過 HTTP 直接傳輸數據的特性,Web 服務的 RESTful 方法已經成為最常見的替代方法。可以使用各種語言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])實現客戶端。RESTful Web 服務通常可以通過自動客戶端或代表用戶的應用程序訪問。但是,這種服務的簡便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構建一個 GET URL 並讀取返回的內容。在REST 樣式的 Web 服務中,每個資源都有一個地址。資源本身都是方法調用的目標,方法列表對所有資源都是一樣的。這些方法都是標準方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。在RPC 樣式的架構中,關注點在於方法,而在 REST 樣式的架構中,關注點在於資源 —— 將使用標準方法檢索並操作信息片段(使用表示的形式)。資源表示形式在表示形式中使用超鏈接互聯。Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術語 REST-RPC 混合架構。REST-RPC 混合 Web 服務不使用信封包裝方法、參數和數據,而是直接通過 HTTP 傳輸數據,這與 REST 樣式的 Web 服務是類似的。但是它不使用標準的 HTTP 方法操作資源。它在 HTTP 請求的 URI 部分存儲方法信息。好幾個知名的 Web 服務,比如 Yahoo 的 Flickr API 和 del.icio.us API 都使用這種混合架構。RESTful的實現:RESTful Web 服務的 Java 框架有兩個 Java 框架可以幫助構建 RESTful Web 服務。erome Louvel 和 Dave Pawson 開發的 Restlet(見 參考資料)是輕量級的。它實現針對各種 RESTful 系統的資源、表示、連接器和媒體類型之類的概念,包括 Web 服務。在 Restlet 框架中,客戶端和伺服器都是組件。組件通過連接器互相通信。該框架最重要的類是抽象類 Uniform 及其具體的子類 Restlet,該類的子類是專用類,比如 Application、Filter、Finder、Router 和 Route。這些子類能夠一起處理驗證、過濾、安全、數據轉換以及將傳入請求路由到相應資源等操作。Resource 類生成客戶端的表示形式。JSR-311是 Sun Microsystems 的規範,可以為開發 RESTful Web 服務定義一組 Java API。Jersey是對 JSR-311 的參考實現。JSR-311 提供一組注釋,相關類和介面都可以用來將 Java 對象作為 Web 資源展示。該規範假定 HTTP 是底層網路協議。它使用注釋提供 URI 和相應資源類之間的清晰映射,以及 HTTP 方法與 Java 對象方法之間的映射。API 支持廣泛的 HTTP 實體內容類型,包括 HTML、XML、JSON、GIF、JPG 等。它還將提供所需的插件功能,以允許使用標準方法通過應用程序添加其他類型。RESTful的實現:構建 RESTful Web 服務的多層架構RESTful Web 服務和動態 Web 應用程序在許多方面都是類似的。有時它們提供相同或非常類似的數據和函數,儘管客戶端的種類不同。例如,在線電子商務分類網站為用戶提供一個瀏覽器界面,用於搜索、查看和訂購產品。如果還提供 Web 服務供公司、零售商甚至個人能夠自動訂購產品,它將非常有用。與大部分動態 Web 應用程序一樣,Web 服務可以從多層架構的關注點分離中受益。業務邏輯和數據可以由自動客戶端和 GUI 客戶端共享。惟一的不同點在於客戶端的本質和中間層的表示層。此外,從數據訪問中分離業務邏輯可實現資料庫獨立性,並為各種類型的數據存儲提供插件能力。圖1 展示了自動化客戶端,包括 Java 和各種語言編寫的腳本,這些語言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。在瀏覽器中運行且作為 RESTful Web 服務消費者運行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬於此列,因為它們都代表用戶以自動化樣式運行。自動化 Web 服務客戶端在 Web 層向 Resource Request Handler 發送 HTTP 響應。客戶端的無狀態請求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應操作。每個請求都包含所有必需的信息,包括 Resource Request Handler 用來處理請求的憑據。從Web 服務客戶端收到請求之後,Resource Request Handler 從業務邏輯層請求服務。Resource Request Handler 確定所有概念性的實體,系統將這些實體作為資源公開,並為每個資源分配一個惟一的 URI。但是,概念性的實體在該層是不存在的。它們存在於業務邏輯層。可以使用 Jersey 或其他框架(比如 Restlet)實現 Resource Request Handler,它應該是輕量級的,將大量職責工作委託給業務層。Ajax 和 RESTful Web 服務本質上是互為補充的。它們都可以利用大量 Web 技術和標準,比如 HTML、JavaScript、瀏覽器對象、XML/JSON 和 HTTP。當然也不需要購買、安裝或配置任何主要組件來支持 Ajax 前端和 RESTful Web 服務之間的交互。RESTful Web 服務為 Ajax 提供了非常簡單的 API 來處理伺服器上資源之間的交互。圖1 中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能。Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子)。它從瀏覽器接受請求,從業務邏輯層請求服務,生成表示並對瀏覽器做出響應。表示供用戶在瀏覽器中顯示使用。表示不僅包含內容,還包含顯示的屬性,比如 HTML 和 CSS。 業務規則可以集中到業務邏輯層,該層充當表示層和數據訪問層之間的數據交換的中間層。數據以域對象或值對象的形式提供給表示層。從業務邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助於促進代碼重用,並能實現靈活和可擴展的架構。此外,由於將來可以使用新的 REST 和 MVC 框架,實現它們變得更加容易,無需重寫業務邏輯層。數據訪問層提供與數據存儲層的交互,可以使用 DAO 設計模式或者對象-關係映射解決方案(如 Hibernate、OJB 或 iBATIS)實現。作為替代方案,業務層和數據訪問層中的組件可以實現為 EJB 組件,並取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務和資源配置。但是,這需要一個遵從 Java EE 的應用伺服器(比如 JBoss),並且可能無法處理 Tomcat。該層的作用在於針對不同的數據存儲技術,從業務邏輯中分離數據訪問代碼。數據訪問層還可以作為連接其他系統的集成點,可以成為其他 Web 服務的客戶端。數據存儲層包括資料庫系統、LDAP 伺服器、文件系統和企業信息系統(包括遺留系統、事務處理系統和企業資源規劃系統)。使用該架構,您可以開始看到 RESTful Web 服務的力量,它可以靈活地成為任何企業數據存儲的統一 API,從而向以用戶為中心的 Web 應用程序公開垂直數據,並自動化批量報告腳本。什麼是REST:結束語REST 描述了一個架構樣式的互聯繫統(如 Web 應用程序)。REST 約束條件作為一個整體應用時,將生成一個簡單、可擴展、有效、安全、可靠的架構。由於它簡便、輕量級以及通過 HTTP 直接傳輸數據的特性,RESTful Web 服務成為基於 SOAP 服務的一個最有前途的替代方案。用於 web 服務和動態 Web 應用程序的多層架構可以實現可重用性、簡單性、可擴展性和組件可響應性的清晰分離。Ajax 和 RESTful Web 服務本質上是互為補充的。
java怎麼做restful介面
一個好的RESTful API,應該具備以下特徵: 這個API應該是對瀏覽器友好的,能夠很好地融入Web,而不是與Web格格不入。 1.瀏覽器是最常見和最通用的REST客戶端。好的RESTful API應該能夠使用瀏覽器+HTML完成所有的測試(不需要使用編程語言)。
如何在Java客戶端調用RESTful服務
public static void main(String[] args) { Store store = new Store();// 準備參數 // 首先創建一個webservice客戶端,參數依次為:webservice的url, webservice的名稱, webservice的方法, 參數列表, 返回類型, 泛型的類型(不需要泛型就傳入null) WebserviceClient client = new WebserviceClient(“, “store”, “find”, new Object[] { store }, List.class, Store.class); ListStore list = client.execute();// 調用webservice System.out.println(“從伺服器返回” + list.size() + “個商品”);// 得到了服務端返回的數據 }
原創文章,作者:JSHE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131819.html