OpenAPI 기능 제한사항

Cloud Endpoints는 OpenAPI 사양 버전 2만 허용합니다.

다음 섹션에서는 Endpoints의 OpenAPI 기능 제한사항을 설명합니다.

무시하는 범위

Endpoints는 범위가 보안 스키마 객체에 정의된 OpenAPI 문서를 수락하지만 API에 요청이 전송될 때 Extensible Service Proxy(ESP), Extensible Service Proxy V2(ESPv2) 또는 Cloud Endpoints Frameworks는 정의된 범위를 확인하지 않습니다.

여러 보안 요구사항

OpenAPI 문서에서 여러 개의 보안 요구사항을 지정할 수 있습니다. 이 섹션에서는 ESP 및 ESPv2가 지원하는 보안 스키마에 대해 설명합니다.

API 키를 포함하는 보안 요구사항

ESP 및 ESPv2는 보안 스키마 중 하나가 API 키일 때 대체(논리합) 보안 요구사항을 지원하지 않습니다. 예를 들어 ESP 및 ESPv2는 다음 보안 요구사항 목록을 지원하지 않습니다.

security:
- petstore_auth: []
- api_key: []

이 정의에서는 작업이 petstore_auth 요구사항이나 api_key 요구 사항을 따르는 요청을 허용해야 합니다.

그러나 ESP 및 ESPv2는 보안 요구사항 결합(논리곱)을 지원하므로 API 키와 OAuth2 인증을 모두 요구할 수 있습니다. 예를 들어 다음 보안 요구사항 목록이 지원됩니다.

security:
- petstore_auth: []
  api_key: []

이 정의에서는 작업이 petstore_auth 요구사항과 api_key 요구사항을 동시에 따르는 요청을 허용해야 합니다.

OAuth2의 보안 요구사항

ESP 및 ESPv2는 보안 대체(논리합) 보안 요구사항을 지원하지만 OAuth2 인증 보안 스키마에 대해서만 지원합니다. 예를 들어 다음 보안 요구사항 목록이 지원됩니다.

security:
  - firebase1: []
  - firebase2: []

보안 정의 유효성 검사

ESP 및 ESPv2는 모든 보안 요구사항(API 수준 또는 메서드 수준에서)이 securityDefinitions 섹션에 있는지 검증하지 않습니다. 따라서 API 사양에서 정의되지 않은 보안 스키마를 사용하는 경우 정의되지 않은 보안 키가 구성된 수준에서 API를 통해 인증되지 않은 요청이 발생할 수 있습니다. API에서 사용하는 모든 보안 키와 해당 메서드는 OpenAPI 문서의 보안 정의에 정의되어 있는지 확인합니다.

URL 경로 템플릿

Endpoints는 슬래시(//)로 구분된 전체 경로 세그먼트에 해당하는 URL 경로 템플릿 매개변수만 지원합니다. 부분적 경로 세그먼트에 해당하는 URL 경로 템플릿 매개변수는 지원되지 않습니다.

예를 들어 다음 URL 경로 템플릿이 지원됩니다.

  • /items/{itemId}
  • /items/{itemId}/subitems

다음 URL 경로 템플릿은 지원되지 않고 거부됩니다.

  • /items/overview.{format}
  • /items/prefix_{id}_suffix

URL 루트 경로 /에서의 작업

Endpoints는 루트 경로 /에서의 작업이 포함된 OpenAPI 문서를 허용합니다. 그러나 루트 경로에서의 요청은 ESP에서 거부됩니다. 이 제한은 ESP에만 해당되며 ESPv2는 루트 경로 /를 지원합니다.

예를 들어 다음 OpenAPI 문서 스니펫이 허용됩니다.

paths:
  /:
    post:
      operationId: "root"
      responses:
        200:
          description: "Success"
          schema:
            type: string

그러나 POST /에 대한 후속 요청은 다음 오류와 함께 거부됩니다.

{
   "code": 5,
   "details": [
       {
           "@type": "type.googleapis.com/google.rpc.DebugInfo",
           "detail": "service_control",
           "stackEntries": []
       }
   ],
   "message": "Method does not exist."
}

파일 업로드

Endpoints에서는 파일 업로드 매개변수로 type: file이 사용되지 않습니다. 대신 type: string이 사용됩니다.

예를 들어 다음 type: file 스니펫은 허용되지 않습니다.

paths:
  /upload:
    post:
      summary: Uploads a file.
      consumes:
        - multipart/form-data
      parameters:
        - in: formData
          name: upfile
          type: file
          description: The file to upload.

반면에 type: string이 있는 다음 스니펫은 허용됩니다.

paths:
  /upload:
    post:
      summary: Uploads a file.
      consumes:
        - multipart/form-data
      parameters:
        - in: formData
          name: upfile