Java Vert.x 休息 API
Java Rest API on Vert.x
我正在开发基于 Java 和 Eclipse Vert.x 框架的 REST API 服务。我以前没有使用 Vert.x 并且遇到了这样的架构问题。当我需要为少数 REST 资源(例如,users
和 products
)实现 API 时,我应该为每个资源创建单独的 Verticle 吗?
例如,当我使用 Jersey 实现一些 REST API 时,我创建了单独的资源 classes(对于我们的示例,它可能是 UsersResource
和 ProductsResource
classes)。在每个 class 中,我实现了允许的操作(例如 CRUD 操作)并将它们映射到 REST 方法(如 GET、POST 等)。但是当我使用 Vert.x(创建 UsersVerticle
和 ProductsVerticle
)时,我应该以类似的方式实现它,还是它有一些其他的意识形态方法?
答案是,这取决于。通常,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 博客上有一篇文章描述了这个过程。
我正在开发基于 Java 和 Eclipse Vert.x 框架的 REST API 服务。我以前没有使用 Vert.x 并且遇到了这样的架构问题。当我需要为少数 REST 资源(例如,users
和 products
)实现 API 时,我应该为每个资源创建单独的 Verticle 吗?
例如,当我使用 Jersey 实现一些 REST API 时,我创建了单独的资源 classes(对于我们的示例,它可能是 UsersResource
和 ProductsResource
classes)。在每个 class 中,我实现了允许的操作(例如 CRUD 操作)并将它们映射到 REST 方法(如 GET、POST 等)。但是当我使用 Vert.x(创建 UsersVerticle
和 ProductsVerticle
)时,我应该以类似的方式实现它,还是它有一些其他的意识形态方法?
答案是,这取决于。通常,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 博客上有一篇文章描述了这个过程。