Public 有效 REST Api wolkenkit.io

Public valid REST Api with wolkenkit.io

我目前正在评估框架 "wolkenkit" [1] 以便在应用程序中使用它。在这个应用程序中,我将有一个用于 tenant-based 数据管理的用户界面。只有经过身份验证的用户才能访问此应用程序。

此外,应该有一个 public REST API 遵循通用标准并可由 public 调用(租户安全通过提交 tenant-based API 在请求中键入 headers).

据我所知,wolkenkit REST API 似乎不符合 HTTP 动词形式的这些标准。

但是在我看来 wolkenkit 是一个非常灵活且 easy-to-use 的框架,我想知道如何从根本上实现这样一个 public API。 可能是例如创建内部连接到 wolkenkit 后端的自己的 Web 应用程序的有效方法?那么额外的性能开销呢?


[1] https://www.wolkenkit.io/

可以使用 HTTP 和 Websocket-API 访问 wolkenkit 应用程序。这些 API 均由 wolkenkit 在后台使用的 tailwind 模块提供。在 tailwind 存储库中,您可以找到 a very simple documentation 个可用的 HTTP 路由。

你说得对,wolkenkit HTTP-API 不是经典 REST-API。它更 RPC-style 根据我们的经验,它非常适合应用程序。您的 clients/tenants 只需要支持 3 条路由:/v1/command (POST) 用于发出命令。您 post 应遵循的命令 the command schema. /v1/events (POST) can be used for streaming events to clients. These events will follow the event schema. Finally you have /v1/read/:modelType/:modelName (POST) to read models. You can simply .

这些 API 的身份验证目前使用 OpenID-Connect. There's a very detailed article on how to setup authentication using Auth0. I'm not quite sure if this fits your use-case but you could basically use any Authentication Service that follows this standard or that is able to issue JWT 个令牌完成。

最后,您还可以通过构建一个使用 wolkenkit-client-js under the hood. This SDK can just use the same API as any other client 连接到您的应用程序的模块来构建您自己的 JavaScript client-SDK 在浏览器中运行。

希望这对您有所帮助。

PS:请注意,我是wolkenkit的作者之一。

除了 of mattwagl,我想指出一些您可能感兴趣的事情。

首先,自 wolkenkit is based on CQRS 以来,应用程序有一个单独的 API 用于写入和读取。这意味着,如果您发送一个命令(其目的是更改状态),这将转到写入 API。如果您订阅事件或 运行 查询,这将转到读取 API.

这又意味着,如果您发送命令,则由写入方来响应它。由于写入端并不意味着 return 应用程序状态,它所说的基本上是:"Thanks, I have received the command." 要获得实际结果,您必须等待适当的事件,这意味着订阅读取 API.

wolkenkit documentation 中有一个很好的图表,清楚地显示了这一点:

如果你现在单独添加一个REST API(实际上满足了REST的要求),这意味着你需要在内部处理等待结果。换句话说:wolkenkit 中的客户端始终是异步的,而 REST 不是。因此,在 REST API 中处理 wolkenkit API 的异步行为是您的工作。我认为这是最难的部分。

完成此操作后,您将拥有一个同步 REST API,当然它会有 一些 开销。但是我觉得既然它的开销仅限于传递和翻译网络请求,应该可以忽略不计。

哦,最后,还有一件事你必须要注意:因为 REST 本来的意思是依赖 HTTP 动词来传输语义,你需要映射 GET / POST / PUT / DELETE 到 wolkenkit 的语义命令。只要可以做到这一点 1:1,一切都很好——当有多个命令(从技术上讲)执行更新时,问题就开始了。

PS:我也是wolkenkit的开发者之一。

PPS:无论您将如何解决这个问题,我都非常希望收到您的来信!如果您能与我们分享您的经验,那就太好了,因为您很可能不是最后一个有这个想法的人。如果您想联系我们,最简单的方法是通过 Slack.