通用Web服务中的数据模型

时间:2015-08-19 13:07:11

标签: java web-services entity data-modeling restlet

在一个普通的休息服务中,至少有3个模型,它们指的是相同的东西,但在不同的情况下略有不同。

  1. 第一个模型用于接受来自帖子请求的数据,其中字段template_id的值为" id12345"。

  2. 第二个模型是数据库实体,我们还有一个数据库实体,它也有一个template_id字段,但字段的类型是int,它是一个内部模板主键在db中,它是一个整数。

  3. 所以我无法直接将后期数据转换为数据库实体以插入数据库。

    1. 第三个模型是其余的响应,例如,我想在模型中添加/删除一些字段。所以我也不能直接将数据库实体转换为json响应。
    2. 所以我想知道处理这三种模型之间微小差异的好方法。

      我是否需要创建3个名为postDataModel DBModel responseModel的模型?我认为这不是一个好主意。

2 个答案:

答案 0 :(得分:1)

帖子数据和休息响应可能相同,它们都属于表示层。

这里有一个例子。 restlet-tutorial

答案 1 :(得分:1)

首先,您可以阅读有关创建Web API的方法的帖子(即RESTful服务,即Restlet服务器应用程序):

也就是说,使用Restlet处理请求时涉及几个元素:

  • 接收请求的应用程序,负责将其路由到正确的处理实体(最常见的是服务器资源)。请参阅方法Application#createInboundRoot和课程Router
  • 负责处理请求的服务器资源。根据请求中使用的HTTP方法,在服务器资源中调用方法。请参阅注释@Get@Post@Put@Delete,...
  • 请求响应,其中包含其中包含的所有元素。 Restlet提供了一个API来获取查询参数和标题(请参阅http://restlet.com/technical-resources/restlet-framework/guide/2.3/core/http-headers-mapping)。
  • 与请求和响应有效负载中存在的数据相对应的表示

虽然您可以访问原始数据,但Restlet提供了一种转换功能,允许您将这些有效负载作为对象。

您可以注意到,有效负载中的数据类型不仅仅是字符串。实际上,它取决于用于有效载荷的结构。您可以直接使用字符串值,也可以使用url编码的表单,还可以使用JSON,XML,YAML结构。我猜你使用表单所以只支持字符串值。如果这是一个问题,请随意使用JSON或其他内容。

也就是说,一个好的方法是从数据库实体做出不同的表示,因为表示通常有点不同。表示可以是子集或聚合或几个。但是,通过阻止属性的类型转换,您可以使您的生活更轻松。我的意思是,在表示和实体中使用相同类型的属性。

关于主键,有几种方法可以处理它们:

  • 表示中的RESTful服务的用户可以
  • 它们可以在服务器端生成 (自动增量,序列,...),因此它不需要出现在输入表示中。

希望它可以帮到你, 亨利