azure - 通过 Azure API 管理将 REST API 公开为 SOAP
问题描述
我们有一组现有的 REST API (.NET Core)。我们需要将这些 API 公开为 SOAP 服务,希望通过使用 Azure API 管理。这可能吗?
我看过很多关于将 SOAP 服务公开为 REST API 的帖子,但反之则不然。
解决方案
当您在 APIM 中将 SOAP API 作为 REST 时,它所做的只是为操作创建一系列策略以动态处理请求/响应负载并将 JSON 转换为 XML。即使没有向导可以创建反向转换 - 这肯定是可能的。
您必须使用 APIM 策略编写自己的转换逻辑。以下是您需要的一些东西:
- set-body 策略https://docs.microsoft.com/en-us/azure/api-management/api-management-transformation-policies#SetBody用 XML 和其他方式替换 JSON bosy。看到它支持 Liquid 模板,这可能会派上用场。
- 它没有记录(出于某种原因),但在策略表达式中,您可以使用 context.Request.Body.AsSoap() 来获取当前请求的 ISoapMessage(与响应相同)。这是这个界面:
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 以获取请求。
推荐阅读
- android-studio - Android/Kotlin:显示配对的蓝牙设备列表
- python - 字典拆分/理解
- c++ - 将 while(true) 与线程一起使用是真的吗?
- r - 使用方差分析测量回归系数的贡献
- ejs - NestJs 电子邮件无法使用 ejs 模板动态数据发送
- path - 有没有办法修复 Nunjucks 将文件扩展名更改为 .html?
- python - 从单词中获取词素(包括词干)的最佳 Python 库是什么?
- xamarin - 带有 xamarin 表单的 zxing 扫描仪适用于颠倒的移动设备
- angular - Angular 中的单元测试无法读取属性
- java - 如何正确处理底部导航视图中的片段切换