Ich habe einen Pfad, der komplexe Modelle mit fast identischen Eigenschaften für jede HTTP-Methode verwendet. Das Problem ist, dass ich einige erforderlichen Eigenschaften für die Anforderung von PUT und POST definieren möchte, während keine Eigenschaften in GET-Antwort erforderlich sind (da der Server immer alle Eigenschaften zurückgibt und es an anderer Stelle in der Dokumentation erwähnt wird).Modell mit anderen erforderlichen Eigenschaften erneut verwenden
Ich habe eine einfache Cat-API erstellt, um zu demonstrieren, was ich ausprobiert habe. Die Idee ist, dass für die GET-Antwort das Antwortmodell nicht wie erforderlich markiert ist, sondern dass die Anforderung von PUT einen Namen für die Katze haben muss.
swagger: "2.0"
info:
title: "Cat API"
version: 1.0.0
paths:
/cats/{id}:
parameters:
- name: id
in: path
required: true
type: integer
get:
responses:
200:
description: Return a cat
schema:
$ref: "#/definitions/GetCat"
put:
parameters:
- name: cat
in: body
required: true
schema:
$ref: "#/definitions/PutCat"
responses:
204:
description: Cat edited
definitions:
Cat:
type: object
properties:
name:
type: string
GetCat:
allOf:
- $ref: "#/definitions/Cat"
properties:
id:
type: integer
PutCat:
type: object
required:
- name
properties:
$ref: "#/definitions/Cat/properties"
Swagger Editor sagt, dass dies eine gültige Spezifikation, aber name
wird als für beide erforderlich GET und PUT. Das Gleiche gilt für Swagger UI.
Ich habe auch versucht die folgende Version von PutCat:
PutCat:
type: object
required:
- name
allOf:
- $ref: "#/definitions/Cat"
Aber jetzt ist alles optional.
Ich kann das nicht herausfinden. Gibt es eine Möglichkeit, dies richtig zu machen?
EDIT:
Wie Helen richtig erwähnt, kann ich readOnly
Sie mit diesem besonderen Fall mit GET und PUT zu lösen.
Aber sagen wir, ich füge breed
Eigenschaft hinzu, die (zusätzlich zu der name
Eigenschaft) für PUT bereitgestellt werden muss. Dann füge ich die PATCH-Methode hinzu, die verwendet werden kann, um entweder breed
oder name
zu aktualisieren, während die andere unverändert bleibt, und ich möchte keine davon wie erforderlich einstellen.
Danke, das löst das Problem im Beispiel. Allerdings war ich bei meinem Beispiel ein wenig unvorsichtig und habe die Frage mit dem Szenario aktualisiert, eine PATCH-Methode für Teilupdates hinzuzufügen, die nichts erforderte. – NotNone
@NotNone: Ich habe die Antwort aktualisiert. – Helen
Danke, aber jetzt sieht es so aus, als ob sowohl der Name als auch die Rasse für PATCH benötigt werden (im Swagger Editor gibt es ein Sternchen nach beiden). Dies ist das gleiche Problem wie in der ursprünglichen Frage. Ich glaube, dass es dafür jetzt keine Lösung gibt. – NotNone