Как отправить данные из 1 API в другой API с помощью apigee - PullRequest
0 голосов
/ 24 января 2019

Я недавно начал использовать apigee proxy. Пожалуйста, не блокируйте меня.Я использую почтальон для публикации данных в прокси.Я назначил политику извлечения для извлечения некоторых значений из данных json, таких как скорость, широта, долгота и т. Д. Затем я использовал политику назначения для преобразования скорости в gpsspeed и т. Д. В соответствии с требованиями клиента.После этого я использую политику javascript для вывода, если скорость выше> 50, то высокая или низкая.Я привожу пример данных.Теперь я хочу переслать результирующие данные в другой api. Может быть, все, что apigee предлагает для тестирования. Я хочу видеть данные в результирующем api.Я использовал политику вызова сервисов для отправки данных на другой URL.Я прилагаю политику.

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <ServiceCallout name="ServiceCallout-GeocodingRequest1">
 <DisplayName>Inline request message</DisplayName>
 <Request variable="callAnotherService">
    <Set>
        <Payload contentType="application/json">
          {response.content} // reading data from javascript policy
        </Payload>
    </Set>
</Request>
<Response>CalloutResponse</Response>
<Timeout>30000</Timeout>
<HTTPTargetConnection>
    <URL>http://httpbin.org/anything</URL>
</HTTPTargetConnection>

trace call Я прикрепил политику javascript перед ней.Я прилагаю политику.

 var content = context.getVariable("response.content") //read the response
  content = JSON.parse(content); //parse into an object
  if (content.speed > 50) { //apply the condition
  content.speed = "high";
   }
  else {
  content.speed = "low";
  }
  context.setVariable("response.content", JSON.stringify(content)); //set it 
  back on the response

Может кто-нибудь помочь мне, как я могу переслать данные в другой API?Правильна ли моя процедура? Является ли процедура извлечения переменных из политики сценариев Java верной? Пожалуйста, наставьте меня.

1 Ответ

0 голосов
/ 30 января 2019

Хорошо, если вы уверены, что значение после setVarible не пустое, попробуйте код ниже.

Примечание: В вашей политике JavaScript я изменил имя переменной после установки значениявернемся к нему (не путая).

var content = context.getVariable("response.content") //read the response
content = JSON.parse(content); //parse into an object
if(content.speed > 50){ 
    content.speed = "high";
}
else{
    content.speed = "low";
}
context.setVariable("serviceCalloutRequest", JSON.stringify(content)); //I have changed from "response.content" to "serviceCalloutRequest"

И попробуйте это в Политике отзыва сервисов:

<Request clearPayload="true" variable="callAnotherService">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Set>       
        <Payload variablePrefix="@" variableSuffix="#">@serviceCalloutRequest#</Payload>
        <Verb>POST</Verb>
    </Set>
</Request>

Используйте variablePrefix и variableSuffix чтобы ссылаться на значение, которое вы присвоили в своей политике javascript, в этом случае я ссылаюсь на «serviceCalloutRequest».

...