Использование OpenAPI для получения файлов в составных сообщениях - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть API, который я использую в Flask / Connexion.API написан на OpenAPI 3 для Swagger.Я отправляю данные через multipart / form-data в конечную точку, и все получает через , за исключением загруженного файла.Я начну с того, что поделюсь своим файлом OpenAPI YAML.Для файла, на который я ссылался в этом документе о том, как указать схему.

openapi: "3.0.0"

info:
  description: No one is reading this
  version: "1.0.0"
  title: Super basic API endpoint

# Paths supported by the server application
paths:
   /api/submit:
    post:
      summary: Process a new text submission asynchronously
      operationId: submit.submit
      requestBody:
        content:
          multipart/form-data:
            schema:
              x-body-name: submission
              $ref: '#/components/schemas/Submission'
      responses:
        '200':
          description: That's nice

components:
  schemas:
    Submission:
      type: object
      required:
        - url
        - mimeType
        - language
        - content
      properties:
        url:
          type: string
          format: uri
        mimeType:
          type: string
          description: MIME type of the file submission
        language:
          type: string
          pattern: '^[a-z]{3}$'
        content:
          type: array
          items:
            type: string
            format: binary

Операция submit.submit вызывает следующий код Python:

from datetime import datetime
import uuid

def get_timestamp():
    return datetime.now().strftime(("%Y-%m-%d %H:%M:%S"))

def submit(submission):
    print(str(submission))

    return { "timestamp": get_timestamp(), "uuid": str(uuid.uuid4()) }

Что печатает Python:

{'url': 'http://nosite.none', 'mimeType': 'text/plain', 'language': 'eng'}

Таким образом, никакого «содержимого» нет.Но я знаю, что данные отправляются, так как я перехватил их в своем браузере:

-----------------------------138508216052
Content-Disposition: form-data; name="url"

http://nosite.none
-----------------------------138508216052
Content-Disposition: form-data; name="mimeType"

text/plain
-----------------------------138508216052
Content-Disposition: form-data; name="language"

eng
-----------------------------138508216052
Content-Disposition: form-data; name="content"; filename="nonsense.txt"
Content-Type: text/plain

Now is the time for
all good men to come
to the aid of their
party.
-----------------------------138508216052--

Есть ли дополнительная отладка, которую я должен сделать с Connexion, которая скажет мне, если / почему она не передает 'контент'file?

...