Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1524418
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: 架构设计与优化

2015-04-21 00:19:54

来自本人专利号:EMC-14-0787

1)为什么需要元数据
当我们设计好公司基本的REST框架之后,用户可以通过DSL实现灵活的查询特定字段/过滤/排序以及批处理。 是不是这些就够了。
现实中却不是的,通常REST framework的消费者会有多个组件,它们如果也是对外提供REST服务,但是必须依赖于其它组件提供的REST服务,这时候需要
更灵活的元数据框架了。

2)元数据长什么样
GET api/v1/types/disk

{
    attributes: [
        {
            "size" : "100"
            "unit" : "bytes"
        },
        {
            "size" : "100"
            "unit" : "bytes"
        },
        ..............................
   ],

    methods:  [
        {
            "name" : "create",
            "parameters" : [
                {
                "name" : "identifier",
                 "type" : "int",
                "rangeMin" : "1",
                "rangeMin" : "100"
                },
                {
                 "name" : "size",
                 "type" : "int",
                "rangeMin" : "1",
                "rangeMin" : "1"
                }
            ]
        },
        {
            "name" : "update",
            "parameters" : [
                {
                "name" : "identifier",
                 "type" : "int",
                "rangeMin" : "1",
                "rangeMin" : "100"
                },
                {
                 "name" : "size",
                 "type" : "int",
                "rangeMin" : "1",
                "rangeMin" : "1"
                }
            ]
        },
        ...........
    ],

"name" : "disk",
.......................
}
如你所见,以上是请求某一个对像类别时返回的元数据信息,全部是对像的信息。对比WSDL,要实现服务发现,基于元数据非常容易。 每个对像的方法的描述需要加上对应的相对 REST URI即可。

3)如何时设计元数据框架

想像一个Java 类,有各种作用于类、属性、方法的 Annotation,这就是我们想要的静态信息,解析这个对象模型存到数据库里面。这样通过基础的REST查询框架可以得到元数据。
如何想通过元数据生成对应Controller , Service, DAO之类的,只需要结合任何一个模板引擎即可,当今最流行的 freemarker和velocity,Groovy都可以胜任,当然也可以像我们一样自已写一个。

4)如何存放元数据

元数据存放在数据库中,可以是独立的数据库。基于对象模型,自动更新元数据至最新的版本。

5) 如何扩展元数据

现实中系统的元数据分为静态部分和动态部分 , 比如系统中某个 service 可不可用等, 某的服务的feature有没有enable, 这些都是动态变化。
当然,你可能会想 这些完全可以通过把feature看成一个和disk一样的对象来获取状态就行了,Good point. 不足的地方是当多个service之间有相系统的依赖关系,
那要发多少REST requests 以及 判断逻辑 来搞清楚究竟服务可不可用。
这个时候就需要动静结合了。 不错 , 各种服务本身也有feature 或者 service状态表中的数据,但是需要和静态的关系图作JOIN查询,听上去比较复杂。

限于专利,这里就不提供代码了。 想要设计的同学可以留言,我会提供support 。
阅读(737) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~