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

RESTful Web服务应遵守此限制。我们已经看到了REST Web服务 - 方法教程,该Web服务方法不存储它们从调用的客户端的任何信息。

考虑以下网址:

http://localhost:8080/UserManagement/rest/UserService/users/1

如果您使用的浏览器,使用基于Java的客户端或使用postman,那么输入上面的网址,结果永远是用户XML ID为1,因为服务器没有存储有关客户的任何信息。

<user>
<id>1</id>
<name>mahesh</name>
<profession>1</profession>
</user>

无状态的优点

以下是无状态的RESTful web服务的好处

  • Web服务可以独立对待每一个方法的请求。

  • Web服务不需要维护客户端之前的交互。它简化了应用程序的设计。

  • 由于HTTP本身是一个无状态协议,RESTful Web服务无缝地与HTTP协议的工作。

无状态的缺点

以下是无状态的RESTful web服务的缺点

  • Web服务需要得到每个请求的额外信息,然后解释得到的情况下客户端交互客户端的状态都被照应。

缓存是指存储服务器响应客户端本身,使客户端无须做出了对同样的资源服务器的请求连连。服务器的响应有关于缓存是如何做到使客户端缓存的响应一段时间或永远捕捉服务器响应信息。

以下是其中一个服务器响应可以具有以配置客户端的缓存的报头:

S.N. 消息头和说明
1 Date
日期和创建时的资源的时间。
2 Last Modified
资源的日期和时间,它的最后修订。
3 Cache-Control
主要头控制缓存。
4 Expires
到期日和缓存时间
5 Age
在几秒钟时间,从资源服务器获取时。

Cache-Control头

以下是Cache-Control头的细节

S. N. 指令和说明
1 Public
指示资源是可缓存任何组件。
2 Private
指示资源是可缓存只有客户端和服务器,无中介可以缓存资源。
3 no-cache/no-store
表示资源是不可缓存
4 max-age
表示缓存有效期为max-age以秒为单位。在此之后,客户端必须使另一个请求。
5 must-revalidate
指示服务器来验证资源,如果最大到期时间已经过去了。

最佳实践

  • 始终保持静态内容,如图像,CSS,JavaScript的缓存,以2〜3天有效期。

  • 不要让过期日期太长。

  • 动态内容应只能缓存几个小时。

正如RESTfulWeb服务以HTTP URL的路径工作,所以这是非常重要的,在相同的方式维护一个RESTful Web服务的网站是安全的。以下是在设计一个RESTful Web服务应遵循的最佳实践。

  • 验证 - 验证服务器上的所有输入。防止SQL或NoSQL注入攻击你的服务器。

  • 基于会话的认证 - 使用基于会话的认证,每当一个请求到Web服务的方法来验证用户的身份。

  • URL没有敏感数据 - 千万不要使用用户名,密码或会话令牌的URL,这些值应通过POST方法传递给Web服务。

  • 方法执行限制 - 允许限制使用像GET,POST,DELETE等方法。 GET方法不应该用于删除数据。

  • 验证格式错误 XML/JSON - 检查以及表单输入传递到Web服务方法。

  • 抛出通用错误信息 - Web服务方法应使用HTTP错误信息像403,显示禁止访问等。

HTTP 代码:

S.N. HTTP 代码 & 描述
1 200
正确/正常, 显示成功。
2 201
创建,当使用POST或PUT请求成功创建了资源。返回链接使用位置标头新创建的资源。
3 204
无内容, 当响应主体是空的,例如,一个DELETE请求。
4 304
不修改, 用于减少以防条件GET请求的网络带宽的使用。响应主体应该是空的。头应该有日期,位置等。
5 400
错误的请求, 状态表示无效输入,例如提供验证错误,数据丢失。
6 401
未经授权, 指出用户正在使用无效或错误的身份验证令牌。
7 403
被禁止, 指出用户没有访问方法的使用,例如,删除权限没有管理员权限。
8 404
未找到, 状态表示这个方法不可用。
9 409
冲突, 执行方法,例如,添加重复条目状态的冲突的情况。
10 500
内部服务器错误,状态该服务器已经在执行方法抛出了一些异常。

JAX-RS代表RESTful Web服务的Java API。JAX-RS是一款基于JAVA的编程语言和API规范,为创建基于RESTful Web服务提供支持。它的2.0版本发布于2013年5月24日。JAX-RS大量使用从Java SE5注释可用来简化基于Java Web服务创建和部署开发。 它还提供支持创建客户端RESTful Web服务。

规范

下面是通常用于注解映射的资源作为Web服务的资源。

