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. SQL Server 常用内置函数

    本文用于收集在运维中经常使用的系统内置(built-in)函数,持续整理中 一,常用Metadata函数 1,查看数据库的ID和Name db_id(‘DB Name’),db_name('DB ID ...

  2. 设计模式 笔记 享元模式 Flyweight

    //---------------------------15/04/20---------------------------- //Flyweight 享元模式------对象结构型模式 /* 1 ...

  3. ASP.NetCore2.0概览

      微软为了统一微软平台,造就了.netStandard,不管之前的Framework还是最新的.netCore都必须支持.netStandard标准来统一各个平台的开发api. 以下是之前的微软各个 ...

  4. IE=edge 让浏览器使用最新的渲染模式

    Bootstrap不支持IE的兼容模式.为了让IE浏览器运行最新的渲染模式,建议将此 <meta> 标签加入到你的页面中: <metahttp-equiv="X-UA-Co ...

  5. 团队week9

    1. Bug bash ▪ How many bugs is found in your bug bash? Bug很多,就前端的用户管理部分发现的bug就有14个. 2. Write a blog ...

  6. Linux内核分析——第一周学习笔记20135308

    第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...

  7. 读书笔记(chapter5)

    系统调用 5.1与内核通信 1.系统调用在用户空间进程和硬件设备之间添加一个中间层.作用有三个:它为用户空间提供了一种硬件的抽象接口:系统调用保证了系统的稳定和安全:系统调用是用户空间访问内核的唯一手 ...

  8. 对于beta发布的评论

    第一组:新蜂小组 题目:俄罗斯方块 评论:主体功能已经完成,可以流畅的进行游戏,看项目的完成度是最高的.他们不但把核心功能做出来了,界面也已基本完成. 第二组:Nice团队 题目:约跑APP(约吧) ...

  9. Drools解决积分问题

    http://blog.csdn.net/quzishen/article/details/6163012 http://www.cnblogs.com/ityouknow/p/7297524.htm ...

  10. Linux命令(八)过滤文本 grep

    grep 命令介绍 grep是一个强大的文本搜索工具命令,用于查找文件中符合指定格式的字符串,支持正则表达式.如不指定任何文件名称,或是文件名为 -,则gerp命令从标准输入设备中读取数据. grep ...