【问题标题】:Data model in a common web service通用 Web 服务中的数据模型
【发布时间】:2015-08-19 13:07:11
【问题描述】:

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

  1. 第一个模型用于接受来自post请求的数据,字段template_id的值为“id12345”。

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

所以我不能直接将帖子数据转换为数据库实体以插入数据库。

  1. 第三个模型是rest响应,例如我想在模型中添加/删除一些字段。所以我也不能直接将 DB 实体转换为 json 响应。

所以我想知道处理这三个模型之间微小差异的好方法。

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

【问题讨论】:

  • 这个问题很有趣:-)

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


【解决方案1】:

post data和rest response可能是一样的,都属于Representation层。

这里有一个例子。 restlet-tutorial

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    关于主键,有几种处理方式:

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

    希望对你有帮助 蒂埃里

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多