我可以在我的http api中放置一张地图以获得可扩展性吗?

时间:2014-07-14 18:56:05

标签: json http

我的http api使用JSON传递参数,它看起来像:

{
  param1: xxx
  param2: xxx
  param3: xxx
}

但是,我的系统是一个插件系统,每个插件需要在JSON主体中拥有自己的参数,所有插件将相互配合以产生最终结果。

例如,让我们说api是

CreateACar {
   name: xxx
   description: xxx
   model: xxxx
}

基础api有三个基本元数据字段。系统有插件,如:

CarColorPlugin: needs parameters as
{
   doorColor: xxx
   roofColor: xxx
   decoratorColor: xxx
}

TirePlugin: needs parameters as
{
   tireSize: xxx
   tireBrand: xxx
}

WindShieldPlugin: needs parameters as
{
   brand: xxx
   needRearWindShield: true or false
}

你可以想象这种插件尽可能多。现在的问题是所有插件都需要api CreateACar来携带他们的信息,有时后来新的插件可能会加入系统,因此CreateACar必须可扩展以满足未来的需求。

现在我正在考虑在JSON主体中放置一个映射并将api CreateACar传递给所有插件,以便它们可以自己获取参数。

然而,这个设计对我来说有点难看。我已经研究了一段时间,具有漂亮api的项目通常具有有限的业务领域。对于具有广泛意外业务领域的项目,通常在API体中使用XML等可扩展数据结构,但到目前为止我看到的所有这些API都很混乱,尤其是没有良好文档的这些API。

2 个答案:

答案 0 :(得分:0)

是的 - 大概你的许多请求会要求一辆汽车,而不是所有汽车。

答案 1 :(得分:0)

这是我的整体设计建议:

  • 使用Java SPI系统处理插件。定义一个插件接口,其中包含一个识别插件密钥("color""wipers"等)的方法,以及一个获取Map并返回插件数据对象的方法。收集Map<String,Plugin>
  • 中的所有实现
  • getPlugins()类上编写一个Car方法,该方法没有支持字段,而是整理嵌套{{1}中应用于Car的所有插件的信息}}。
  • 编写一个Map方法,该方法获取嵌套映射,遍历键,按名称查找相应的工厂插件,并从JSON对象数据中重新水化插件数据对象。