PythonScript 정책

<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 name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

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 name attribute is used.

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 오류를 발생시킬 수 있습니다. 흔히 볼 수 있는 오류 유형에는 NameErrorZeroDivisionError가 있습니다.

배포 오류

이 오류는 이 정책이 포함된 프록시를 배포할 때 발생할 수 있습니다.

오류 이름 원인 해결
InvalidResourceUrlFormat PythonScript 정책의 <ResourceURL> 또는 <IncludeURL> 요소 내에서 지정된 리소스 URL 형식이 잘못된 경우 API 프록시 배포가 실패합니다.
InvalidResourceUrlReference <ResourceURL> 또는 <IncludeURL> 요소가 존재하지 않는 PythonScript 파일을 참조하는 경우 API 프록시 배포가 실패합니다. 참조된 소스 파일은 API 프록시, 환경 또는 조직 수준에 있어야 합니다.

오류 변수

이러한 변수는 이 정책이 런타임 시 오류를 트리거할 때 설정됩니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항을 참조하세요.

변수 위치
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>

관련 주제