<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
대상
Python 스크립트 정책을 사용하면 맞춤설정된 Python 기능을 API 프록시 흐름에 추가할 수 있습니다. 특히 필요한 기능이 Edge 즉시 사용 가능한 정책을 벗어나는 경우 제공합니다
Python 언어 지원은 Jython 버전 2.5.2를 통해 제공됩니다. 추가하는 타사 라이브러리는 '순수 Python'(Python에만 구현)이어야 합니다. 라이브러리 추가에 대한 자세한 내용은 리소스 파일을 참조하세요.
Python 정책에는 실제 코드가 없습니다. 대신 Python 정책은 Python 리소스를 참조하고 Python 스크립트가 실행되는 API 흐름의 단계를 정의합니다. 다음에서 업로드할 수 있습니다.
또는 관리 UI 프록시 편집기를 통해 스크립트를 추가하거나
로컬에서 개발하는 API 프록시의 /resources/py
디렉터리
샘플
Python 정책 및 스크립트
Python 스크립트 정책
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> </Script>
이 예시에서는 ResourceURL 요소가 관련 Python 스크립트 리소스를 지정합니다.
Python 스크립트
여기에는 Python 스크립트 자체에 포함할 수 있는 항목이 표시됩니다.
import base64 username = flow.getVariable("request.formparam.client_id") password = flow.getVariable("request.formparam.client_secret") base64string = base64.encodestring('%s:%s' % (username, password))[:-1] authorization = "Basic "+base64string flow.setVariable("authorizationParam",authorization)
요소 참조
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> <IncludeURL>py://myscript_dependency.py</IncludeURL> </Script>
The following table describes attributes that are common to all policy parent elements:
Attribute | Description | Default | Presence |
---|---|---|---|
name |
The internal name of the policy. The value of the Optionally, use the |
N/A | Required |
continueOnError |
Set to Set to |
false | Optional |
enabled |
Set to Set to |
true | Optional |
async |
This attribute is deprecated. |
false | Deprecated |
<DisplayName> element
Use in addition to the name
attribute to label the policy in the
management UI proxy editor with a different, natural-language name.
<DisplayName>Policy Display Name</DisplayName>
Default |
N/A If you omit this element, the value of the policy's |
---|---|
Presence | Optional |
Type | String |
<ResourceURL> 요소
이 요소는 API 흐름에서 실행되는 기본 Python 파일을 지정합니다. 이 파일을 API 프록시 범위(API 프록시 번들의 /apiproxy/resources/py
아래 또는 API 프록시 편집기 탐색창의 스크립트 섹션) 또는 리소스 파일의 설명대로 여러 API 프록시에 다시 사용할 수 있도록 조직이나 환경 범위에 저장할 수 있습니다. 코드에서 자바스크립트 객체 모델의 객체, 메서드, 속성을 사용할 수 있습니다.
<ResourceURL>py://myscript.py</ResourceURL>
기본값: | 없음 |
Presence: | 필수 |
유형: | 문자열 |
<IncludeURL> 요소
<ResourceURL>
요소를 사용하여 지정한 기본 Python 파일에 종속 항목으로 로드할 Python 파일을 지정합니다. 스크립트는 정책에 나열된 순서대로 평가됩니다.
추가 <IncludeURL>
요소를 사용하여 Python 종속 항목 리소스를 두 개 이상 포함합니다.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
기본값: | 없음 |
Presence: | 선택사항 |
유형: | 문자열 |
오류 코드
이 섹션에서는 반환되는 오류 코드 및 오류 메시지와 오류 변수를 설명합니다. 이 정책이 오류를 트리거할 때 Edge에서 설정되는 값 오류를 처리하기 위해 오류 규칙을 개발 중인 경우, 이 정보는 중요합니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항 및 오류 처리를 참조하세요.
런타임 오류
이러한 오류는 정책이 실행될 때 발생할 수 있습니다.
오류 코드 | HTTP 상태 | 원인 | 해결 |
---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 | PythonScript 정책은 여러 유형의 ScriptExecutionFailed 오류를 발생시킬 수 있습니다. 흔히 볼 수 있는 오류 유형에는 NameError 및 ZeroDivisionError가 있습니다. | build |
배포 오류
이 오류는 이 정책이 포함된 프록시를 배포할 때 발생할 수 있습니다.
오류 이름 | 원인 | 해결 |
---|---|---|
InvalidResourceUrlFormat |
PythonScript 정책의 <ResourceURL> 또는 <IncludeURL> 요소 내에서 지정된 리소스 URL 형식이 잘못된 경우 API 프록시 배포가 실패합니다. |
build |
InvalidResourceUrlReference |
<ResourceURL> 또는 <IncludeURL> 요소가 존재하지 않는 PythonScript 파일을 참조하는 경우 API 프록시 배포가 실패합니다.
참조된 소스 파일은 API 프록시, 환경 또는 조직 수준에 있어야 합니다. |
build |
오류 변수
이러한 변수는 이 정책이 런타임 시 오류를 트리거할 때 설정됩니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항을 참조하세요.
변수 | 위치 | 예 |
---|---|---|
fault.name="fault_name" |
fault_name은 위의 런타임 오류 표에 나열된 오류 이름입니다. 오류 이름은 오류 코드의 마지막 부분입니다. | fault.name Matches "ScriptExecutionFailed" |
pythonscript.policy_name.failed |
policy_name은 오류를 발생시킨 정책의 사용자 지정 이름입니다. | pythonscript.PythonScript-1.failed = true |
오류 응답 예시
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"", "detail": { "errorcode": "steps.script.ScriptExecutionFailed" } } }
오류 규칙 예시
<FaultRule name="PythonScript Policy Faults"> <Step> <Name>AM-CustomErrorResponse</Name> <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition> </Step> <Condition>(pythonscript.PythonScript-1.failed = true) </Condition> </FaultRule>