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:

  1. 第一步是指定用于使用@Path注释到UserService的Web服务的路径。

  2. 第二个步骤是,以指定用于使用@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的应用成功。此外,让我们开始做一些更有趣事情在接下来的几章。

RESTful记录-RESTful介绍的更多相关文章

  1. RESTful记录-RESTful服务

    按照REST架构,一个RESTful Web服务不应该继续服务器的客户端的状态.这种限制被称为无状态.它负责客户以它的上下文传递给服务器,然后服务器可以存储这样的上下文,以处理客户端的进一步请求.例如 ...

  2. RESTful记录-RESTful内容

    什么是资源? REST架构对待每一个内容都作为一种资源.这些资源可以是文本文件,HTML网页,图片,视频或动态业务数据. REST服务器只是提供资源,REST客户端可访问和修改的资源.这里每个资源由U ...

  3. spring3 的restful API RequestMapping介绍

    原文链接:http://www.javaarch.net/jiagoushi/694.htm spring3 的restful API RequestMapping介绍 在spring mvc中 @R ...

  4. RESTful 架构 && RESTful API

    RESTful 架构 && RESTful API REpresentational State Transfer (REST) 具象状态传输https://en.wikipedia. ...

  5. 理解RESTful架构——Restful API设计指南

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  6. Restful 和 Jersey介绍(Web Service )

    一:REST简单介绍 REST 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之中的一个. REST 中最重要的概念是资源(reso ...

  7. RESTful 开发风格介绍

    REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统.在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple ...

  8. rest规范 ; restful 风格; gradel介绍 ; idea安装 ;

    [说明]上午整理了一下心情:下午继续开始任务,了解了restful,知道了那个牛人的博士论文,下载了管理工具gradle,并且部署了环境:晚上安装了idea继承环境并且建了一个简单的gradle项目( ...

  9. OpenStack Restful API框架介绍

    1  pecan框架介绍 1.1  什么是pecan pecan是一个轻量级的python web框架,最主要的特点是提供了简单的配置即可创建一个wsgi对象并提供了基于对象的路由方式. 主要提供的功 ...

随机推荐

  1. flask_admin 笔记二 授权和权限

    权限当然就是让有应该权限的用户能执行某些操作,把没有权限的用户限制在外面.Flask-admin提供了几种方法来处理: 1, Http basic Auth 最简单的身份验证形式是HTTP基本身份验证 ...

  2. Android与单片机通信常用数据转换方法(汇总)

    下面直接贴代码 1.  将GB2312转化为中文,如BAFAC2DCB2B7→胡萝卜,两个字节合成一个文字 public static String stringToGbk(String string ...

  3. Jmeter(二十二)_jenkins配置gitlab插件与ant插件

    Docker部署接口自动化持续集成环境第四步,代码上传到远程仓库! 接上文:脚本上传Gitlab 服务器中的Jenkins通过Gitlab插件读取远程Git远程仓库中的代码,然后通过ant插件进行构建 ...

  4. Asp.Net_from标签中的Enctype=multipart/form-data作用

    ENCTYPE="multipart/form-data"用于表单里有图片上传. <form name="userInfo" method="p ...

  5. Jenkins下载安装

    Jenkins是什么? Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins可以用于一些测 ...

  6. unity中camera摄像头控制详解

    目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...

  7. OAuth 2.0 Salesforce & Azure

    最近在学习Salesforce,浅谈一下 OAuth 2.0 在Salesforce and Azure 之间的应用. 假设有这样一个场景,在Salesforce中需要用到Azure中的一些服务,那么 ...

  8. 在windows10上搭建caffe

    caffe环境的搭建一直是让我最头疼的,最近在Windows10上成功搭建了caffe,在此对搭建过程进行记录. 安装主要是按照caffe github上的安装说明进行的,caffe的github主页 ...

  9. [T-ARA][Ma boo]

    歌词来源:http://music.163.com/#/song?id=22704447 作曲 : 金道勋/Rhymer [作曲 : 金道勋/Rhymer] 作词 : 金道勋 [作词 : 金道勋] 사 ...

  10. shell 的 export命令

    export 功能说明:设置或显示环境变量.语 法:export [-fnp][变量名称]=[变量设置值]补充说明:在shell中执行程序时,shell会提供一组环境变量.export可新增,修改或删 ...