REST(REpresentational State Transfer):中文名称是表述性资源转移。
Rest是一种基于Web标准的架构,它使用HTTP协议进行数据之间的传输。Rest强调的是资源(而非行为---比如增删改查),那么如何访问这些资源呢?我们可以通过一组接口访问,而这组接口就是Http的标准方法(GET, POST, PUT, DELETE)。
在Rest架构中,Rest服务端仅仅提供访问资源的接口,而Rest客户端就可以访问这些资源。在这里每一个资源都被一组URI标识(URI仅仅表示资源,你不能在URI上体现出行为即如果你写了一个这样的uri,那么就错了:/system/user/user_addUI.action).Rest会使用不同的资源表述,注意不是资源,它强调的是资源表述,资源表述其实就是资源的表示形式,可以是Json格式的,Xml格式的或者是普通文本格式的。但是现在大多会用Json在前后端传输数据(这就是前后端分离开发,后端定义接口,通过json把这个接口,其实也就是java对象传递到前端,供前端使用,这样前后端只需关注他们自己的那一部分就行了)。
Http方法
下面就是一些常用的基于Rest架构的Http Method:
-
GET − 对资源的只读访问
-
PUT − 创建新资源
-
DELETE − 删除一个资源
-
POST − 更新一个已存在的资源或者是创建新资源
-
OPTIONS − 获取一个资源所支持的操作
Restful web service介绍
web service是一组开放的标准和协议---用来在不同的应用程序和系统中传输数据。而且,对于不同编程语言所编写的应用程序之间或者是不同的操作系统平台之间,我们也可以使用web service在因特网中传输数据---这有点像一台计算机上的进程间通信一样。而这种互操作性正是webservice使用了开放的标准。
基于Rest架构的Web Services 就称为Restful Web Services. 它使用Http方法去实现了Rest架构的基本理念.一个RESTful Web Service应用会:1)定义URI 2)提供资源表述(
RE
presentational):比如,json,xml。
创建Restful Web Service应用:
好!现在我们就来动手吧。那么在本教程中呢,我们创建一个名叫UserManagement 的Web Services应用。下面列出应用中会使用的方法:
序号 | HTTP Method | URI | 描述 | 操作类型 |
---|---|---|---|---|
1 | GET | /UserService/users | 列出所有User列表 | 只读 |
2 | GET | /UserService/users/1 | 获取id为1的User | 只读 |
3 | PUT | /UserService/users/2 | 插入id为2的User | 幂等 |
4 | POST | /UserService/users/2 | 更新id为2的User | N/A |
5 | DELETE | /UserService/users/1 | 删除id为1的User | 幂等 |
6 | OPTIONS | /UserService/users | 列出Web Services所支持的操作 | 只读 |
环境搭建
在本教程中我们使用Jersey框架搭建Restful Web services应用,使用Tomcat7服务器+MyEclipse 14。什么是Jersey框架?它就是一个JAX-RS(java api for restful web services 这是官方的javaEE标准)的标准实现。
1.下载最新的Jersey框架jar包:
https://jersey.java.net/download.html
下载完成后解压缩包,将会看到如下的目录结构:
2.tomcat,myeclipse,jdk的安装配置就不说了。
第一个Restful web services程序:
1.创建一个Dynamic web project工程
2.复制所有的jar包到/WEB-INF/lib中
\jaxrs-ri-2.17\jaxrs-ri\api
\jaxrs-ri-2.17\jaxrs-ri\ext
\jaxrs-ri-2.17\jaxrs-ri\lib
3.创建com.restful包
4.创建UserService.java, UserDao.java, User.java
User.java:
package com.restful;
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;
}
}
UserDao.java:
package com.restful;
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;
}
private void saveUserList(List<User> userList){
try {
File file = new File("Users.dat");
FileOutputStream fos;
fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(userList);
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
UserService.java
package com.restful;
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;
//为WebServceis指定Path
@Path("/UserService")
public class UserService {
UserDao userDao = new UserDao();
@GET
//为WebServices中的方法指定Path
@Path("/users")
@Produces(MediaType.APPLICATION_XML)
public List<User> getUsers(){
return userDao.getAllUsers();
}
}
5. 创建Web.xml配置文件:
你需要配置Jersey Servlet到我们的应用中,所以你要注册这个Servlet:
<?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</servletclass>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.restful</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
6.部署程序:
可以运行了!对,现在就把改程序部署到Tomcat服务器上,
在浏览器中输入:
http://localhost:8425/UserManagement/rest/UserService/users
我的端口号是8425
我的端口号是8425
你会看到:
那么恭喜你,成功了!