web-dev-qa-db-fra.com

Comment publier des fichiers dans Swagger (OpenAPI)?

J'utilise Swagger pour documenter mes services REST. Un de mes services nécessite le téléchargement d'un fichier CSV. J'ai ajouté ce qui suit à la section parameters de ma définition d'API JSON:

{
       "name": "File",
       "description": "The file in Zip format.",
       "paramType": "body",
       "required": true,
       "allowMultiple": false,
       "dataType": "file"
}

et maintenant je vois l'option de téléchargement de fichier sur ma page Swagger UI. Mais lorsque je sélectionne un fichier et que je clique sur "essayer", j'obtiens l'erreur suivante:

NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: opération illégale sur l'objet prototype WrappedNative dans jquery-1.8.0.min.js (ligne 2)

La page est en cours de traitement et je ne reçois aucune réponse.

Des idées qui pourraient être erronées?

47
Popeye

enfin j'ai trouvé la réponse à cela, en fait auparavant il n'y a pas de support pour le téléchargement de fichiers , maintenant ils ont mis à jour swagger-ui.js fichier. Vous devez remplacer votre ancien par un nouveau et vous devez également définir ces propriétés sous Paramètres pour un paramètre particulier:

 "paramType": "body",
 "dataType": "file",
18
Popeye

Spécification OpenAPI 2.0

Dans Swagger 2.0 ( OpenAPI Specification 2. ), utilisez un paramètre de formulaire (in: formData) avec le fichier type défini sur . De plus, consumes de l'opération doit être soit multipart/form-data, application/x-www-form-urlencoded ou les deux.

  consumes:
    - multipart/form-data  # and/or application/x-www-form-urlencoded
  parameters:
    - name: file
      in: formData   # <-----
      description: The uploaded file data
      required: true
      type: file     # <-----

Spécification OpenAPI 3.0

Dans OpenAPI Specification 3. , les fichiers sont définis comme des chaînes binaires, c'est-à-dire type: string + format: binary (ou format: byte, selon le cas d'utilisation). Le contenu d'entrée/sortie de fichier est décrit avec la même sémantique que tout autre type de schéma (contrairement à OpenAPI 2.0):

Demande en plusieurs parties, fichier unique:

requestBody:
  content:
    multipart/form-data:
      schema:
        type: object
        properties:
          # 'file' will be the field name in this multipart request
          file:
            type: string
            format: binary

Demande en plusieurs parties, tableau de fichiers:

requestBody:
  content:
    multipart/form-data:
      schema:
        type: object
        properties:
          # The property name 'file' will be used for all files.
          file:
            type: array
            items:
              type: string
              format: binary

Fichier POST/PUT directement (le corps de la demande est le contenu du fichier):

requestBody:
  content:
    application/octet-stream:
      # any media type is accepted, functionally equivalent to `*/*`
      schema:
        # a binary file of any type
        type: string
        format: binary

Remarque: la sémantique est la même que pour les autres types de schéma OpenAPI 3.0:

# content transferred in binary (octet-stream):
schema:
  type: string
  format: binary

Plus d'informations:

40
mstrthealias

Le mien semble fonctionner avec

 "paramType": "formData",
 "dataType": "file",
4
Artjom Kurapov