通过 Azure API Management 将 REST API 公开为 SOAP



我们有一组现有的REST API(.NET Core(。我们需要将这些 API 公开为 SOAP 服务,希望通过使用 Azure API 管理。这可能吗?

我看过很多关于将 SOAP 服务公开为 REST API 的文章,但不是相反。

当您在 APIM 中将 API 作为 REST 时,它所做的只是为操作创建一堆策略,以动态处理请求/响应有效负载并将 JSON 转换为 XML。即使没有向导来创建反向转换 - 这肯定是可能的。

您必须使用 APIM 策略编写自己的转换逻辑。以下是您需要的一些东西:

  • set-body 策略 https://learn.microsoft.com/en-us/azure/api-management/api-management-transformation-policies#SetBody 将 JSON bosy 替换为 XML 和其他方式。看到它支持液体模板,这可能会派上用场。
  • 它没有记录(出于某种原因(,但在策略表达式中,您可以使用上下文。Request.Body.AsSoap(( 获取当前请求的 ISoapMessage (与 Response 相同(。这是这个界面:
public enum SoapVersionLiteral
{
Soap11,
Soap12
}
public interface ISoapMessage
{
SoapVersionLiteral Version { get; set; }
string Action { get; set; }
IEnumerable<ISoapHeader> Headers { get; set; }
ISoapBody Body { get; set; }
}
public interface ISoapHeader
{
XName Name { get;  }
string Value { get; }
Uri Actor { get;  }
bool MustUnderstand { get; }
}
public interface ISoapBody
{
XName Name { get; }
XElement Contents { get; }
}
  • 您可以尝试在野外找到一些 WSDL,并将它们作为 SOAP 导入到 APIM 中的 REST 中,以查看创建了哪种策略来将 XML 转换为 JSON 以进行响应,将 JSON 转换为 XML 以用于请求。

最新更新