使用 Spring Boot 创建动态 REST 端点
Dynamic REST endpoint creation with Spring Boot
我正在开发一个框架,该框架具有 Spring 启动 Java 层和包含核心逻辑的 C++ 层。 C++ 层是模块化的,因此许多具有独特职责和命令的服务共享公共组件,包括命令处理器。命令处理器通过 Thrift RPC 与 Java 层(所有服务都相同)进行通信。
目前,用户通过指定命令名称和参数集在 Java 级别通过单个 executeCommand REST 端点执行命令。
POST http://localhost:8388/framework/executeCommand
JSON正文{"commandName": "aCommand", "parameters": {"param1": "value1", "param2": "value2"}}
有没有办法根据 C++ 层提供的命令集动态生成 REST 端点?例如...每个命令都会有一个端点,例如
POST http://localhost:8388/framework/aCommand
JSON正文{“参数”:{“param1”:“value1”,“param2”:“value2”}}
或
获取 http://localhost:8388/framework/aCommand?param1=value1
Ex... 在启动时,Java 层会向 C++ 层查询命令集和其他相关信息,例如适当的 REST 方法。使用此信息,Java 层将为每个命令生成一个端点。
谢谢!
您可以在 REST 控制器中使用路径变量来接受不同的命令类型,例如:
@RestController
@RequestMapping("/command")
@RequiredArgsConstructor
class CommandController {
private final CommandService commandService;
@PutMapping("/{commandType}")
public CommandResult handleCommand(@PathVariable("commandType") String commandType,
@RequestParam Map<String, String> params) {
return commandService.execute(commandType, params);
}
}
(这里CommandService
是一个服务,它在启动时加载可用命令,然后验证并执行请求的命令)。
然后您可以 运行 带有请求的命令 PUT http://localhost:8080/command/someCommand?param1=value1¶m2=value2
更新
澄清需求的一些解决方案(动态 REST 控制器创建):
- https://github.com/tsarenkotxt/poc-spring-boot-dynamic-controller
- Make @RestController at runtime
我正在开发一个框架,该框架具有 Spring 启动 Java 层和包含核心逻辑的 C++ 层。 C++ 层是模块化的,因此许多具有独特职责和命令的服务共享公共组件,包括命令处理器。命令处理器通过 Thrift RPC 与 Java 层(所有服务都相同)进行通信。
目前,用户通过指定命令名称和参数集在 Java 级别通过单个 executeCommand REST 端点执行命令。
POST http://localhost:8388/framework/executeCommand
JSON正文{"commandName": "aCommand", "parameters": {"param1": "value1", "param2": "value2"}}
有没有办法根据 C++ 层提供的命令集动态生成 REST 端点?例如...每个命令都会有一个端点,例如
POST http://localhost:8388/framework/aCommand
JSON正文{“参数”:{“param1”:“value1”,“param2”:“value2”}}
或
获取 http://localhost:8388/framework/aCommand?param1=value1
Ex... 在启动时,Java 层会向 C++ 层查询命令集和其他相关信息,例如适当的 REST 方法。使用此信息,Java 层将为每个命令生成一个端点。
谢谢!
您可以在 REST 控制器中使用路径变量来接受不同的命令类型,例如:
@RestController
@RequestMapping("/command")
@RequiredArgsConstructor
class CommandController {
private final CommandService commandService;
@PutMapping("/{commandType}")
public CommandResult handleCommand(@PathVariable("commandType") String commandType,
@RequestParam Map<String, String> params) {
return commandService.execute(commandType, params);
}
}
(这里CommandService
是一个服务,它在启动时加载可用命令,然后验证并执行请求的命令)。
然后您可以 运行 带有请求的命令 PUT http://localhost:8080/command/someCommand?param1=value1¶m2=value2
更新
澄清需求的一些解决方案(动态 REST 控制器创建):
- https://github.com/tsarenkotxt/poc-spring-boot-dynamic-controller
- Make @RestController at runtime