我有一个使用Spring Boot的APIendpoint。这个endpoint所做的是调用另外两个APIendpoint并处理它们的响应。
该过程的前半部分调用一个 API 终结点,获取响应并将此响应与 202 Accepted 一起返回到表面。
在202被返回之后,后台正在经历该过程的第二部分。它从第一个API调用中获取响应并进一步处理它。
我尝试过使用Executor
或ComppletableFuture
,但它们在返回202之后都停止了,并且不会运行下半部分,或者他们等到下半部分才能完成,只返回202。
这有可能实现吗?还是我在寻找错误的设计?
以下是一些示例代码:
@PostMapping("/user")
public ResponseEntity<?> processUser(@Valid @RequestBody UserRequestDto request,
@RequestHeader("Authorization") String token) throws Exception {
CompletableFuture<UserResponseDto> response = CompletableFuture.supplyAsync(() ->
userService.processUser(request, token));
userService.processUserSecond(response, token);
return new ResponseEntity<>(response, HttpStatus.ACCEPTED);
}
要明确一点:RESTendpoint由两个调用组成-<code>processUser。您希望获得<code>processUser
请记住,在这种情况下,第一次调用必须是同步的,因为您等待其结果在后续调用中使用。后者可以是异步的。
@PostMapping("/user")
public ResponseEntity<?> processUser(@Valid @RequestBody UserRequestDto request,
@RequestHeader("Authorization") String token)
{
// synchronous, waiting for the response to be used
UserResponseDto response = userService.processUser(request, token);
// asynchronous, fired without waiting for the response
CompletableFuture.runAsync(() -> userService.processUserSecond(response, token));
// return the result of the first (an only) synchronous call
return new ResponseEntity<>(response, HttpStatus.ACCEPTED);
}
问题内容: Flask返回响应后,我需要执行一些代码。我认为为它设置像Celery这样的任务队列不够复杂。关键要求是Flask必须在运行此功能之前将响应返回给客户端。它不能等待函数执行。 对此存在一些现有问题,但是在将响应发送到客户端之后,似乎没有一个答案能解决运行任务的问题,它们仍然同步执行,然后返回响应。 问题答案: 长话短说,Flask没有提供任何特殊功能来完成此任务。对于简单的一次性任务,
问题内容: 我正在构建RESTful API,并希望为开发人员提供选择以在JSON响应中返回哪些字段的选项。 这篇博客文章显示了几个API(Google,Facebook,LinkedIn)如何允许开发人员自定义响应的示例。这称为部分响应。 一个示例可能看起来像这样: 在上面的示例中,API应该返回用户“ 123”的userId,fullName和title字段。 我正在寻找有关如何在我的REST
我知道类似的帖子,我也检查过,但没有一个能帮到我。 我想POST到一个需要三个参数和一个基本身份验证的API(管理示例任务)。在postman中它可以工作。我提供的正文如下: 并设置基本身份验证(使用用户名和密码)。API发送如下响应: 如果我向api发送POST,一切都很好,但现在我想在java中实现它。如果我尝试发送一个POST: HttpClientErrorException: 400错误
在一些请求中,我们会做一些日志的推送、用户数据的统计等和返回给终端数据无关的操作。而这些操作,即使你用异步非阻塞的方式,在终端看来,也是会影响速度的。这个和我们的原则:终端请求,需要用最快的速度返回给终端,是冲突的。 这时候,最理想的是,获取完给终端返回的数据后,就断开连接,后面的日志和统计等动作,在断开连接后,后台继续完成即可。 怎么做到呢?我们先看其中的一种方法: local response
问题内容: 由于JavaScript在单个线程中运行,因此在发出AJAX请求后,后台实际发生了什么?我想对此有更深入的了解,有人可以阐明吗? 问题答案: 在幕后,javascript具有事件队列。每次执行javascript线程完成时,它都会检查队列中是否还有其他事件要处理。如果存在,它将退出队列并触发该事件(例如,单击鼠标)。 位于ajax调用下的本机代码网络将知道ajax响应何时完成,并且事件