目前我正在开发 APIM,我已经设置了两个 api
在 UI 中,用户单击“生成并发送电子邮件 API”。此时我需要调用生成的pdf api和电子邮件pdf api。另外,我不想向 UI 公开电子邮件 API。
我在 APIM 中尝试的首先称为“GeneratePDF API”,在其中我使用“Email PDF API”进行调用。
这里的问题是引发内部服务器错误。但API直接运行完全没问题。
我需要知道
使用发送请求策略在 APIM 级别完全可以做到这一点:https://learn.microsoft.com/en-us/azure/api-management/api-management-sample-send-request。在进行实验时,请务必使用 Azure 门户中的 API 测试控制台,因为它具有内置的跟踪功能,可以极大地帮助您了解调用可能失败的原因。
是的,这可以通过使用 APIM 编排策略来实现。基本上,是一个嵌套的发送请求策略。
过程
查看示例脚本。这里最困难的部分是确定 JSON 文档的规范。这应该在 set-body 策略中完成。
<send-request mode="new" response-variable-name="pdfRespose" ignore-error="false">
<set-url>API-HERE</set-url>
<set-method>POST</set-method>
<set-body>@{
// any transformation here or remove to use request document
}</set-body>
</send-request>
<choose>
<!-- Check 200 status code and run the next step -->
<when condition="@(context.Response.StatusCode < 400)">
<!-- Send email request with required parameters-->
<send-request mode="new" response-variable-name="emailREsponse" ignore-error="false">
<set-url>API-HERE</set-url>
<set-method>POST</set-method>
<set-body>@{
var document = (JObject)context.Variables["pdfRespose"];
return document?.ToString();
}</set-body>
</send-request>
<choose>
<!-- Check 200 status -->
<when condition="@(context.Response.StatusCode < 400)">
<return-response>
<set-status code="@(context.Response.StatusCode)" />
<set-body>@{
// send response and status code
}</set-body>
</return-response>
</when>
</choose>
</when>
<otherwise>
<return-response>
<set-status code="@(context.Response.StatusCode)" reason="Error" />
</return-response>
</otherwise>
</choose>