我正在开发一个Spring Boot REST API,它可以处理文档并对文档启动检查。
我有一个文档资源:/doc
:
post/doc
/doc/{id}
的CRUD操作的其余部分
post/doc/{id}/check
上的查询参数选择同步还是异步检查?同样,在异步检查的情况下,我将创建一个临时任务资源,可以将其池化以了解检查的状态。
但是,如果check和task都从相同的路径返回,就会变得混乱,不是吗?
您将如何处理路径和资源明智?
基本上由你决定。通常,如果要查询的数据很大,比如/resource/{id}
,我使用的大多数API,对同步请求使用GET,对异步请求使用POST返回任务或作业id。
对于POST,在您的例子中,如果创建/检查需要时间,我会考虑始终异步执行,并返回HTTP202 Accepted和doc/{id}/check/{id}url,在这里用户可以看到结果是否就绪或它仍在工作的状态。
如果你想让他们选择等还是不等,那就看你怎么做了。有一个标准的标头可以用来html" target="_blank">修改行为。例如,对于异步调用,expect:202-accepted
,而对于同步调用,no header或expect:201-created
。这使得API不那么清晰,尽管它是一个标准。大多数人(包括我)可能会坚持在URL中添加一个参数来澄清。我不认为它应该在POST数据中,因为它应该是与您正在创建的对象相关的数据
同步调用异步方法最安全的方法是什么?
我有一些大致看起来像这样的代码: 是一个冷可观察的,它在标准的同时循环中产生(但是在另一个线程上!)。在未配置时,获取一些数据并调用。 我面临的问题是太“慢”,它跟不上生成数据的速度。这是一个异步操作,本质上是将对内存中某个位置的客户机的调用排队(无法访问此代码),并最终填充堆。 我需要找到一种方法,当这些调用开始堆积时,让停止生成。有没有一种方法可以使用内置操作符来实现这一点?
问题内容: 在过去的几个小时中,我一直在努力解决这个问题,但无法解决。我想我仍然必须习惯于函数式编程风格;) 我写了一个递归函数,它遍历目录结构并对某些文件进行处理。此功能使用异步IO方法。现在,我要在完成整个遍历后执行一些操作。 如何确保在执行完所有调用但仍使用异步IO功能后执行此操作? 问题答案: 查找“ 步骤”模块。它可以链接异步函数调用,并将结果从一个传递到另一个。
我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符
是否可以调用一个异步方法,以便它从一个同步的方法异步运行?我不关心它挂起同步调用程序直到它返回,而是希望该方法被异步调用。
我意识到这是一个基本问题,但我没能在别处找到答案。 是