Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将actor模型与restfulapi相结合_Actor_Akka.net_Actor Model - Fatal编程技术网

将actor模型与restfulapi相结合

将actor模型与restfulapi相结合,actor,akka.net,actor-model,Actor,Akka.net,Actor Model,我研究actor模型已经有一段时间了,并试图找出如何将它与restfulapi正确地结合起来。我正在努力区分这两个层的责任,或者使用ask模式,或者每个请求使用actor。对于这两种模式,请求-应答语义都泄漏到actor模型中,这看起来像是一种反模式。大多数由HTTP请求发起的消息发送给参与者时都需要回复。接收参与者有多个条件,需要向API发出信号,表示无法满足请求 此外,输入验证方面的良好实践是什么;这是否应该作为HTTP的一部分实现(例如,如果字段X是有效的电子邮件地址,如果字段Y包含整数)

我研究actor模型已经有一段时间了,并试图找出如何将它与restfulapi正确地结合起来。我正在努力区分这两个层的责任,或者使用ask模式,或者每个请求使用actor。对于这两种模式,请求-应答语义都泄漏到actor模型中,这看起来像是一种反模式。大多数由HTTP请求发起的消息发送给参与者时都需要回复。接收参与者有多个条件,需要向API发出信号,表示无法满足请求


此外,输入验证方面的良好实践是什么;这是否应该作为HTTP的一部分实现(例如,如果字段X是有效的电子邮件地址,如果字段Y包含整数)。对于复杂的域逻辑,当(预)条件失败时,参与者如何/应该通知发送方?

虽然请求/回复是参与者间通信中的一种反模式,但从参与者系统之外使用它并没有任何障碍。您可以从那里使用
Ask
,并通过组合使用
Forward
+
Tell
back向原始发件人发送回复,而无需在参与者内部使用请求/回复模型

当涉及到输入验证时,ofc简单的验证(字段显示、电子邮件格式等)可以在web框架级别轻松完成。然而,更高级的案例(如权限管理)可能会使用参与者——至少如果您的业务逻辑也使用参与者的话

对于复杂场景,请尝试使用协议进行思考。描述参与者和/或外部服务之间的契约集,并使用消息控制逻辑流。通常很难描述这种推理,但通常很容易用铅笔画出来;)

也就是说,您可能决定使用某种类型的
AuthorizationGate
actor,它给出了一个未经筛选的请求,将对其进行验证:在身份验证失败时,它将一些
RequestFailed
消息发送回原始发送方(询问方),成功后,它可以将该消息转换为
ValidRequest
,并将其发送给负责处理该消息类型的参与者。然后一个参与者(只处理有效的请求)处理它,将
RequestSucceed
RequestFailed
发送回原始发件人(记住将该发件人存储为消息字段,或者使用actorRef.Forward而不是actorRef.Tell,这样就不会覆盖它)