我的任务是编写一个“火与忘”推送web应用程序,该应用程序可以通过互联网(HTTPS)将大量XML消息(多种类型)推送到多个客户端点。我不需要回复,甚至也不需要知道他们是否收到了消息--如果消息没有到达,我不希望它在我的结尾失败。
换句话说,给定一个url (例如https://192.168.3.45/MessageTypeA/v1、https://192.168.3.45/MessageTypeB/v3等),我的应用程序应该将给定类型的所有XML消息的副本转发给该url,如果客户端正在该url上侦听,那么它可以对这些消息做它喜欢做的事情。
我可以定义客户机urls是如何定义的,安全性等等--没有什么已经存在,所以我不受现有方法的限制。
我对基于网络的apis相当陌生。我一直在研究REST、SOAP、WebSub.,并试图找出解决这个问题的最佳方法。
在我看来,基于REST的API对接收端的对象采取行动--“获取”列车列表,或向司机“发布”更新信息,或者“发布”新列车,或其他什么;这与我在这里无关--我想在这种方法中所需要的只是“发布”x、y或z类型的新消息?关键是,xml消息在解释时很可能是POST或PUT,但我不想对消息进行预处理以确定--我所做的只是向端点提供原始数据。
在WebSub语言中,我认为我是“发布者”,我要发布到多个“集线器”?但区别在于,在我的场景中没有订阅者--我维护每个消息类型的目标列表,而不是订阅它们。
所以我不知道哪种协议/方法最适合这种情况,所以我想寻求一些建议。无论我使用哪种协议,都需要对消息进行加密并由接收客户端进行身份验证,以确保它是我发送给他们的消息。
发布于 2020-03-26 13:23:14
这类东西,您为发送数据的web端点维护URL列表,称为web钩子。例如,Github发送钩子。
别想太多了。保持你的协议简单。
你当然不需要告诉你的网络钩子的消费者,他们必须实现完美和精彩的REST语义。如果每个web钩子操作的目的都是为了传输特定可命名实体的状态,那么这些语义是最有意义的。因此,例如,如果您通过web钩子集或更新推出的每个XML文档,比方说,一个特定的库存项目:销售带有特定产品号的椅子,那么REST可能是有意义的。
假设您的web钩子消息是幂等:也就是说,如果您向某个特定的用户发送相同的消息不止一次,它只做一次相同的事情。在REST术语中,幂等消息应该是消息。但是如果REST不合适,可以使用POST。当您解释如何开发一个服务来接受您的web钩子操作时,使用POST就更容易了。
如果每一条信息都更像是一袋信息,简单地告诉你的网络钩子用户,你会把每条信息都发给他们。
用于发布这些消息的代码必须对POST操作的超时和其他故障具有弹性,obv。
而且,你的网页钩子帖子的收信人需要一些安全的方法来验证消息是否真的来自你,因为网络爬行。数字签名是这里的金本位,用于像SAML断言这样的操作。Github做的更简单使用基于共享API密钥的hmac散列。
https://softwareengineering.stackexchange.com/questions/406983
复制相似问题