RESTful Web服务是基于REST架构的Web服务。在REST架构一切都是一种资源。 RESTful Web服务是轻量级的,高度可扩展性和可维护性,并且非常常用于创建基于API的Web应用程序。
REST是什么 ?
REST表示代表性状态传输。REST是一种基于Web标准的架构,并使用HTTP协议进行数据通信。它围绕着资源,其中每一个组件是资源和一个资源是由一个共同的接口,使用HTTP的标准方法获得。REST最初是由Roy Fielding在2000年推出。
在REST架构中,REST服务器只是提供的资源以及在REST客户端访问时提供资源。这里每个资源由URI标识/全局标识。REST采用各种申述表示类似文本,JSON和XML资源。现在JSON是Web服务所使用的最流行的格式。
HTTP 方法
下列著名的HTTP方法是常用于基于REST的架构。
GET - 提供的资源的只读访问。
PUT - 用于创建一个新的资源。
DELETE - 用于删除资源。
POST - 用于更新现有资源或创建新的资源。
OPTIONS - 用于得到支持的操作上的资源。
RESTful Web服务
Web服务是用于交换应用程序或系统之间的数据开放的协议和标准的集合。编写各种编程语言和运行在不同平台上的软件应用程序可以使用Web服务来以类似于进程间通信在单台计算机上的方式通过计算机网络进行交换数据,如因特网。 这份互联特性(如Java和Python,或Windows和Linux应用程序之间),是由于使用开放标准。
基于REST架构的Web服务称为RESTful web服务。这些Web服务使用HTTP方法来实现REST架构的概念。RESTful Web服务通常定义URI,统一资源标识符的服务,提供资源的表示,如JSON,并设置HTTP方法。
创建RESTful Web服务
本教程将创建一个Web服务使用以下用户管理功能:
Sr. No. | HTTP 方法 | URI | 操作 | 操作类型 |
---|---|---|---|---|
1 | GET | /UserService/users | 获取用户列表 | 只读 |
2 | GET | /UserService/users/1 | 读取用户ID为1用户信息 | 只读 |
3 | PUT | /UserService/users/2 | 插入Id为2的用户信息 | 等幂 |
4 | POST | /UserService/users/2 | 更新Id为2的用户信息 | N/A |
5 | DELETE | /UserService/users/1 | 删除Id为1的用户信息 | 等幂 |
6 | OPTIONS | /UserService/users | 列出Web服务支持的操作 | 只读 |
让我们使用Jersey框架开始编写实际的RESTful web服务。 在开始使用Jersey框架编写第一个例子,必须确保设置环境REST Web服务正常。我也假设你有一点点的使用Eclipse IDE工作的经验。
因此,让我们继续编写一个简单的应用程序Jersey将公开一个Web服务方法来显示用户列表。
第1步 - 创建Java项目:
第一步是创建使用Eclipse IDE动态Web项目。按照选项 File -> New -> Project 并最后选择 Dynamic Web Project 从向导列表向导。现在使用的向导窗口如下项目命名为UserManagement:
一旦项目成功创建,目录结构在 Project Explorer:
第2步 - 添加必需的库:
第二步,让我们在项目中添加Jersey框架和它的依赖(库)。复制所有jar文件在下载ZIP的jersey文件夹的目录下面的所有文件到项目的WEB-INF/ lib目录下。
\jaxrs-ri-2.17\jaxrs-ri\api
\jaxrs-ri-2.17\jaxrs-ri\ext
\jaxrs-ri-2.17\jaxrs-ri\lib
现在,右键点击你的项目名称用户管理,然后按照下面选项中的上下文菜单: Build Path -> Configure Build Path 显示Java构建路径窗口。
现在,使用添加JAR文件可用按钮下的库选项卡,添加JAR文件到WEB-INF/lib目录下。
第3步 - 创建源文件:
现在,让我们在UserManagement 项目中创建实际的源文件。首先,我们需要创建一个名为包 com.yiibai. 要做到这一点,右键单击src在包资源管理部分并按照选项: New -> Package.
下一步,我们将创建 User.java, UserDao.java, 和 UserService.java 文件在 com.yiibai 包下.
File - User.java
package com.yiibai; import java.io.Serializable; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "user")
public class User implements Serializable { private static final long serialVersionUID = 1L;
private int id;
private String name;
private String profession; public User(){} public User(int id, String name, String profession){
this.id = id;
this.name = name;
this.profession = profession;
} public int getId() {
return id;
} @XmlElement
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public String getProfession() {
return profession;
}
@XmlElement
public void setProfession(String profession) {
this.profession = profession;
}
}
File - UserDao.java
下面的程序已经被硬编码为显示列出来的用户的功能。在这里,可以实现所需的业务逻辑,你可能读取用户,或从数据库及任何其他资源所需的数据。
package com.yiibai; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List; public class UserDao {
public List<User> getAllUsers(){
List<User> userList = null;
try {
File file = new File("Users.dat");
if (!file.exists()) {
User user = new User(1, "Mahesh", "Teacher");
userList = new ArrayList<User>();
userList.add(user);
saveUserList(userList);
}
else{
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
userList = (List<User>) ois.readObject();
ois.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return userList;
}
}
File - UserService.java
package com.yiibai; import java.util.List; import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; @Path("/UserService")
public class UserService { UserDao userDao = new UserDao(); @GET
@Path("/users")
@Produces(MediaType.APPLICATION_XML)
public List<User> getUsers(){
return userDao.getAllUsers();
}
}
有以下两个要点需要注意下面的主程序,UserService.java:
第一步是指定用于使用@Path注释到UserService的Web服务的路径。
第二个步骤是,以指定用于使用@Path注释到UserService的方法的特定web服务方法的路径。
第4步 - 创建web.xml配置文件:
需要创建一个Web XML配置文件,该文件是一个XML文件,用于指定Jersey框架的servlet应用。
File - web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>User Management</display-name>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.yiibai</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
第5步 - 部署程序
一旦你使用创建源和Web配置文件完成,这一步是准备好编译和运行程序。要做到这一点,使用Eclipse,导出您的应用程序为war文件,并部署在Tomcat中。 要使用eclipse创建WAR文件,按照选项 File -> export -> Web > War File 最后选择项目UserManagement和目标文件夹。 要在Tomcat部署WAR文件,将用户Management.war在Tomcat的安装目录 > webapps 目录并启动Tomcat。
第6步 - 运行程序
我们使用Postman,一个Chrome扩展来测试Web服务。
提出一个请求到UserManagement,让所有的用户列表。http://localhost:8080/UserManagement/rest/UserService/users POSTMAN使用GET请求,看看下面的结果。
恭喜你,已经创建了第一个基于REST的应用成功。此外,让我们开始做一些更有趣事情在接下来的几章。