Предоставление REST API как SOAP через Azure API Management

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

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


person Si Reza    schedule 11.10.2018    source источник


Ответы (1)


Когда вы используете SOAP API в качестве REST в APIM, все, что он делает, - это создает набор политик для операций для обработки данных запроса / ответа на лету и преобразования JSON в XML. Хотя нет мастера для создания преобразований для реверса - это, безусловно, возможно.

Вам нужно будет написать свою собственную логику преобразования, используя политики APIM. Вот несколько вещей, которые вам понадобятся:

  • политика set-body 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 to REST в APIM, чтобы увидеть, какие политики созданы для преобразования XML в JSON для ответов и JSON в XML для запросов.
person Vitaliy Kurokhtin    schedule 23.10.2018