通过 Azure API 管理将 REST API 公开为 SOAP
Expose REST API as SOAP via Azure API Management
我们有一组现有的 REST APIs (.NET Core)。我们需要将这些 API 公开为 SOAP 服务,希望通过使用 Azure API 管理。这可能吗?
我看过很多关于将 SOAP 服务公开为 REST API 的帖子,但反过来却不是。
当你在 APIM 中将 SOAP API 作为 REST 时,它所做的只是为操作创建一堆策略来动态处理 request/response 有效负载并转换 JSON 到 XML。即使没有创建反向转换的向导 - 这肯定是可能的。
您必须使用 APIM 政策编写自己的转换逻辑。以下是您需要的一些东西:
- set-body policy https://docs.microsoft.com/en-us/azure/api-management/api-management-transformation-policies#SetBody 将 JSON bosy 替换为 XML 和其他方式。看到它支持 Liquid 模板,可能会派上用场。
- 它没有记录(出于某种原因),但在策略表达式中,您可以使用 context.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 对于请求。
我们有一组现有的 REST APIs (.NET Core)。我们需要将这些 API 公开为 SOAP 服务,希望通过使用 Azure API 管理。这可能吗?
我看过很多关于将 SOAP 服务公开为 REST API 的帖子,但反过来却不是。
当你在 APIM 中将 SOAP API 作为 REST 时,它所做的只是为操作创建一堆策略来动态处理 request/response 有效负载并转换 JSON 到 XML。即使没有创建反向转换的向导 - 这肯定是可能的。
您必须使用 APIM 政策编写自己的转换逻辑。以下是您需要的一些东西:
- set-body policy https://docs.microsoft.com/en-us/azure/api-management/api-management-transformation-policies#SetBody 将 JSON bosy 替换为 XML 和其他方式。看到它支持 Liquid 模板,可能会派上用场。
- 它没有记录(出于某种原因),但在策略表达式中,您可以使用 context.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 对于请求。