将actor模型与restfulapi相结合
我研究actor模型已经有一段时间了,并试图找出如何将它与restfulapi正确地结合起来。我正在努力区分这两个层的责任,或者使用ask模式,或者每个请求使用actor。对于这两种模式,请求-应答语义都泄漏到actor模型中,这看起来像是一种反模式。大多数由HTTP请求发起的消息发送给参与者时都需要回复。接收参与者有多个条件,需要向API发出信号,表示无法满足请求将actor模型与restfulapi相结合,actor,akka.net,actor-model,Actor,Akka.net,Actor Model,我研究actor模型已经有一段时间了,并试图找出如何将它与restfulapi正确地结合起来。我正在努力区分这两个层的责任,或者使用ask模式,或者每个请求使用actor。对于这两种模式,请求-应答语义都泄漏到actor模型中,这看起来像是一种反模式。大多数由HTTP请求发起的消息发送给参与者时都需要回复。接收参与者有多个条件,需要向API发出信号,表示无法满足请求 此外,输入验证方面的良好实践是什么;这是否应该作为HTTP的一部分实现(例如,如果字段X是有效的电子邮件地址,如果字段Y包含整数)
此外,输入验证方面的良好实践是什么;这是否应该作为HTTP的一部分实现(例如,如果字段X是有效的电子邮件地址,如果字段Y包含整数)。对于复杂的域逻辑,当(预)条件失败时,参与者如何/应该通知发送方?虽然请求/回复是参与者间通信中的一种反模式,但从参与者系统之外使用它并没有任何障碍。您可以从那里使用
Ask
,并通过组合使用Forward
+Tell
back向原始发件人发送回复,而无需在参与者内部使用请求/回复模型
当涉及到输入验证时,ofc简单的验证(字段显示、电子邮件格式等)可以在web框架级别轻松完成。然而,更高级的案例(如权限管理)可能会使用参与者——至少如果您的业务逻辑也使用参与者的话
对于复杂场景,请尝试使用协议进行思考。描述参与者和/或外部服务之间的契约集,并使用消息控制逻辑流。通常很难描述这种推理,但通常很容易用铅笔画出来;)
也就是说,您可能决定使用某种类型的AuthorizationGate
actor,它给出了一个未经筛选的请求,将对其进行验证:在身份验证失败时,它将一些RequestFailed
消息发送回原始发送方(询问方),成功后,它可以将该消息转换为ValidRequest
,并将其发送给负责处理该消息类型的参与者。然后一个参与者(只处理有效的请求)处理它,将RequestSucceed
或RequestFailed
发送回原始发件人(记住将该发件人存储为消息字段,或者使用actorRef.Forward而不是actorRef.Tell,这样就不会覆盖它)