Apigee Edge 문서입니다.
Go to the
Apigee X documentation. info
이 주제에서는 JavaScript를 사용하여 응답 메시지에 HTTP 헤더를 동적으로 추가하는 방법과 JSON 응답을 파싱하고 요청 앱에 속성의 하위 집합을 반환하는 방법을 알아봅니다.
샘플 코드 다운로드 및 사용해 보기
이 설명서 예시 정보
이 설명서 예시는 JavaScript에서 API 동작을 구현하는 API 프록시 패턴을 보여줍니다. JavaScript 예시는 간단한 변수 와 메시지 콘텐츠를 사용하는 방법을 보여주기 위해 설계되었습니다. 한 샘플은 변수를 가져오고 설정하는 방법을 보여줍니다. 두 번째 예시는 JSON을 파싱하고 결과에서 메시지를 구성하는 방법을 보여줍니다.
API 프록시에는 두 개의 JavaScript 샘플이 있습니다.
setHeaders.js: 이 JavaScript는 API 프록시가 호출될 때 설정되는 몇 가지 변수의 값을 가져옵니다. JavaScript는 이러한 변수를 응답 메시지에 추가하므로 요청할 때마다 변수 값을 확인할 수 있습니다.minimize.js: 이 JavaScript는 메시지 콘텐츠를 사용하는 방법을 보여줍니다. 이 샘플의 기본 아이디어는 서비스가 종종 필요한 것보다 더 많은 데이터를 반환한다는 것입니다. 따라서 JavaScript는 응답 메시지를 파싱하고 몇 가지 흥미로운 속성을 추출한 후 이를 사용하여 응답 메시지의 콘텐츠를 빌드합니다.
setHeader.js의 코드:
context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name")); context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name")); context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name")); context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath")); context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix")); context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));
minimize.js의 코드:
// Parse the respose from the target. var res = JSON.parse(context.proxyResponse.content); // Pull out only the information we want to see in the response. var minimizedResponse = { city: res.root.city, state: res.root.state }; // Set the response variable. context.proxyResponse.content = JSON.stringify(minimizedResponse);
컨텍스트 객체를 통해 JavaScript에서 흐름 변수에 액세스할 수 있습니다. 이 객체는 Edge JavaScript 객체 모델의 일부입니다. 객체 모델에 대한 자세한 내용은 JavaScript 객체 모델을 참조하세요.
시작하기 전에
이 설명서 예시를 살펴보기 전에 다음과 같은 기본 개념도 숙지해야 합니다.
- 정책이란 무엇이며 정책을 프록시에 연결하는 방법. 정책에 대한 좋은 소개는 정책이란 무엇인가요?를 참조하세요.
- 흐름 구성에 설명된 대로 프록시 흐름의 구조. 흐름을 사용하면 API 프록시에서 정책이 실행되는 순서를 지정할 수 있습니다. 이 예시에서는 여러 정책이 생성되어 API 프록시 흐름에 추가됩니다.
- API 프록시 구성 참조에 설명된 대로 파일 시스템에서 API 프록시 프로젝트가 구성되는 방식 .
- XML, JSON, JavaScript에 대한 실무 지식. 이 예시에서는 파일 시스템에 있는 XML 파일을 사용하여 API 프록시와 정책을 빌드합니다.
샘플 코드를 다운로드한 경우 이 주제에서 설명하는 모든 파일을 javascript-cookbook 샘플 폴더에서 찾을 수 있습니다. 다음 섹션에서는 샘플 코드에 대해 자세히 설명합니다.
프록시 흐름 이해
API 프록시에서 JavaScript를 실행하려면 '단계'라는 정책 연결을 사용하여 흐름에 연결해야 합니다. JavaScript 유형의 정책 (대문자 표기)에는 JavaScript 파일 이름에 대한 참조만 포함되어 있습니다. ResourceURL 요소를 사용하여 정책을 JavaScript 파일로 지정합니다.
예를 들어 다음 정책은 JavaScript 파일이라고 하는
setHeader.js를 참조합니다.
<Javascript name='setHeaders' timeLimit='200'> <ResourceURL>setHeaders.js</ResourceURL> </Javascript>
이 정책을 다른 정책 유형과 마찬가지로 API 프록시 흐름에 연결할 수 있습니다. 정책을 API 프록시 흐름에 연결하면 JavaScript를 실행해야 하는 위치를 나타냅니다. 이렇게 하면 API 프록시를 통해 메시지가 '흐르는' 동안 요청 메시지 또는 응답 메시지 와 상호작용하는 JavaScript를 실행할 수 있습니다. 이 예시에서는 정책이 두 가지 작업을 수행하므로 두 JavaScript 모두 응답 흐름에서 실행됩니다. 즉, 응답 메시지에 HTTP 헤더를 설정하고 Apigee Edge가 요청 앱에 반환하는 응답 메시지를 '최소화'합니다.
관리 UI에서 이 흐름 구성을 열면 아래의 흐름 구성 이 표시됩니다.
탐색기 창 에서 프록시 엔드포인트 > 기본값 > PostFlow 를 선택합니다.

