我目前正在评估框架"wolkenkit“1在应用程序中的使用情况。在这个应用程序中,我将有一个用于基于租户的数据管理的用户界面。只有经过身份验证的用户才能访问此应用程序。
此外,应该有一个符合公共标准的公共REST,并且可以被公共调用(租户安全性是通过在请求头中提交基于租户的API密钥来实现的)。
据我所知,wolkenkit REST在HTTP谓词的形式上似乎不适合这些标准。
但是,在我看来,wolkenkit是一个非常灵活和易于使用的框架,我想知道如何实现这样一个公共API。它是否是一种有效的方法来创建一个内部连接到wolkenkit后端的web应用程序?那么额外的性能开销呢?
发布于 2018-03-10 11:07:46
除了回答 of 马特沃格之外,我想指出一些您可能感兴趣的事情。
首先,由于沃肯吉是基于CQRS的,所以应用程序有一个单独的读写API。这意味着,如果您发送一个命令(其意图是更改状态),这将转到写API。如果订阅事件或运行查询,这将转到read。
这同样意味着,如果您发送一个命令,则由写端来响应它。由于写端不打算返回应用程序状态,它只表示:“谢谢,我收到了命令。”要获得实际结果,您必须等待适当的事件,这意味着订阅read。
在wolkenkit文件中有一个很好的图表,它清楚地显示了这一点:

如果您现在添加一个单独的REST (它实际上满足REST的要求),这意味着您需要在内部处理等待结果。换句话说: wolkenkit中的客户端总是异步的,REST则不是。因此,您的工作是处理REST中wolkenkit API的异步行为。我认为这是最难的部分。
一旦您这样做了,您将有一个同步REST,当然,它也会有一些开销。但我认为,由于它的开销仅限于通过和翻译网络请求,所以它应该可以忽略不计。
哦,最后,还有一件事您必须注意:因为REST最初是指依赖HTTP谓词来传输语义,所以您需要将GET / POST / PUT / DELETE映射到wolkenkit的语义命令。只要可以做到1:1,所有的问题都会从多个命令(从技术上讲)进行更新时开始。
PS:我也是https://github.com/thenativeweb/wolkenkit的开发者之一。
PPS:不管你要解决这个问题,我都很想听听你的意见!如果你能和我们分享你的经验,那就太好了,因为你很可能不是最后一个有这个想法的人。如果您想联系我们,最简单的方法是通过http://slackin.wolkenkit.io/。
发布于 2018-03-09 15:17:48
可以使用HTTP和Websocket API访问wolkenkit应用程序。这些API都是由wolkenkit在幕后使用的tailwind模块提供的。在顺风回购中,您可以找到可用HTTP路由的非常简单的文档。
你说得对,wolkenkit HTTP不是一个经典的REST。这是更多的RPC风格,在我们的经验是一个很好的应用程序。您的客户/租户只需要支持3条路由:/v1/command (POST)用于发出命令。您发布的命令应该遵循命令模式。/v1/events (POST)可用于将事件流到客户端。这些事件将在事件模式之后发生。最后,您可以使用/v1/read/:modelType/:modelName (POST)来读取模型。您可以简单地使用使用HTTPie测试这些路由。
这些API的身份验证目前是使用OpenID-连接完成的。有关于如何使用非常详细的文章设置身份验证的Auth0。我不太确定这是否适合您的用例,但基本上可以使用任何遵循此标准的身份验证服务,或者能够发出JWT令牌。
最后,您还可以构建自己的JavaScript client-SDK,它可以在浏览器内部运行,方法是构建一个模块,该模块在幕后使用wolkenkit-客户-js。这个SDK可以使用与任何其他客户端相同的API连接到您的应用程序。
希望这能有所帮助。
PS:请注意,我是http://wolkenkit.io/的作者之一。
https://stackoverflow.com/questions/49194448
复制相似问题