흐름 구성

Apigee Edge 문서입니다.
Apigee X 문서로 이동
정보

흐름은 API 프록시의 기본 구성요소입니다. 흐름을 사용 설정하면 API 프록시에서 정책 및 코드가 실행되는 순서를 구성하여 API 동작을 프로그래밍할 수 있습니다.

흐름의 개념 개요는 흐름을 사용한 프록시 실행 방법 제어를 참고하세요.

이 주제에서는 조건부 흐름을 만들고 높은 수준의 흐름에 로직(정책)을 추가하는 방법을 설명합니다. 조건 생성 방법에는 이 주제에서 다루는 것보다 더 자세한 내용이 포함됩니다. 자세한 내용은 흐름 변수 개요흐름 변수가 있는 조건을 참조하세요.

흐름에 정책 연결

Edge는 보안 구현, 트래픽 관리, 메시지 조작을 위해 다양한 유형의 사전 정의된 정책을 제공합니다. 또한 정책을 사용하면 커스텀 코드를 추가하여 메시지 처리를 완전히 맞춤설정할 수 있습니다.

예를 들면 다음과 같습니다.

  • OAuth 보안 정책을 ProxyEndpoint의 PreFlow 요청에 연결합니다. ProxyEndpoint의 요청 PreFlow가 파이프라인의 첫 번째 흐름이므로 보안 정책에 위반되는 경우 즉시 요청을 거부할 수 있습니다.
  • 응답을 JSON에서 XML로 변환하려면 TargetEndpoint의 PostFlow 응답JSON-XML 변환 정책을 연결합니다.
  • 요청을 처리하는 자바스크립트 코드를 실행하려면 ProxyEndpoint의 조건부 흐름자바스크립트 정책을 연결합니다.

조건부 흐름을 만들면 정책 연결에 사용할 수 있습니다. 흐름을 선택한 후 요청 또는 응답 다이어그램의 + 단계 아이콘을 클릭하여 흐름에 새 정책 또는 기존 정책을 추가합니다.

탐색기 메뉴에서는 issue라는 이름의 조건부 흐름 예시가 강조 표시되어 있고, Flows 창에 Step 버튼이 표시되어 있습니다.

단계 추가(Add Step) 창에서는 할당량(Quota와) 정책 유형과 표시 이름 Quota-2의 새 정책 인스턴스가 생성됩니다.

선택한 흐름에 정책을 연결하면 해당 흐름 URI 및 동사의 조합으로 전송되는 요청에만 할당량 정책이 적용되도록 API 프록시를 구성할 수 있습니다. 예를 들어 요청의 learn 흐름에 정책을 연결하면 프록시 편집기의 코드 보기에 다음 XML이 생성됩니다.

<ProxyEndpoint name="default">
...
   <Flow name="issue">
        <Description/>
        <Request>
            <Step>
                <Name>Quota-2</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition>
    </Flow>
... 
</ProxyEndpoint>

