在 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 呈现给消费者。
- 如果您希望前端用户轮询 API,那么在 header 位置使用轮询 url 的 202 Accepted 响应就是这种方式。
- 如果您想将 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 呈现给消费者。两种模式均有效。
是否可以在 APIM 请求中进行内部短轮询,然后使用同步响应进行响应?
流程是这样的:
1. APIM收到一个请求
2. APIM触发持久函数编排。
3. APIM 等待并轮询持久函数响应(通过策略?)
4. APIM回复实际结果
对于 API 消费者来说,这将是一个单一的请求。
这是常见的模式吗?还是仅向 API 消费者提供 202 响应轮询 URL 更好?我预计该请求只需要几秒钟到不到一分钟的时间。
有没有我还没有考虑过的更标准的方法?
这取决于您希望如何将 API 呈现给消费者。
- 如果您希望前端用户轮询 API,那么在 header 位置使用轮询 url 的 202 Accepted 响应就是这种方式。
- 如果您想将 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 呈现给消费者。两种模式均有效。