通知系统java

时间:2017-07-27 19:16:19

标签: java validation api-design

我正在尝试构建通用通知服务,以便在发生某些事件时向客户端发送不同的通知(电子邮件,短信或移动推送)。此服务将依次调用基于发布者/订阅者事件的系统,类似于:https://sites.google.com/site/jeffhartkopf/notifier。每当某个事件发生时,它就会在SQS上发布,订阅者从中读取它并发送通知。

发布商的API接口:

  1. 通知发件人类会:

    sendNotification(对象有效负载,Map属性Map)

  2. 此处,有效负载包含在电子邮件/短信/推送通知模板的文本中可变的参数。例如:如果电子邮件具有“Hello $ name”,则有效内容对象将具有作为字段的名称,并将值设置为您要将通知发送到的客户端的名称:

    @EventType("name"= "Recommendations")
    
    class PayloadObject {
       @Getter @Setter
       String name;
    }
    

    此处,事件类型是自定义注释,用于了解要向其发送通知的事件类型,发送其有效负载对象时应使用哪些客户端。

    1. 变压器: 现在要发布一个事件,我们需要序列化的JSON或XML字符串将被发布。所以我考虑从服务的客户端获取Object有效负载,并根据事件类型和模板在我的服务中使用JSON或XML转换器。 属性映射用于提供额外信息,例如您不想从Json或xml序列化对象解析的电子邮件附件文件。对于批量数据,将使用有效负载。
    2. 我在这种方法中看到的问题是,对象有效负载过于通用,根本就没有类型安全性。就像这个服务的客户端可以发送垃圾对象一样,在我的服务中没有任何我能想到的检查来验证这一点。 有没有办法可以针对客户端发送的对象验证模板中的参数(Velocity或XSLT格式)。就像可能使客户端编写单元测试对应每个模板和有效负载对象?或者我可以以更好的方式建模我的API,而不是从客户端获取Object以确保在调用API时类型安全。

0 个答案:

没有答案