Java Vert.x 休息 API

Java Rest API on Vert.x

我正在开发基于 Java 和 Eclipse Vert.x 框架的 REST API 服务。我以前没有使用 Vert.x 并且遇到了这样的架构问题。当我需要为少数 REST 资源(例如,usersproducts)实现 API 时,我应该为每个资源创建单独的 Verticle 吗?

例如,当我使用 Jersey 实现一些 REST API 时,我创建了单独的资源 classes(对于我们的示例,它可能是 UsersResourceProductsResource classes)。在每个 class 中,我实现了允许的操作(例如 CRUD 操作)并将它们映射到 REST 方法(如 GET、POST 等)。但是当我使用 Vert.x(创建 UsersVerticleProductsVerticle)时,我应该以类似的方式实现它,还是它有一些其他的意识形态方法?

答案是,这取决于。通常,Router/web 服务器将是单个 Verticle,实现代码将在一个或多个其他 Verticle 中。不过,更好的方法是使用服务代理功能。这将使您能够更清楚地定义 API,而无需手动连接事件总线端点。看看 https://github.com/rhoar-shootout/rhoar-vertx 看看一个很好的例子。

编辑 - 事情发生了变化

现在,有更好的工具可以将服务代理与 Vert.x 路由器一起使用。我建议使用新的 OpenAPI3RouterFactory along with an OpenAPI specification file. In conjunction with the vertx-starter 工具,您可以从规范文件中生成服务代理和 OpenAPI3Router 代码。

我建议创建一个 RestAPIVerticle 并在 Verticle 中使用 Router 来设置您的路线。但是,您可以通过为特定任务创建 类 和打包路由来模块化您的路由。但请始终为您的 RestAPIVerticle 使用专用的 Router/Routes。

在多个 Verticle 之间共享路由或处理程序是一个坏主意,因为它违反了 Vert.x 的线程安全模型。大多数处理程序不是(也不一定是)线程安全的,因此在 Verticles 之间共享路由或处理程序时可能会遇到麻烦。

如果您需要处理更多请求,您可以轻松部署另一个 Verticle 实例。

我使用为 Gentics Mesh 描述的过程,它使用 Vert.x 提供 REST API。我在这里总结了工作流程: https://getmesh.io/docs/beta/contributing.html#_big_picture

来源也在 Github。

另一种选择当然是从 REST 规范(契约驱动设计)生成您的实现。我想 Vert.x 博客上有一篇文章描述了这个过程。