RESTful记录-RESTful服务
按照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请求的上下文。 |