码迷,mamicode.com
首页 > 其他好文 > 详细

?Jersey 开发RESTFUL服务器

时间:2015-04-16 23:15:46      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:

?Jersey 开发RESTFUL服务器


        


RESTful


一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 

REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。
? 
原则条件

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和DELETE。Hypermedia 是应用程序状态的引擎,资源表示通过超链接互联。
分层系统

另一个重要的 REST 原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。
当 REST 架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST 简化了客户端和服务器的实现。

基于 REST 的 Web 服务遵循一些基本的设计原则:

系统中的每一个对象或是资源都可以通过一个唯一的 URI 来进行寻址,URI 的结构应该简单、可预测且易于理解,比如定义目录结构式的 URI。

以遵循 RFC-2616 所定义的协议的方式显式地使用 HTTP 方法,建立创建、检索、更新和删除(CRUD:Create, Retrieve, Update and Delete)操作与 HTTP 方法之间的一对一映射:

1.若要在服务器上创建资源,应该使用 POST 方法;
2.若要检索某个资源,应该使用 GET 方法;
3.若要更改资源状态或对其进行更新,应该使用 PUT 方法;
4.若要删除某个资源,应该使用 DELETE 方法。
5.URI 所访问的每个资源都可以使用不同的形式加以表示(比如 XML 或者 JSON),具体的表现形式取决于访问资源的客户端,客户端与服务提供者使用一种内容协商的机制(请求头与 MIME 类型)来选择合适的数据格式,最小化彼此之间的数据耦合。

跟Resource方法
 @Path("/person/") 
    @POST 
    @Consumes("application/json") 
    public Response createPerson(Person person) { 
        ...... 
    } 
?
?
CRUD 操作
JAX-RS 定义了 @POST、@GET、@PUT 和 @DELETE,分别对应 4 种 HTTP 方法,用于对资源进行创建、检索、更新和删除的操作。
内容协商与数据绑定
Web 资源可以有不同的表现形式,服务端与客户端之间需要一种称为内容协商(Content Negotiation)的机制:作为服务端,Resource 方法的 Produces 标注用于指定响应体的数据格式(MIME 类型),Consumes 标注用于指定请求体的数据格式;作为客户端,Accept 请求头用于选择响应体的数据格式,Content-Type 请求头用于标识请求体的数据格式。
 @Provider 
 @Produces("application/json") 
 @Consumes("application/json") 
 public class GsonProvider implements MessageBodyWriter<Object>, 
    MessageBodyReader<Object> { 

    private final Gson gson; 

    public GsonProvider() { 
        gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setDateFormat( 
                "yyyy-MM-dd").create(); 
    } 
?
JAX-RS 与 JPA 的结合使用
由于 JAX-RS 和 JPA 同样都使用了基于 POJO 和标注的编程模型,因而很易于结合在一起使用。示例应用中的 Web 资源 ( 如账目 ) 同时也是持久化到数据库中的实体,同一个 POJO 类上既有 JAXB 的标注,也有 JPA 的标注 ( 或者还有 Gson 的标注 ) ,这使得应用中类的个数得以减少。如 清单 7所示,Account 类可以在 JAX-RS 与 JPA 之间得到复用,它不但可以被 JAX-RS 绑定为请求体 / 响应体的 XML/JSON 数据,也可以被 JPA 持久化到关系型数据库中。
清单 7. Account
 @Entity 
 @Table(name = "TABLE_ACCOUNT") 
 @XmlRootElement 
 public class Account { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "COL_ID") 
    @Expose 
    private int id; 

    @ManyToOne 
    @JoinColumn(name = "COL_PERSON") 
    @Expose 
    private Person person; 

    @Column(name = "COL_AMOUNT") 
    @Expose 
    private BigDecimal amount; 

    @Column(name = "COL_DATE") 
    @Expose 
    private Date date; 

    @ManyToOne 
    @JoinColumn(name = "COL_CATEGORY") 
    @Expose 
    private Category category; 

    @Column(name = "COL_COMMENT") 
    @Expose 
    private String comment; 
 ......
?
注释:
         REST?
REST 是 Representational State Transfer 的缩写,中文翻译为:具象状态传输。特点:REST是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP(简单对象访问协议)和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。
REST 就是一种开发风格,并遵循CRUD原则(R指读取)

JAXB 
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等
 
POJO 
简单的java对象,实际就是普通的javaBeans,可以有简单的运算,但不准有业务逻辑。
?
参考资料:
    http://www.williamlong.info/archives/1728.html
    
    http://www.ibm.com/developerworks/cn/java/j-lo-jaxrs/#resources

    http://blog.csdn.net/kkkloveyou/article/details/21485243

?Jersey 开发RESTFUL服务器

标签:

原文地址:http://www.cnblogs.com/IG-Su/p/4433584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!