Спецификация Swagger / OpenAPI, в которой загрузка файлов отклонена конечными точками Google - PullRequest
1 голос
/ 02 июля 2019

Моя цель - настроить простой API для загрузки файла через конечные точки Google.

Это моя упрощенная спецификация OpenAPI, которая действительна в соответствии с проверкой Swagger:

swagger: "2.0"
info:
  title: "JSON Ingester"
  description: "Receive JSON files, transform and load them."
  version: "1.0.0"

host: "project-id.appspot.com"
schemes:
  - "https"

paths:
  /uploadFile:
    post:
      operationId: uploadFile
      consumes:
        - multipart/form-data
      parameters:
        - 
          in: formData
          name: upfile
          type: file
          description: file
      responses:
        200:
          description: "File uploaded."
        400:
          description: "Error during file upload."

Я всегда получаю это неясное сообщение об ошибке:

user@cloudshell:~/google-cloud-json-ingester (project-id)$ gcloud endpoints services deploy ./openapi.yaml
ERROR: (gcloud.endpoints.services.deploy) INVALID_ARGUMENT: Cannot convert to service config.
'location: "openapi.yaml: Operation \'post\' in path \'/uploadFile\'"
message: "Operation does not require an API key; callers may invoke the method without specifying an associated API-consuming project. To enable API key all the SecurityRequirement Objects (https://gi
thub.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#security-requirement-object) inside security definition must reference at least one SecurityDefinition of type : \'apiKey\'."
 location: "unknown location"
kind: ERROR
message: "http: repeated message field \'google.protobuf.Struct.fields\' referred to by message \'UploadFileRequest\' cannot be mapped as an HTTP parameter."
 location: "unknown location"
kind: ERROR
message: "http: cyclic message field \'google.protobuf.Struct.FieldsEntry.value\' referred to by message \'UploadFileRequest\' in method \'method 1.project_id_appspot_com.UploadFile\' cannot
 be mapped as an HTTP parameter."
 location: "unknown location"
kind: ERROR
message: "http: cyclic message field \'google.protobuf.ListValue.values\' referred to by message \'UploadFileRequest\' in method \'method 1.project_id_appspot_com.UploadFile\' cannot be mapp
ed as an HTTP parameter."
'

У меня закончились идеи о том, что может быть причиной.

Есть предложения?

1 Ответ

1 голос
/ 03 июля 2019

Похоже, что требуется хотя бы некоторая аутентификация: https://cloud.google.com/endpoints/docs/openapi/authentication-method

Я также думаю, что облачные конечные точки не поддерживают тип: файл , поэтому вы должны использовать тип: строка и использовать эквивалентный curl -X POST -F "file_upload=@file.txt" http://myservice.com/endpoint для загрузки.

...