API 관리 추가

Cloud Endpoints Frameworks는 Extensible Service Proxy(ESP)가 Cloud Endpoints에 제공하는 기능과 비슷한 API 관리 기능을 제공합니다. Endpoints Frameworks에는 요청을 API 백엔드로 전달하기 전에 모든 요청을 가로채고 필요한 검사(예: 인증)를 수행하는 기본 제공 API 게이트웨이가 포함되어 있습니다. 백엔드가 응답하면 Endpoints Frameworks는 원격 분석 데이터를 수집하고 보고합니다. API의 측정항목은 Google Cloud Console의 Endpoints > 서비스 페이지에서 확인할 수 있습니다.

Endpoints Frameworks에서 제공하는 API 관리 기능은 다음과 같습니다.

Endpoints를 통해 API를 관리하려면 OpenAPI 사양 버전 2.0을 사용하여 API를 설명하는 OpenAPI 문서를 배포해야 합니다. 이 페이지에서는 API를 관리하도록 Endpoints를 사용 설정하는 OpenAPI 문서를 생성하고 배포하는 방법을 설명합니다.

API 관리를 추가하지 않아도 API가 요청을 계속 처리하지만, API가 Cloud Console의 Endpoints > 서비스 페이지에 표시되지 않으며 할당량 로깅, 모니터링, 설정과 같이 Endpoints에서 제공되는 기능을 사용할 수 없습니다.

필수 소프트웨어 설치 및 구성

아직 하지 않은 경우 Python용 Cloud SDK를 설치 및 구성하고 Endpoints Frameworks Python 라이브러리를 API 프로젝트 디렉터리에 추가하여 배포 시 API 코드와 함께 업로드되도록 합니다.

Python용 Cloud SDK 설치 및 구성

  1. Cloud SDK를 설치하고 초기화합니다.

    Cloud SDK 다운로드 및 설치

  2. Python용 App Engine 확장 프로그램이 포함된 gcloud 구성요소를 설치합니다.

    gcloud components install app-engine-python
    
  3. Cloud SDK를 업데이트합니다.

    gcloud components update
    
  4. Cloud SDK에 Google Cloud의 데이터 및 서비스에 액세스할 수 있는 권한이 있는지 확인합니다.

    gcloud auth login
    

    새 브라우저 탭이 열리고 계정을 선택하라는 메시지가 나타납니다.

  5. 기본 프로젝트를 프로젝트 ID로 설정합니다. YOUR_PROJECT_ID를 Cloud 프로젝트 ID로 바꿉니다.

    gcloud config set project YOUR_PROJECT_ID
    
  6. Linux의 경우 ENDPOINTS_GAE_SDK 환경 변수를 App Engine SDK 폴더의 경로로 설정합니다.

    PATH_TO_CLOUD_SDK/platform/google_appengine
    

    PATH_TO_CLOUD_SDK를 다음 명령어의 출력으로 바꿉니다.

    gcloud info --format="value(installation.sdk_root)"
    

Endpoints Frameworks Python 라이브러리 추가

  1. Python용 C 확장 프로그램을 컴파일할 수 있는지 확인합니다.

    • Windows: Microsoft Visual C++ 9.0 이상이 필요합니다. Microsoft 다운로드 센터에서 Python 2.7용 Microsoft Visual C++ Compiler를 다운로드할 수 있습니다.

    • 기타 운영체제: 운영체제에 따라 컴파일러 도구(build-essential라는 패키지에 포함될 때도 있음) 또는 Python 개발 헤더 (python-dev라는 패키지에 포함)를 설치해야 할 수 있습니다.

  2. 디렉터리를 API의 기본 디렉터리로 변경합니다.

  3. API의 기본 디렉터리에 /lib 하위 디렉터리를 만듭니다.

    mkdir lib
    
  4. 라이브러리를 설치합니다.

    pip install -t lib google-endpoints --ignore-installed
    

OpenAPI 문서 생성

API의 주 디렉터리에서 프레임워크 도구를 사용하여 OpenAPI 문서를 생성합니다. 예를 들면 다음과 같습니다.

클래스가 하나인 경우

다음 명령어에서 YOUR_PROJECT_ID를 Cloud 프로젝트 ID로 바꿉니다.

python lib/endpoints/endpointscfg.py get_openapi_spec main.EchoApi \
    --hostname YOUR_PROJECT_ID.appspot.com

경고가 표시되면 무시하세요.

클래스가 여러 개인 경우

명령줄에 여러 클래스를 나열할 수 있습니다. Endpoints는 각 API 이름/버전 조합별로 OpenAPI 문서를 생성합니다.

