Martin Fowler的意思是"避免自动反序列化"在REST API中?

时间:2016-08-16 18:44:55

标签: java json api-design

Martin Fowler在API中对avoid automatic deserialization说:

  

我更愿意完全避免自动反序列化。自动   反序列化通常属于WSDL耦合的陷阱   消费者和生产者通过复制静态类结构   两者。

这意味着什么?

是否在没有任何"转换器的情况下在每个休息服务中接收所有信息作为JSON"在中间?

通过"转换器"我的意思是一些类型的适配器,就像在GsonBuilder中一样。

1 个答案:

答案 0 :(得分:1)

通过自动反序列化,他意味着JSON对象的预定义硬结构用于检索对象本身。

但这适用于大多数用例。

预定义结构的示例是Java Class or XML XSD

自动反序列化通常属于WSDL陷阱,它通过在两者中复制静态类结构来耦合使用者和生产者。

他在这里的意思是使用类进行反序列化与使用WSDL序列化或反序列化对象相同。

与类和XSD文档的硬结构相反,JSON更加轻松,因为它基于Javascript,允许在对象定义的生命周期的任何一点修改对象定义。 / p>

所以替代方法是在Java组合中使用HashMap and ArrayList(或解析String本身)来反序列化对象,因为即使服务器产生不同的东西(如新字段),也不需要进行任何更改。客户方。新客户可以利用新领域。

在硬结构中,由于模型类的共享结构,生产者和消费者都是强耦合的,因此生产者的任何变化都必须反映在消费者中。

在我工作的一些SOA项目中,我们曾在所有request/response对象中添加一些额外的字段以供将来使用,这样就无需更改生产中运行的客户端以适应新客户的需求。这些字段有一些随机名称,如customParam1 to customParam5,其中这些字段的含义随文档一起发布。这些名称并不直观,因为我们将共享结构或模型上的生产者和消费者联系起来。