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原则:
网络上的所有事物都被抽象为资源
每个资源都有一个唯一的资源标识符
同一个资源具有多种表现形式(xml,json等)
对资源的各种操作不会改变资源标识符
所有的操作都是无状态的
总结: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的部署
-
EShopRESTfulWS
-
User REST Service
-
com.sun.jersey.spi.container.servlet.ServletContainer
-
com.sun.jersey.config.property.packages
-
com.shewo.eshop.restws
-
1
-
User REST Service
-
/rest/*
完成上述步骤后,可以右击项目,选择: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中跨域问题