Rest、Restful和Jersey

1、什么是REST?

REST不是"rest"这个单词

Representational State Transfer 直接翻译:表现层状态转移

找到的一种最好理解的说法是:URL定位资源,用HTTP动词ET,POST,DELETE,DETC)描述操作

Resource:资源,即数据。
Representational
:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer
:状态变化。通过HTTP动词实现。

1,资源:资源就是网络上的一个实体,一段文本,一张图片等。资源总是要通过一种载体来反应它的内容。文本可以用TXT,也可以用HTML或者XML、图片可以用JPG格式或者PNG格式,JSON是现在最常用的资源表现形式。

2,统一接口。RESTful风格的数据元操CRUD(create,read,update,delete)分别对应HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口。

3,URI。可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源访问它的URI就可以,因此URI就成了每一个资源的地址或识别符。一般的,每个资源至少有一个URI与之对应,最典型的URI就是URL。

4,无状态。所谓无状态即所有的资源都可以URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而变化。如果输入一个URL就可以得到指定员工的工资,则这种情况就是无状态的,由一个URL与之对应可以通过HTTP动词方法得到资源,这就是典型的RESTful风格。

REST原则:

   <1>网络上的所有事物都被抽象为资源

扫描二维码关注公众号,回复: 1918338 查看本文章

   <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架构设计的APIRESTful 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。

    1. package com.shewo.eshop.model;
    2. import javax.xml.bind.annotation.XmlRootElement;
    3. @XmlRootElement
    4. public class User {
    5. private String firstName = "";
    6. public String getFirstName(){
    7. return this.firstName;
    8. }
    9. public void setFirstName(String firstName){
    10. this.firstName = firstName;
    11. }
    12. private String lastName = "";
    13. public String getLastName(){
    14. return this.lastName;
    15. }
    16. public void setLastName(String lastName){
    17. this.lastName = lastName;
    18. }
    19. private int age = 0;
    20. public int getAge(){
    21. return this.age;
    22. }
    23. public void setAge(int age){
    24. this.age = age;
    25. }
    26. }


第五步:创建服务实现类——UserService。
  1. package com.shewo.eshop.restws;
  2. import javax.ws.rs.Path;
  3. import javax.ws.rs.GET;
  4. import javax.ws.rs.core.MediaType;
  5. import javax.ws.rs.Produces;
  6. import com.shewo.eshop.model.*;
  7. @Path( "UserService")
  8. public class UserService {
  9. @GET
  10. @Path( "/getUser")
  11. @Produces(MediaType.APPLICATION_JSON)
  12. public User getUser() {
  13. User user = new User();
  14. user.setAge( 10);
  15. user.setFirstName( "Meili");
  16. user.setLastName( "Wang");
  17. return user;
  18. }
  19. }


第六步:配置 web.xml文件,添加基于Servlet的部署 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns= "http://xmlns.jcp.org/xml/ns/javaee"
  4. xsi:schemaLocation= "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5. id= "WebApp_ID" version= "3.1">
  6. <display-name>EShopRESTfulWS </display-name>
  7. <servlet>
  8. <servlet-name>User REST Service </servlet-name>
  9. <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class>
  10. <init-param>
  11. <param-name>com.sun.jersey.config.property.packages </param-name>
  12. <param-value>com.shewo.eshop.restws </param-value>
  13. </init-param>
  14. <load-on-startup>1 </load-on-startup>
  15. </servlet>
  16. <servlet-mapping>
  17. <servlet-name>User REST Service </servlet-name>
  18. <url-pattern>/rest/* </url-pattern>
  19. </servlet-mapping>
  20. </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 中的使用


猜你喜欢

转载自blog.csdn.net/qq_42402854/article/details/80946054