API 이름이 서로 다른 여러 API 클래스를 단일 서비스의 일부로 배포하려면 --x-google-api-name 플래그도 추가해야 합니다. 이 플래그를 사용 설정하면 API 이름에 제한이 추가됩니다. 특히 이름은 정규 표현식 [a-z][a-z0-9]{0,39}와 일치해야 합니다. 즉, 이름이 알파벳 소문자 또는 숫자로 구성된 1~40자 사이여야 하고, 이름의 첫 글자는 숫자가 아니어야 합니다. 예:

다음 명령어에서 YOUR_PROJECT_ID를 Cloud 프로젝트 ID로 바꿉니다.

python lib/endpoints/endpointscfg.py get_openapi_spec main.FooApi main.BarApi \
   --hostname YOUR_PROJECT_ID.appspot.com \
   --x-google-api-name

경고가 표시되면 무시하세요.

Endpoints는 사용자가 hostname 인수에 지정하는 텍스트를 서비스 이름으로 사용합니다. App Engine에 API를 배포하면 YOUR_PROJECT_ID.appspot.com 형식의 이름을 가진 DNS 항목이 자동으로 생성됩니다.

OpenAPI 문서 배포

클래스가 하나인 경우

gcloud endpoints services deploy echov1openapi.json

클래스가 여러 개인 경우

OpenAPI 문서가 여러 개인 경우 명령줄에 문서를 모두 나열합니다. 예를 들면 다음과 같습니다.

 gcloud endpoints services deploy foov1openapi.json barv1openapi.json

OpenAPI 문서를 처음 배포하면 YOUR_PROJECT_ID.appspot.com이라는 이름의 새 Endpoints 서비스가 생성됩니다.

성공적으로 완료되면 서비스 구성 ID와 서비스 이름을 보여주는 다음과 같은 줄이 표시됩니다.

Service Configuration 2017-02-13r0 uploaded for service example-project-12345.appspot.com

위 예시에서 2017-02-13r0은 서비스 구성 ID입니다. 서비스 구성 ID는 날짜 스탬프와 버전 번호로 구성됩니다. OpenAPI 문서를 다시 배포하면 서비스 구성 ID의 버전 번호가 증가합니다.

서비스 구성 ID를 다시 표시해야 하는 경우 다음 명령어에서 YOUR_PROJECT_ID를 Cloud 프로젝트의 ID로 바꿔 실행합니다.

gcloud endpoints configs list --service=YOUR_PROJECT_ID.appspot.com

생성된 문서를 사용하지 않고 자체 OpenAPI 문서를 만들어서 배포해도 됩니다. 단순히 위에서 echov1openapi.json을 OpenAPI 문서 경로로 바꿉니다. OpenAPI 문서 작성에 대한 자세한 내용은 OpenAPI 개요를 참조하세요.

API 재배포 및 테스트

  1. 프로젝트 파일 app.yaml을 수정하고 env_variables 섹션을 다음과 같이 추가합니다.

    env_variables:
      ENDPOINTS_SERVICE_NAME: YOUR_PROJECT_ID.appspot.com
      ENDPOINTS_SERVICE_VERSION: YOUR_SERVICE_VERSION
    

    YOUR_PROJECT_ID를 Cloud 프로젝트 ID로 바꾸고 YOUR_SERVICE_VERSION을 이전 섹션의 서비스 구성 ID로 바꿉니다. app.yaml 파일에 이렇게 추가하면 애플리케이션을 재배포한 후 Endpoints가 API를 관리합니다.

  2. 애플리케이션을 재배포합니다.

    gcloud app deploy
    
  3. 경고 메시지를 무시하고 배포가 완료될 때까지 잠시 기다립니다. 배포가 완료되면 다음과 유사한 메시지가 표시됩니다.

    File upload done.
    Updating service [default]...done.
    
  4. 예를 들어 다음과 같은 curl 명령어를 사용하여 재배포가 성공적으로 완료되었는지 테스트합니다.

    curl --request POST \
        --header "Content-Type: application/json" \
        --data '{"content":"echo"}' \
        https://YOUR_PROJECT_ID.appspot.com/_ah/api/echo/v1/echo?n=2
    

    echo을 API의 이름으로 바꿉니다.

    다음과 비슷한 결과가 표시됩니다.

    {
     "content": "echo echo"
    }
    
  5. API에 대해 몇 가지 추가 요청을 실행합니다.

  6. API 측정항목을 보려면 프로젝트의 Cloud Console에서 Endpoints > 서비스 페이지를 엽니다.

    Endpoints 서비스 페이지로 이동