이 구성에서 GET 요청이 ../issue/** URI 패턴 (/issue/ 에서 마지막 슬래시 다음에 URI의 아무 내용이 패턴)을 가진 API 프록시에 들어오는 경우 할당량이 해당 API 호출에 적용됩니다.

조건부 흐름 정보

PreFlow 또는 PostFlow에 연결된 모든 정책은 항상 실행됩니다. 그러나 조건부 흐름의 정책은 흐름의 조건이 true로 평가되는 경우에만 실행됩니다.

요청과 응답을 처리하는 동안 세그먼트별로 하나의 조건부 흐름(조건이 true로 평가된 첫 번째 흐름)만 실행됩니다. 즉, 다음의 일부로 하나의 조건부 흐름이 실행될 수 있습니다.

  • ProxyEndpoint의 요청 파이프라인
  • TargetEndpoint의 요청 파이프라인
  • ProxyEndpoint의 응답 파이프라인
  • TargetEndpoint의 응답 파이프라인

동영상: 다음의 짧은 동영상에서 조건부 흐름에 대한 내용을 조금 더 자세히 알아보세요.

예를 들어 다음 ProxyEndpoint 정의는 API 프록시에 대한 모든 HTTP GET 요청에서 ProxyEndpoint가 실행하는 조건부 흐름을 보여줍니다.

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>   
  <Flows>
    <Flow name="Flow-1">
      <Condition>request.verb="GET"</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

조건은 request.verb 흐름 변수를 참조합니다. 흐름 변수는 Edge에서 처리하는 API 트랜잭션과 관련된 상태 정보를 포함하는 이름이 지정된 참조입니다. Edge는 참조할 수 있는 여러 상태 변수를 정의합니다.

RESTful 서비스는 API 리소스 모음입니다. API 리소스는 개발자가 API를 호출하여 액세스할 수 있는 일부 항목을 식별하는 URI 경로 프래그먼트입니다. 예를 들어 서비스 백엔드가 날씨 보고서와 날씨 예측을 제공하는 경우 API가 이러한 API 리소스에 매핑되는 두 개의 조건부 흐름(/reports/forecasts)을 정의할 수 있습니다. API 호출의 URL에 이러한 리소스 중 하나가 포함되면 조건이 true로 평가되고 조건부 흐름에 연결된 로직이 실행됩니다.

그러면 앱 개발자가 다음 형식의 URL에 요청을 보내 리소스에 액세스합니다.

http://myAPIs.myCo.com/weather/reports

또는

http://myAPIs.myCo.com/weather/forecasts

API 프록시에서 특정 리소스에 해당하는 조건부 흐름을 정의할 수 있습니다.

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>   
  <Flows>
    <Flow name="Flow-1">
      <Condition>(proxy.pathsuffix MatchesPath "/reports")</Condition>
      <Request/>
      <Response/>
    </Flow>
    <Flow name="Flow-2">
      <Condition>(proxy.pathsuffix MatchesPath "/forecasts")</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

이 예시에서는 API 프록시에 액세스하는 데 사용되는 URL의 서픽스 부분이 포함된 proxy.pathsuffix 흐름 변수를 참조합니다. 그런 다음 각 리소스의 조건부 흐름에 서로 다른 정책을 연결할 수 있습니다.

조건부 흐름 추가

이 간단한 예시에서는 요청 메시지가 HTTP GET일 때만 실행되는 흐름을 설정합니다.

조건부 흐름을 추가하려면 API 프록시 빌더에서 개발 탭을 선택합니다.

프록시 빌더 개발 탭

원하는 엔드포인트에서 + 아이콘을 클릭합니다.

조건부 흐름 추가 버튼

새 조건부 흐름 양식을 사용하면 흐름의 이름을 지정하고 조건을 구성할 수 있습니다. 다음 예시에서는 기본 경로 후의 아무 URI에서 GET 동사(PUT, POST 등과 대비하여)에 대한 요청 메시지의 HTTP를 평가하는 간단한 조건을 추가합니다.

새 조건부 흐름 창에서 흐름 이름은 Flow-1으로 지정되었으며 흐름의 조건 유형, 경로, 동사를 구성합니다.

(흐름 변수 및 조건에서 조건문을 구성하는 방법 알아보기)

이제 Flow-1이라는 새 흐름이 탐색 메뉴에 표시됩니다.

Flow-1 강조 표시됨

이제 ProxyEndpoint의 XML 구성을 살펴봅시다. 탐색기 메뉴에서 Flow-1을 선택하세요.

다음 구성이 표시됩니다.

<PreFlow name="PreFlow">
    <Request/>
    <Response/>
</PreFlow>   
<Flows>
    <Flow name="Flow-1">
      <Request/>
      <Response/>
      <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
    </Flow>
</Flows>
<PostFlow name="PostFlow">
    <Request/>
    <Response/>
</PostFlow>

다음 단계

다음 주제에서는 조건 구성 및 변수 사용에 대해 자세히 설명합니다.