API 관리 - SOAP POST를 GET으로 변환
13412 단어 apiprogrammingcsharpazure
요청 본문의 데이터를 GET 작업으로 전달해야 합니다.
SOAP 서비스 가져오기
대중 비누 서비스
https://www.dataaccess.com/webservicesserver/numberconversion.wso?op=NumberToDollars은 imported in API Management입니다.
API 관리에서 가져온 SOAP 서비스:
SOAP 서비스에 대한 요청 본문:
<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">
<Body>
<NumberToDollars xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.dataaccess.com/webservicesserver/">
<dNum>1</dNum>
</NumberToDollars>
</Body>
</Envelope>
대상 API
Echo API의 추가 작업은 mocked 상태 200을 반환합니다.
<policies>
<inbound>
<base />
<mock-response status-code="200" content-type="application/json" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
이 대상 API는 실제 API로 대체되어야 합니다.
POST를 GET으로 변환
들어오는 요청 본문은 이스케이프되고 제거해야 하는 추가 큰따옴표도 있습니다.
string xml = context.Request.Body.As<string>(preserveContent: true);
xml = Regex.Unescape(xml);
// Remove the double quotes
xml = xml.Remove(0,1);
xml = xml.Remove(xml.Length-1,1);
XML 문자열을 JSON 개체로 변환합니다.
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var json = JsonConvert.SerializeObject(doc);
var data = JObject.Parse(json );
변환된 JSON 문자열:
{
"?xml": {
"@version": "1.0",
"@encoding": "utf-8"
},
"Envelope": {
"@xmlns": "http://www.w3.org/2003/05/soap-envelope",
"Body": {
"NumberToDollars": {
"@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"@xmlns": "http://www.dataaccess.com/webservicesserver/",
"dNum": "1"
}
}
}
}
마지막으로 원하는 데이터가 JSON 개체에서 반환되어야 합니다.
JObject envelope = data["Envelope"] as JObject;
JObject body = envelope["Body"] as JObject;
JObject numberToDollars = body["NumberToDollars"] as JObject;
return numberToDollars["dNum"].Value<string>();
데이터는 GET 요청과 함께 모의 API로 전달되어야 합니다.
<set-method>GET</set-method>
<set-backend-service base-url="https://rfqapiservicey27itmeb4cf7q.azure-api.net/echo/200/" />
<rewrite-uri template="@("/test?q=" + context.Variables.GetValueOrDefault<string>("num"))" copy-unmatched-params="false" />
결과
전체 정책:
<policies>
<inbound>
<base />
<set-variable name="num" value="@{
string xml = context.Request.Body.As<string>(preserveContent: true);
xml = Regex.Unescape(xml);
// Remove the double quotes
xml = xml.Remove(0,1);
xml = xml.Remove(xml.Length-1,1);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var data = JObject.Parse(JsonConvert.SerializeObject(doc));
JObject envelope = data["Envelope"] as JObject;
JObject body = envelope["Body"] as JObject;
JObject numberToDollars = body["NumberToDollars"] as JObject;
return numberToDollars["dNum"].Value<string>();
}" />
<set-method>GET</set-method>
<set-backend-service base-url="https://rfqapiservicey27itmeb4cf7q.azure-api.net/echo/200/" />
<rewrite-uri template="@("/test?q=" + context.Variables.GetValueOrDefault<string>("num"))" copy-unmatched-params="false" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
API 관리에서 테스트:
추적 로그:
GitHub answer
Reference
이 문제에 관하여(API 관리 - SOAP POST를 GET으로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/markusmeyer13/api-management-convert-soap-post-to-get-566o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)