'기본값'이라는 ProxyEndpoint의 해당 XML 구성은 다음과 같습니다.
<ProxyEndpoint name="default"> <PostFlow> <Response> <!-- Steps reference policies under /apiproxy/policies --> <!-- First, set a few HTTP headers with variables for this transaction. --> <Step><Name>setHeaders</Name></Step> <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript --> <Step><Name>transform</Name></Step> <!-- Finally, use JavaScript to create minimized response with just city and state. --> <Step><Name>minimize</Name></Step> </Response> </PostFlow> <HTTPProxyConnection> <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.--> <BasePath>/javascript-cookbook</BasePath> <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. --> <VirtualHost>default</VirtualHost> </HTTPProxyConnection> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
다음은 흐름 요소의 요약입니다.
- <Request> - <Request> 요소는 여러 <Step> 요소로 구성됩니다. 각 단계는 이 주제의 나머지 부분에서 만드는 정책 중 하나를 호출합니다. 이러한 정책은 JavaScript를 API 프록시 흐름에 연결하며 정책 연결 위치에 따라 JavaScript가 실행되는 시점이 결정됩니다.
- <Response> - <Response> 요소에도
<Steps>가 포함되어 있습니다. 이러한 단계는 대상의 최종
응답을 처리하는 정책도 호출합니다 (이 예시에서는 Apigee의 모의 서비스 대상임.
/apiproxy/targets/default.xml아래의 HTTPTargetConnection 설정을 참고하세요). - <HTTPProxyConnection> - 앱이 이 API를 사용하기 위해 호출하는 네트워크 주소를
정의하는 호스트 및 URI 경로를 지정합니다.
- <RouteRule> - 이 요소는 ProxyEndpoint에서 호출하는 TargetEndpoint 구성을 지정합니다.
프록시에 JavaScript 코드 추가
JavaScript는 Python 스크립트, Java JAR 파일, XSLT 파일 등과 같이 리소스로 저장됩니다. JavaScript를 처음 사용하는 경우 JavaScript 파일을 API 프록시에 저장하는 것이 가장 쉽습니다. JavaScript는 고급 단계에서 최대한 일반적이고 재사용 가능하도록 만든 후 환경 또는 조직 수준에 저장해야 합니다. 이렇게 하면 여러 API 프록시에 동일한 JavaScript 파일을 저장할 필요가 없으므로 빠르게 관리할 수 없게 되는 것을 방지할 수 있습니다.
조직 및 환경 수준에서 리소스를 저장하는 방법을 알아보려면 리소스 파일을 참조하세요.
사용해 보기
프록시를 배포하고 호출하는 방법은 JavaScript 설명서 README를 참조하세요.
API 프록시 가져오기 및 배포
변경한 후에는 관리 UI의 API 프록시 빌더 도구에서 API 프록시를 저장 할 수 있습니다.
또는 디렉터리에서 다음 명령어를 실행할 수 있습니다.
/api-platform-samples/doc-samples/javascript-cookbook.
$ sh deploy.sh
JavaScript 테스트
디렉터리에서 다음 명령어를 실행합니다. /api-platform-samples/doc-samples/javascript-cookbook
$ sh invoke.sh
curl 플래그 -v는 셸 스크립트에서 JavaScript로 수정된 응답
메시지의 HTTP 헤더를 보는 데 사용됩니다.
다음과 같이 요청을 직접 제출할 수 있습니다.
$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook
JavaScript가 제대로 실행되면 다음과 같은 응답이 표시됩니다.
< X-Apigee-Demo-Target: default < X-Apigee-Demo-ApiProxyName: simple-javascript < X-Apigee-Demo-ProxyName: default < X-Apigee-Demo-ProxyBasePath: /javascript-cookbook < X-Apigee-Demo-ProxyPathSuffix: /xml < X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml {"city":"San Jose","state":"CA"}
이제 JavaScript를 수정하여 새로운 것을 시도하고, API 프록시를 다시 배포하고, 동일한 요청을 제출하여 결과를 확인할 수 있습니다. 변경사항이 적용되도록 하려면 JavaScript가 포함된 API 프록시를 항상 배포해야 합니다.
스크립트 오류
JavaScript를 작성할 때 오류가 발생할 수 있습니다. API 프록시에서 발생하는 JavaScript 오류의 형식은 다음과 같습니다.
{ "fault":{ "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"", "detail":{ "errorcode":"steps.javascript.ScriptExecutionFailed" } } }
JavaScript를 사용해야 하는 경우
Apigee Edge에서는 일반적으로 특정 기능을 구현하는 방법이 두 가지 이상 있습니다. 가능한 경우 기본 제공 정책을 사용하고 JavaScript에서 모든 API 프록시 논리를 코딩하려는 유혹을 피하세요. Apigee Edge는 컴파일된 JavaScript를 활용하여 성능을 개선하지만 JavaScript가 정책만큼 잘 실행될 가능성은 낮습니다. JavaScript는 유지보수 및 디버깅이 더 어려울 수 있습니다. JavaScript는 요구사항에 고유한 기능에 사용하세요.
맞춤 기능의 성능이 우려되는 경우 가능한 경우 Java를 사용하세요.
요약
이 설명서 주제에서는 맞춤 동작을 구현하기 위해 API 프록시 구성에 JavaScript를 포함하는 방법을 알아보았습니다. 샘플에서 구현된 맞춤 동작은 변수를 가져오는 방법과 JSON을 파싱하고 맞춤 응답 메시지를 구성하는 방법을 보여줍니다.