S.N. 注解 & 描述
1 @Path
资源类/方法的相对路径。
2 @GET
HTTP GET请求,用于获取资源。
3 @PUT
HTTP PUT请求,用于建立资源。
4 @POST
HTTP POST请求,用于创建/更新资源。
5 @DELETE
HTTP DELETE请求,用于删除的资源。
6 @HEAD
HTTP HEAD请求,用来获取方法可用状态。
7 @Produces
状态通过Web服务产生的HTTP响应,例如APPLICATION/XML, TEXT/HTML, APPLICATION/JSON等。
8 @Consumes
状态的HTTP请求类型,例如 application/x-www-form-urlencoded 接受POST请求的过程中HTTP主体表单数据。
9 @PathParam
结合传递到方法,在路径中的值的参数。
10 @QueryParam
结合传递给方法的路径中的查询参数的参数。
11 @MatrixParam
结合传递给方法的路径中的HTTP矩阵参数的参数。
12 @HeaderParam
结合传递到方法到HTTP头中的参数。
13 @CookieParam
结合传递给方法一个Cookie参数。
14 @FormParam
结合传递到方法的一种形式值的参数。
15 @DefaultValue
分配一个默认值,以传递一个参数给方法。
16 @Context
上下文中资源,例如HTTP请求的上下文。

RESTful记录-RESTful服务的更多相关文章

  1. RESTful记录-RESTful内容

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

  2. RESTful记录-RESTful介绍

    RESTful Web服务是基于REST架构的Web服务.在REST架构一切都是一种资源. RESTful Web服务是轻量级的,高度可扩展性和可维护性,并且非常常用于创建基于API的Web应用程序. ...

  3. WCF Restful Service的服务

    构建基于WCF Restful Service的服务 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面 ...

  4. java 利用HttpURLConnection方式获取restful格式的服务数据

    /** * @Author: * @Description:利用HttpURLConnection方式获取restful格式的服务数据 * @Date: */ private static List& ...

  5. 如何 RESTFul 你的服务(译)

    原文:http://reynders.co/how-restful-is-your-service/发表于:2013年9月 如今无论是社交媒体平台还是企业解决方案,Web services都不出不在. ...

  6. RESTful 架构 && RESTful API

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

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

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

  8. 寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现。本文记录HAProxy服务热加载后某微服务50%概率失效的问题。设计3组对比实验,验证了陈旧配置的HAProxy在Reload时没有退出进而导致微服务丢失,并给出了解决方案. Keywords:HAProxy热加

    寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现.本文记录HAPro ...

  9. 记录一些服务端术语和搭建web服务器

    菜单快捷导航 服务端常用术语 搭建web服务器和配置虚拟主机 记录一些服务端方面的常用术语 1.CS架构和BS架构 1.1 CS架构 CS(Client/Server),基于安装包类型的桌面或手机软件 ...

随机推荐

  1. django在admin后台注册自己创建的数据库表

    django在admin后台注册自己创建的数据库表,这样我们就可以在admin后台看到表结构信息,我们就可以在admin后台快速录入表记录信息 如果没有注册,那么你在登录django自带的admin的 ...

  2. 利用fiddler core api 拦截修改 websocket 数据

    一般的中间人攻击基本都是拦截修改普通的http协议里面的内容,而对于怎么拦截修改websocket协议传输的内容好像都没有多少介绍. talk is cheap show me the code us ...

  3. WebService技术,服务端发布到Tomcat(使用Servlet发布),客户端使用axis2实现(二)

    还是在WebService技术,服务端and客户端JDK-wsimport工具(一)的基础上实现.新建一个包:com.aixs2client.目录结构如下: 一.服务端: 1.还是使用com.webs ...

  4. 余玄相似度,TF-IDF

    能干什么? 文章去重,语句去重,提取关键词(文章摘要,页面指纹),图片识别,语音识别 想要做一个相似度,最重要的是什么? 必须得到一个度量:计算个体之间的相似程度(分数,0-1之间,0代表完全不同,一 ...

  5. aiohttp基本及进阶使用

    客户端使用 发起请求 让我们从导入aiohttp模块开始: import aiohttp 好啦,我们来尝试获取一个web页面.比如我们来获取下GitHub的时间轴. async with aiohtt ...

  6. SSM整合配置(Spring+Spring MVC+Mybatis)

    一.配置准备   通过Maven工程,在eclipse中整合SSM,并在Tomcat服务器上运行 在进行配置前,先理清楚要配置哪些文件,如图,除web.xml外,其余三个配置文件名称均可自定义: 如图 ...

  7. c++ Arx二次开发创建椭圆和样条曲线

    一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2 ...

  8. Inno Setup脚本

    某天夜晚一场狂风暴雨,由于办公室座位旁的窗户没关,笔记本电脑泡了一夜水,无法开机,无奈送修,里面的大量资料也不知道会不会丢失. is的脚本只有重新写了,重新研究了一下检测程序是否正在运行的判断方法,另 ...

  9. 详细聊聊k8s deployment的滚动更新(二)

    一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 ● 相关的参数介绍:   livenessProbe:存活性探测.判断pod是否已经停止   readinessProbe:就绪 ...

  10. 2-Sixteenth Scrum Meeting-20151216

    任务安排 成员 今日完成 明日任务 闫昊 写完学习进度记录的数据库操作  写完学习进度记录的数据库操作 唐彬 编写与服务器交互的代码  编写与服务器交互的代码 史烨轩 获取视频url   余帆  本地 ...