将演员模型与RESTful API结合使用

4
我已经研究了actor模型一段时间,并尝试找出如何正确将其与RESTful API结合使用。我正在努力分离这两个层的责任,无论是使用ask-pattern还是actor-per-request。使用这两种模式,请求-响应语义都会泄漏到actor模型中,这似乎是一种反模式。大多数由HTTP请求发起的消息发送给actor需要回复。接收actor有多个条件,需要向API发出信号,表明它无法实现请求。
此外,在输入验证方面,什么被认为是良好的实践;是否应该将其作为HTTP的一部分实现(例如,如果字段X是有效的电子邮件地址,如果字段Y包含整数)。对于复杂的领域逻辑,actor如何/应该在(前)条件失败时通知发送者?
1个回答

5
尽管在互动者之间的通信中请求/回复是一种反模式,但您可以从应用程序系统外部使用它。您可以从那里使用Ask,并通过使用Forward + Tell的组合将回复发送回原始发件人,而无需在互动者内部必须使用请求/回复模型。
当涉及输入验证时,当然可以在Web框架层面上轻松地完成简单验证(字段存在、电子邮件格式等)。但是更高级的情况(如权限管理)可能会使用互动者 - 至少如果您的业务逻辑也使用它们。
对于复杂的场景,请尝试使用协议进行思考。描述互动者和/或外部服务之间的一组契约,并使用消息来控制您的逻辑流程。通常很难描述这种推理方式,但通常很容易用铅笔画出来 ;)
也就是说,您可以决定使用某种类型的AuthorizationGate互动者,该互动者在给定未经授权的请求时将对其进行验证:在身份验证失败时,它将向原始发件人(提问者)发送一些RequestFailed消息;在成功后,它可以将该消息转换为ValidRequest并将其发送到负责处理该消息类型的互动者。然后,一个互动者(仅处理有效请求),处理它,向原始发件人发送RequestSucceedRequestFailed回复(请记住将该发件人作为消息字段存储,或使用actorRef.Forward而不是actorRef.Tell,以便您不会覆盖它)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接