`

Restlet实战(二)使用一个Application管理多个资源

    博客分类:
  • REST
 
阅读更多

说明,本系列文章所使用的Restlet版本是1.1.5, 2.0的版本API做了不少改动。不过现在还没有最终的release。所以暂时不会考虑2.0,不过后面的系列文章中会提到那些功能只有2的版本才有。

 

回到正题,既然主题是实战,可能读者会问,怎么不见具体的例子和代码?别急,一口吃不了个胖子,慢慢来,还是贴一个图,一张说明各个组件空间分布的图:


 

还是强调一下,这张图还是很有用的,后续会用示例代码结合源代码来介绍。

 

下面的例子是基于http://www.iteye.com/topic/182843这篇翻译文档的基础上做一些改变。

 

首先我们定义两个resource,一个是Order,一个是Customer,具体代码如下:

 

    OrderResource.java

 

 

Java代码  收藏代码
  1. /** 
  2.  *  
  3.  * @author ajax 
  4.  * @version 1.0 
  5.  */  
  6. public class OrderResource extends Resource {  
  7.     String orderId = "";  
  8.     String subOrderId = "";  
  9.       
  10.     public OrderResource(Context context, Request request,     
  11.             Response response) {     
  12.         super(context, request, response);    
  13.         orderId = (String) request.getAttributes().get("orderId");  
  14.         subOrderId = (String) request.getAttributes().get("subOrderId");  
  15.         // This representation has only one type of representation.     
  16.         getVariants().add(new Variant(MediaType.TEXT_PLAIN));     
  17.     }     
  18.       
  19.     @Override    
  20.     public Representation getRepresentation(Variant variant) {     
  21.         Representation representation = new StringRepresentation(     
  22.                 "the order id is : " + orderId + " and the sub order id is : " + subOrderId, MediaType.TEXT_PLAIN);     
  23.         return representation;     
  24.     }  
  25. }  

 

 CustomerResource.java

 

Java代码  收藏代码
  1. /** 
  2.  *  
  3.  * @author ajax 
  4.  * @version 1.0 
  5.  */  
  6. public class CustomerResource extends Resource {  
  7.     String customerId = "";  
  8.       
  9.     public CustomerResource(Context context, Request request, Response response) {  
  10.         super(context, request, response);  
  11.         customerId = (String) request.getAttributes().get("custId");  
  12.         // This representation has only one type of representation.  
  13.         getVariants().add(new Variant(MediaType.TEXT_PLAIN));  
  14.     }  
  15.   
  16.     @Override  
  17.     public Representation getRepresentation(Variant variant) {  
  18.         Representation representation = new StringRepresentation("get customer id :" + customerId,  
  19.                 MediaType.TEXT_PLAIN);  
  20.         return representation;  
  21.     }  
  22. }  

 

接下来定义一个Application:

OrderApplication.java

 

Java代码  收藏代码
  1. public class OrderApplication extends Application {  
  2.     /** 
  3.      * Creates a root Restlet that will receive all incoming calls. 
  4.      */  
  5.     @Override  
  6.     public synchronized Restlet createRoot() {  
  7.         Router router = new Router(getContext());  
  8.   
  9.         router.attach("/orders/{orderId}/{subOrderId}", OrderResource.class);  
  10.         router.attach("/customers/{custId}", CustomerResource.class);  
  11.         return router;  
  12.     }  
  13.   
  14. }  

  

web.xml中的配置略过,没有好说的,跟上面链接里面的基本一致,只是名字不同而已

 

启动应用服务器(偶用的Tomcat),假定你的context是/restlet,在浏览器里面输入:http://localhost:8080/restlet/customers/1

 

http://localhost:8080/restlet/orders/1/2


 浏览器页面就会相应的显示:

 

get customer id :1

 

the order id is : 1 and the sub order id is : 2

 

看到这里,可能有人会提出疑问,你的资源设计的有问题吧,另外你仅用了一个OrderApplicaiton,来attach两个资源,这个不觉的很奇怪吗?

 

是,是,是,比如说对Customer,正确的资源设计,应该是对应/customers和customers/1应该分别有两个资源与之对应,如CustomersResource和CustomerResource。需要说明的是,资源的设计非常重要,这个在很多文章,包括那本restful web service里面有提到,后续系列文章会涉及到。针对第二种情况,应该怎么去处理。下一篇文章会作进一步的说明。

  • 大小: 28.3 KB
分享到:
评论

相关推荐

    Restlet实战(二十六)事务 (Transaction)

    例如,多次PUT同一个资源到相同的URI,服务器总是更新资源到相同的最终状态。 2. **资源版本控制**:通过在资源中包含版本信息,可以确保并发操作的一致性。当客户端尝试更新资源时,必须提供资源的当前版本号。...

    Restlet开发实例

    在Restlet框架中,Component是整个应用的基础,它负责管理和协调多个Application。Application则是实际处理HTTP请求的实体,它可以包含多个不同的资源。通过Component和Application,你可以更好地组织和管理REST服务...

    Restlet 2.0 边学边写(八)使用jQuery和ajax实现对Restlet资源的CRUD操作

    使用jQuery的`$.ajax()`或`$.post()`函数,我们可以发送一个POST请求到Restlet服务器,以创建新的资源。例如: ```javascript $.ajax({ type: 'POST', url: 'http://your-restlet-server.com/resources', data...

    restlet restful

    在Restlet框架中,"RestApplication"可能是一个实现了Restlet Application接口的类,负责初始化和管理REST服务的路由和行为。 总的来说,"restlet restful"项目是一个基于RESTlet框架的RESTful Web服务实现,提供了...

    RESTLET开发

    定义一个名为`StudentApplication`的应用类,该类继承自`javax.ws.rs.core.Application`,用于管理和注册资源。 5. **定义资源类** 实现一个具体的资源类`StudentResource`,该类需要继承自`javax.ws.rs.core....

    restlet实现最简单的restful webservice

    本文将深入探讨如何使用Restlet来实现一个最简单的RESTful Web服务。 首先,了解REST的基本概念是必要的。REST强调的是资源的概念,通过URI(Uniform Resource Identifier)来标识,使用HTTP协议中的方法(如GET、...

    restlet

    在服务器端,RESTlet充当了一个应用服务器,支持多种Java应用服务器,如Jetty、Tomcat等。它提供了一种模块化的方式来组织和处理HTTP请求,允许开发者定义自定义的资源类来响应特定的URI路径。 客户端部分,RESTlet...

    Restlet与Spring 集成

    - **restletContext.xml**:这是Restlet的配置文件,定义了一个Spring组件`SpringComponent`,并设置了默认目标`defaultTarget`为`application`。`BaseApplication`类是自定义的Restlet应用程序,它使用`component....

    Restlet开发的Basic认证

    Restlet是一个轻量级的Java Web服务开发框架,它提供了构建RESTful(Representational State Transfer)应用程序的工具和API。REST是一种架构风格,强调简洁、无状态和可缓存的网络交互,常用于构建高性能、高可用性...

    restlet2.1学习笔记项目代码

    Restlet是一个开源框架,专为构建RESTful(Representational State Transfer)Web服务而设计。REST是一种轻量级的架构风格,常用于构建可扩展、高性能的互联网应用程序。本项目是针对Restlet 2.1版本的学习笔记,...

    Restlet in action 英文 完整版

    第二章“Beginning a Restlet application”中,作者通过一个实际的例子引导读者逐步创建一个简单的Restlet应用。这包括设置开发环境、定义资源、处理HTTP方法(如GET、POST等)以及配置服务器。这一章节对于初学者...

    Restlet Client-2.13.2

    用户在安装了Restlet Client之后,直接点击插件图标即可开始使用,只需输入自己的网站并选择好对应的请求模式就能对网站发送Web请求并检查响应,同时使用者可以先将多个API请求组合成一个方案来创建一个针对网站的...

    Restlet2 + Spring3 注解方式配置

    Restlet是一个轻量级的Java RESTful Web服务开发库,而Spring则是一个广泛使用的全面的企业级应用框架。结合两者,我们可以创建高效、灵活的Web服务。 首先,确保你已经下载了正确的依赖。在这个配置中,Restlet的...

    restlet项目

    Restlet项目是一个开源框架,专门用于构建RESTful(Representational State Transfer)Web服务。REST是一种软件架构风格,它强调简洁、可扩展性和无状态性,是Web服务设计的主流方式。Restlet框架提供了全面的工具集...

    restlet工程示例

    - 创建一个`Application`类,这是Restlet应用的入口点,它定义了应用的行为和组件。 - 在`Application`类中,重写`createInboundRoot()`方法,返回你的资源类实例。 2. **定义资源类** - 创建一个`Resource`子类...

    Restlet in Action

    - 实例演示:通过一个简单的示例展示如何使用Restlet框架快速搭建RESTful服务。 2. **第2章:启动Restlet应用程序**(Beginning a Restlet application) - **章节概述**:本章讲解了如何创建一个新的Restlet项目...

    基于Spring的Restlet实例

    而Restlet是一个专注于REST(Representational State Transfer)架构风格的Java库,它允许开发人员轻松地创建RESTful Web服务和客户端。将Spring与Restlet结合,可以利用Spring的强大功能来构建高效、可扩展的REST...

    restlet入门示例

    你可以通过实现`org.restlet.Application`接口并重写`createInboundRoot()`方法来创建一个应用。在这个方法中,你会定义你的资源。 步骤3:定义资源 资源是Restlet的核心,它代表了服务中的一个特定实体。你可以...

Global site tag (gtag.js) - Google Analytics