2015-06-17 1 views
11

Ich schreibe meine Swagger-Definition in Yaml. Angenommen, ich habe eine Definition, die ungefähr so ​​aussieht.Wie mache ich ein Feld in einer Definition für einige Operationen und nicht für andere

paths: 
    /payloads: 
    post: 
     summary: create a payload 
     ... 
     parameters: 
     - in: body 
     name: payload 
     description: New payload 
     required: true 
     schema: 
      $ref: "#/definitions/payload" 
    put: 
     summary: update a payload 
     ... 
     parameters: 
     - in: body 
     name: payload 
     description: Updated existing payload 
     required: true 
     schema: 
      $ref: "#/definitions/payload" 
... 
definitions: 
    payload: 
    properties: 
     id: 
     type: string 
     someProperty: 
     type: string 
     ... 

Gibt es eine Möglichkeit, die ich, dass die ID-Eigenschaft einer Nutzlast angeben kann, für den PUT Betrieb erforderlich ist, und ist optional (oder sollte nicht angezeigt) für die POST-Operation?

Antwort

14

Sie müssten die Modelle separat definieren.

Sie haben jedoch Optionen für die Fälle von Ausschluss und Differenz.

Wenn Sie ausschließen möchten, was der einfache Fall ist, erstellen Sie ein Modell mit der ausgeschlossenen Eigenschaft, sagen Sie ModelA. Dann definieren ModelB als ModelA zuzüglich der zusätzlichen Eigenschaft:

ModelB: 
    allOf: 
    - $ref: "#/definitions/ModelA" 
    - type: object 
     properties: 
     id: 
      type: string 

Wenn Sie schauen, den Unterschied, nach dem gleichen Verfahren oben, zu definieren und die id von ModelA auszuschließen. Dann definieren Sie ModelB und als Erweiterung ModelA und fügen Sie die id-Eigenschaft zu ihnen, jeweils mit eigenen Einschränkungen. Wohlgemerkt, mit JSON Schema können Sie in einigen Fällen dem ursprünglichen Beispiel folgen, um eine Definition zu "überschreiben". Da es jedoch nicht wirklich Vorrang hat und man die Konzepte von JSON Schema besser verstehen sollte, um keine einfachen Fehler zu machen, würde ich empfehlen, diesen Weg vorerst zu gehen.

+0

Das ist sehr nützlich. Ich wäre an weiteren Erkenntnissen über diese "Overrides" interessiert, da ich wirklich möglichst viele Modelle vermeiden möchte. Die Schemadokumente scheinen anzuzeigen, dass ein Definitions-Override im Abschnitt "schema" der Methode platziert werden kann, vorausgesetzt, ein Element wird nicht "dupliziert" ... Gibt es Beispiele für diese Syntax? – rainecc

+0

Ihre Antwort hat das Kopfgeld, weil es keine anderen Optionen gibt. Aber ich hoffe immer noch, dass es Alternativen gibt. Wenn jemand weiß, schreibe bitte eine Antwort. –

+0

Vertrau mir, ich wünschte, es gäbe. Leider ist JSON Schema eine Validierungssprache und keine Modellierungssprache, daher ist es nicht wirklich freundlich zu solchen (üblichen) Anwendungsfällen. – Ron

Verwandte Themen