Apigee 및 Apigee Hybrid 문서입니다.
Apigee Edge 문서 보기
Apigee에는 다음과 같은 서비스를 제공하는 Apigee API라는 강력한 유틸리티가 있습니다.
- API 프록시 배포 또는 배포 취소
- 가상 호스트, 키 저장소 및 트러스트 저장소 등 구성
- 키-값 맵(KVM), API 제품, 개발자 앱, 개발자, 소비자 키 등의 항목 생성, 삭제, 업데이트
- 이러한 항목의 정보 검색
이러한 서비스는 Apigee 플랫폼의 관리 서버라는 구성요소를 통해 액세스할 수 있습니다. 이러한 서비스는 간단한 API 호출을 통해 쉽게 호출할 수 있습니다.
런타임에 API 프록시의 이러한 서비스를 하나 이상 사용해야 하는 경우가 있습니다. KVM, OAuth 액세스 토큰, API 제품, 개발자 앱, 개발자, 소비자 키 등의 항목에 키-값 쌍 형식의 유용한 정보, 커스텀 속성 또는 프로필의 일부가 포함되어 있기 때문입니다.
예를 들어 KVM에 다음 정보를 저장하여 런타임에 더욱 안전하게 사용하고 액세스할 수 있습니다.
- 백엔드 대상 URL
- 환경 속성
- 백엔드 또는 타사 시스템의 보안 사용자 인증 정보
마찬가지로, 런타임 시 API 제품 또는 개발자의 이메일 주소의 목록을 가져오고 싶을 수 있습니다. 이 정보는 개발자 앱 프로필의 일부로 제공됩니다.
이 모든 정보는 런타임에 효과적으로 사용되어 Apigee 내의 정책이나 커스텀 코드에서 동적 동작을 사용 설정할 수 있습니다.
안티패턴
Apigee API는 관리 작업에 적합하고 유용하게 사용되며 API 프록시 흐름에서 런타임 로직을 수행하는 데 사용해서는 안 됩니다. 그 이유는 다음과 같습니다.
- API 프록시에서 KVM, OAuth 액세스 토큰과 같은 항목에 대한 정보에 액세스하는 용도로 Apigee API를 사용할 수 있으며 다른 용도로 사용할 경우 관리 서버에 대한 종속성이 생깁니다.
- 관리 서버는 Apigee 런타임 구성요소의 일부가 아니므로 가용성이 높지 않을 수 있습니다.
- 또한 관리 서버는 동일한 네트워크 또는 데이터 센터 내에 프로비저닝되지 않으므로 런타임에 네트워크 지연 시간이 발생할 수 있습니다.
- 관리 서버의 항목은 장기간 캐시되므로 단기간에 쓰기 및 읽기를 수행하면 API 프록시에서 최신 데이터를 즉시 볼 수 없습니다.
- 런타임에 네트워크 홉을 증가시킵니다.
아래의 코드 샘플에서는 커스텀 자바스크립트 코드를 통해 Apigee API 호출을 수행하여 KVM에서 정보를 검색합니다.
var response = httpClient.send('https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/keyvaluemaps')
관리 서버를 사용할 수 없으면 Apigee API 호출을 호출하는 자바스크립트 코드가 실패합니다. 그러면 이후에 API 요청이 실패합니다.
영향
- 런타임 시 관리 서버에 대한 추가 종속성이 도입됩니다. 관리 서버에 오류가 발생하면 API 호출도 영향을 받습니다.
- Apigee API의 사용자 인증 정보는 로컬로 저장하거나 암호화된 KVM과 같은 보안 저장소에 저장해야 합니다.
- 네트워크를 통한 관리 서비스 호출이 성능에 영향을 줍니다.
- 관리 서버의 캐시 만료 시간이 길면 업데이트된 값이 즉시 표시되지 않을 수도 있습니다.
권장사항
런타임에 KVM, API 제품, 개발자 앱, 개발자, 소비자 키 등의 항목에서 정보를 검색하는 더 효과적인 방법이 있습니다. 예를 들면 다음과 같습니다.
- KeyValueMapOperations 정책을 사용하여 KVM에서 정보에 액세스합니다. 다음은 KVM에서 정보를 검색하는 방법을 보여주는 샘플 코드입니다.
<!-- /antipatterns/examples/2-6.xml --> <KeyValueMapOperations mapIdentifier="urlMap" async="false" continueOnError="false" enabled="true" name="GetURLKVM"> <DisplayName>GetURLKVM</DisplayName> <ExpiryTimeInSecs>86400</ExpiryTimeInSecs> <Scope>environment</Scope> <Get assignTo="urlHosti" index="2"> <Key> <Parameter>urlHost_1</Parameter> </Key> </Get> </KeyValueMapOperations>
- API 프록시에서 API 제품, 개발자 앱, 개발자, 소비자 키 등에 관한 정보에 액세스하려면 다음 안내 중 하나를 따르세요.
- API 프록시 흐름에 VerifyAPIKey 정책이 있으면 이 정책의 일부로 채워진 흐름 변수를 사용하여 정보에 액세스할 수 있습니다. 다음은 자바스크립트를 사용하여 개발자 앱의 이름과 created_by 정보를 검색하는 방법을 보여주는 샘플 코드입니다.
<!-- /antipatterns/examples/2-7.xml --> print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name")); print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
- API 프록시 흐름에 VerifyAPIKey 정책이 없으면
AccessEntity
및ExtractVariables
정책을 사용하여 API 제품, 개발자 앱 등의 프로필에 액세스할 수 있습니다.- AccessEntity 정책을 사용하여 개발자 앱의 프로필을 검색합니다.
<!-- /antipatterns/examples/2-8.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AccessEntity async="false" continueOnError="false" enabled="true" name="GetDeveloperApp"> <DisplayName>GetDeveloperApp</DisplayName> <EntityType value="app"></EntityType> <EntityIdentifier ref="developer.app.name" type="appname"/> <SecondaryIdentifier ref="developer.id" type="developerid"/> </AccessEntity>
- ExtractVariables 정책을 사용하여 개발자 앱에서
appId
를 추출합니다.<!-- /antipatterns/examples/2-9.xml --> <ExtractVariables name="Extract-Developer App-Info"> <!-- The source element points to the variable populated by AccessEntity policy. The format is <policy-type>.<policy-name> In this case, the variable contains the whole developer profile. --> <Source>AccessEntity.GetDeveloperApp"</Source> <VariablePrefix>developerapp</VariablePrefix> <XMLPayload> <Variable name="appld" type="string"> <!-- You parse elements from the developer profile using XPath. --> <XPath>/App/AppId</XPath> </Variable> </XMLPayload> </ExtractVariables>
- AccessEntity 정책을 사용하여 개발자 앱의 프로필을 검색합니다.
- API 프록시 흐름에 VerifyAPIKey 정책이 있으면 이 정책의 일부로 채워진 흐름 변수를 사용하여 정보에 액세스할 수 있습니다. 다음은 자바스크립트를 사용하여 개발자 앱의 이름과 created_by 정보를 검색하는 방법을 보여주는 샘플 코드입니다.