在 Azure API 管理请求中轮询持久函数

Poll a Durable Function inside an Azure API Management request

是否可以在 APIM 请求中进行内部短轮询,然后使用同步响应进行响应?

流程是这样的:
1. APIM收到一个请求
2. APIM触发持久函数编排。
3. APIM 等待并轮询持久函数响应(通过策略?)
4. APIM回复实际结果

对于 API 消费者来说,这将是一个单一的请求。

这是常见的模式吗?还是仅向 API 消费者提供 202 响应轮询 URL 更好?我预计该请求只需要几秒钟到不到一分钟的时间。

有没有我还没有考虑过的更标准的方法?

这取决于您希望如何将 API 呈现给消费者。

  1. 如果您希望前端用户轮询 API,那么在 header 位置使用轮询 url 的 202 Accepted 响应就是这种方式。
  2. 如果您想将 API 伪装成同步 API ,则必须在 APIM 策略中实现轮询模式本身。为此,请参考以下 post

Use API-M To Mask Async APIs When Moving Implementation to Logic Apps,即使它属于逻辑应用程序,您也可以为任何异步实现相同的模式 API

摘自link:

<outbound>
   <base />
   <retry condition="@(((IResponse)context.Variables["var"]).StatusCode == 202)" count="10" interval="30">
      <send-request mode="new" response-variable-name="var" ignore-error="false">
         <set-url>@(context.Response.Headers["location"][0])</set-url>
         <set-method>GET</set-method>
      </send-request>
   </retry>
   <return-response response-variable-name="var" />
</outbound>

正如我之前指出的,这实际上取决于您希望如何将 API 呈现给消费者。两种模式均有效。