1、什麼是REST?
REST不是"rest"這個單詞
Representational State Transfer 直接翻譯:表現層狀态轉移,
找到的一種最好了解的說法是:URL定位資源,用HTTP動詞GET,POST,DELETE,DETC)描述操作。
Resource:資源,即資料。
Representational:某種表現形式,比如用JSON,XML,JPEG等;
State Transfer:狀态變化。通過HTTP動詞實作。
1,資源:資源就是網絡上的一個實體,一段文本,一張圖檔等。資源總是要通過一種載體來反應它的内容。文本可以用TXT,也可以用HTML或者XML、圖檔可以用JPG格式或者PNG格式,JSON是現在最常用的資源表現形式。
2,統一接口。RESTful風格的資料元操作CRUD(create,delete,update,read)分别對應HTTP方法:GET用來擷取資源,DELETE用來删除資源,這樣就統一了資料操作的接口,PUT用來更新資源,POST用來建立資源(也可以用于更新資源)。
3,URI。可以用一個URI(統一資源定位符)指向資源,即每個URI都對應一個特定的資源。要擷取這個資源通路它的URI就可以,是以URI就成了每一個資源的位址或識别符。一般的,每個資源至少有一個URI與之對應,最典型的URI就是URL。
4,無狀态。所謂無狀态即所有的資源都可以URI定位,而且這個定位與其他資源無關,也不會因為其他資源的變化而變化。如果輸入一個URL就可以得到指定員工的工資,則這種情況就是無狀态的,由一個URL與之對應可以通過HTTP動詞方法得到資源,這就是典型的RESTful風格。
REST原則:
<1>網絡上的所有事物都被抽象為資源
<2> 每個資源都有一個唯一的資源辨別符
<3> 同一個資源具有多種表現形式(xml,json等)
<4> 對資源的各種操作不會改變資源辨別符
<5> 所有的操作都是無狀态的
總結:REST是一種架構風格,REST 指的是一組架構限制條件和原則。滿足這些限制條件和原則的應用程式或設計就是RESTful。其核心是面向資源,REST專門針對網絡應用設計和開發方式,以降低開發的複雜性,提高系統的可伸縮性。
2、什麼是Restful?
restful: 遵守了rest原則的web服務
了解:rest與restful相比,多了一個ful,就英語層面來說是一個形容詞,restful翻譯為中文為: “rest式的”
是rest式的什麼呢?答案是:rest式的應用,rest風格的web服務也是rest式的應用,rest式的web服務是一種ROA(TheResource-Oriented Architecture)(面向資源的架構),ROA聽起來很高大上有沒有。。
兩者的聯系與差別
restful是由rest派生出來的。
restful用法:
在Restful之前的操作:
http://127.0.0.1/user/query/1 GET 根據使用者id查詢使用者資料
http://127.0.0.1/user/save POST 新增使用者
http://127.0.0.1/user/update POST 修改使用者資訊
http://127.0.0.1/user/delete GET/POST 删除使用者資訊
RESTful用法:
http://127.0.0.1/user/1 GET 根據使用者id查詢使用者資料
http://127.0.0.1/user POST 新增使用者
http://127.0.0.1/user PUT 修改使用者資訊
http://127.0.0.1/user DELETE 删除使用者資訊
之前的操作是沒有問題的,大神認為是有問題的,有什麼問題呢?你每次請求的接口或者位址,都在做描述,例如查詢的時候用了query,新增的時候用了save,其實完全沒有這個必要,我使用了get請求,就是查詢.使用post請求,就是新增的請求,我的意圖很明顯,完全沒有必要做描述,這就是為什麼有了restful.
符合REST架構設計的API是RESTful API.
資源類上的常用注解有:
@Path,标注資源類或者方法的相對路徑
@GET,@PUT,@POST,@DELETE,标注方法是HTTP請求的類型。
@Produces,标注傳回的MIME媒體類型
@Consumes,标注可接受請求的MIME媒體類型
@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam
分别标注方法的參數來自于HTTP請求的不同位置,例如
@PathParam來自于URL的路徑,
@QueryParam來自于URL的查詢參數,
@HeaderParam來自于HTTP請求的頭資訊,
@CookieParam來自于HTTP請求的Cookie。
3、什麼是Jersey?
Jersey架包下載下傳: 點選打開連結
Jersey 是一個Java規範(JAX-RS)下的基于Rest風格(輕量級RESTful風格)的Web Service開發架構。
4. Eclipse+ Jersey 實作Restful 服務:
本人的環境如下:
- Eclipse
- Jersey-1.19
- Tomcat v8.0 Server
方法一:POJO支援
第一步:建立動态Web項目EShopRESTfulWS,依據如下圖所示過程操作,最後點選“Finish”。
第二步:右擊項目,選擇Import菜單,加載jersey中必要的包,最後點選“Finish”。本項目中使用jersey-1.19版本,下載下傳官方位址:https://jersey.java.net/download.html。
第三步:右擊WebContent\Web-INF\lib目錄下剛導入的Jersey包,選擇Import菜單項将包加入搜尋路徑中。
第四步:建立POJO類——User。
-
- package com.shewo.eshop.model;
- import javax.xml.bind.annotation.XmlRootElement;
- @XmlRootElement
- public class User {
- private String firstName = "";
- public String getFirstName(){
- return this.firstName;
- }
- public void setFirstName(String firstName){
- this.firstName = firstName;
- }
- private String lastName = "";
- public String getLastName(){
- return this.lastName;
- }
- public void setLastName(String lastName){
- this.lastName = lastName;
- }
- private int age = 0;
- public int getAge(){
- return this.age;
- }
- public void setAge(int age){
- this.age = age;
- }
- }
第五步:建立服務實作類——UserService。
- package com.shewo.eshop.restws;
- import javax.ws.rs.Path;
- import javax.ws.rs.GET;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.Produces;
- import com.shewo.eshop.model.*;
- @Path("UserService")
- public class UserService {
- @GET
- @Path("/getUser")
- @Produces(MediaType.APPLICATION_JSON)
- public User getUser() {
- User user = new User();
- user.setAge(10);
- user.setFirstName("Meili");
- user.setLastName("Wang");
- return user;
- }
- }
第六步:配置 web.xml檔案,添加基于Servlet的部署
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- id="WebApp_ID" version="3.1">
- <display-name>EShopRESTfulWS</display-name>
- <servlet>
- <servlet-name>User REST Service</servlet-name>
- <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.packages</param-name>
- <param-value>com.shewo.eshop.restws</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>User REST Service</servlet-name>
- <url-pattern>/rest/*</url-pattern>
- </servlet-mapping>
- </web-app>
完成上述步驟後,可以右擊項目,選擇:RunAs-Run On Server,選擇你所安裝的HTTPServer,這裡我用的是Tomcat v8.0 Server。如下圖:
點選“Finish”,運作Tomcat。這裡需要注意:在此之前,本機不能有其它Tomcat執行個體在運作,否則會由于大家預設端口都為8080,進而造成沖突。
Server啟動成功後,可以用如下URL測試:http://localhost:8080/EShopRESTfulWS/rest/UserService/getUser
網頁中出現如下結果表示系統運作正常:{"age":"10","firstName":"Meili","lastName":"Wang"}
URL說明:
參考文章:
Eclipse+Jersey實作RESTful服務
REST接口
Restful api 注釋: REST 在 Java 中的使用
RESTful API中跨域問題