2017-03-14 1 views
0

J'essaie de comprendre ce truc swagger API en utilisant allOf. Ceci est mon fichier swagger yaml.Swagger: Propriétés supplémentaires non autorisées: allOf

swagger: '2.0' 
info: 
    title: Test API 
    version: '1' 
basePath: /api/v1 
schemes: 
    - https 
produces: 
    - application/json 

paths: 
    /users: 
    get: 
     summary: Collection of users 
     tags: 
     - users 
     responses: 
     200: 
      description: A list of Users 
      schema: 
      $ref: "#/definitions/Users"   
     500: 
      $ref: "#/responses/BadRequest" 

definitions: 
    User: 
    required: 
     - username 
    properties: 
     firstName: 
     type: string 
     lastName: 
     type: string 
     username: 
     type: string 
    Users: 
    type: array 
    items: 
     $ref: "#/definitions/User" 

responses: 
    NonSuccess: 
    description: Generic response for all non-success responses 
    schema: 
     type: object 
     required: 
     - code 
     - message 
     properties: 
     code: 
      type: integer 
      description: The success code, 0 or -1. 
     message: 
      type: string 
      description: The description message for this success code 
     errors: 
      type: array 
      description: A map of errors within the request. Keyed by the parameter name and the values are the error details 

    BadRequest: 
    description: Invalid request parameters 
    allOf: 
     - $ref: "#/responses/NonSuccess" 

Quand je coller dans le online editor, je reçois les erreurs suivantes que je vais avoir un temps réel dur à essayer de comprendre.

✖ Swagger Error 
Additional properties not allowed: allOf 
Jump to line 60 

✖ Swagger Error 
Not a valid response definition 
Jump to line 22 

Le principal problème semble être Additional properties not allowed: allOf et je suis ne peut pas sembler comprendre ce que je fais mal dans ce cas. J'essayais de déclarer une réponse de non-succès de base de sorte que toutes les réponses non-200 hériteront de sorte que l'API aura une réponse de non-succès très standard. J'étais sous l'impression que je pouvais le faire avec allOf, puis ajouter ou remplacer les champs de cette réponse. Qu'est-ce que je fais de mal?

Répondre

3

La balise allOf ne peut être utilisée que sur des objets de schéma. Vous pouvez certainement l'utiliser sur la partie Schéma de la réponse, cependant. Voici un exemple de cela.

swagger: '2.0' 
info: 
    title: Test API 
    version: '1' 
basePath: /api/v1 
schemes: 
    - https 
produces: 
    - application/json 

paths: 
    /users: 
    get: 
     summary: Collection of users 
     tags: 
     - users 
     responses: 
     200: 
      description: A list of Users 
      schema: 
      $ref: "#/definitions/Users"   
     500: 
      $ref: "#/responses/BadRequest" 

definitions: 
    User: 
    required: 
     - username 
    properties: 
     firstName: 
     type: string 
     lastName: 
     type: string 
     username: 
     type: string 
    Users: 
    type: array 
    items: 
     $ref: "#/definitions/User" 

    Response: 
    type: object 
    required: 
     - code 
     - message 
    properties: 
     code: 
     type: integer 
     description: The success code, 0 or -1. 
     message: 
     type: string 
     description: The description message for this success code 
     errors: 
     type: array 
     description: A map of errors within the request. Keyed by the parameter name and the values are the error details 

    BadRequest: 
    type: object 
    required: 
     - validationErrors 
    properties: 
     validationErrors: 
     type: array 
     items: 
      type: string 

responses: 
    NonSuccess: 
    description: Generic response for a non-success 
    schema: 
     $ref: "#/definitions/Response" 

    BadRequest: 
    description: Invalid request parameters 
    schema: 
     allOf: 
     - $ref: "#/definitions/Response" 
     - $ref: "#/definitions/BadRequest" 
+0

Yip, c'est à peu près où je me suis retrouvé. – SynackSA