Предоставьте REST API как SOAP с помощью Azure API Management - PullRequest
0 голосов
/ 12 октября 2018

У нас есть существующий набор REST API (.NET Core).У нас есть требование представить эти API-интерфейсы в качестве SOAP-сервисов, надеемся, с помощью Azure API Management.Возможно ли это?

Я видел множество публикаций о том, чтобы представить сервисы SOAP как REST API, но не наоборот.

1 Ответ

0 голосов
/ 24 октября 2018

Когда вы используете API-интерфейс SOAP в качестве REST в APIM, все, что он делает, - это создает набор политик для операций, позволяющих оперативно обрабатывать полезные данные запросов и ответов и преобразовывать 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 текущего запроса(то же самое для ответа).Вот этот интерфейс:
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 в REST в APIM, чтобы увидеть, какого родаполитики создаются для преобразования XML в JSON для ответов и JSON в XML для запросов.
...