webentwicklung-frage-antwort-db.com.de

So definieren Sie einen optionalen Parameter im Pfad mit swagger

In meinem REST Webdienst, der mit der GET-Methode arbeitet, gibt es eine Funktion, die zwei optionale Parameter hat.

Ich habe versucht, es in Swagger zu definieren, aber ich bin auf einen Fehler gestoßen, Keine gültige Parameterdefinition, nachdem ich required als false festgelegt habe.

Ich fand heraus, dass, wenn ich den Wert von required auf true setze, der Fehler verschwunden ist. Hier ist ein Beispiel meines Swagger-Codes.

...
paths:
  '/get/{param1}/{param2}':
    get:
      ...
      parameters:
      - name: param1
        in: path
        description: 'description regarding param1'
        required: false
        type: string
      - name: param2
        in: path
        description: 'description regarding param2'
        required: false
        type: string

Ich habe dies nicht mit Parametern in body oder den Parametern in query erlebt. Ich denke, dieses Problem hängt nur mit Parametern im Pfad zusammen. Ich konnte auch keine Lösung in Swagger-Spezifikationsdateien finden.

Gibt es eine andere Möglichkeit, optionale Parameter in Swagger zu definieren, oder habe ich einen Fehler in meinem Code?

Jede Hilfe wäre dankbar.

45
Hedeshy

Da der Pfadparameter gemäß der Spezifikation OpenAPI/Swagger erforderlich sein muss, können Sie 2 separate Endpunkte mit den folgenden Pfaden hinzufügen:

  • /get/{param1}/{param2}wenn param2 angegeben ist
  • /get/{param1}/wenn param2 nicht angegeben ist
38
William Cheng

Es wird wahrscheinlich explodieren, weil Sie keinen optionalen Basis-URI-Parameter haben können, sondern nur Zeichenfolgenwerte abfragen (im Fall einer URL).

Beispielsweise:

  • GET/products/{id}/pricing? Foo = bar
  • ** Wenn foo optional ist, muss Ihr IN-Parameter "query" sein, nicht "path"
  • ** Wenn {id} optional ist, stimmt etwas nicht. {id} kann nicht optional sein, da es in der Basis-URI enthalten ist.

Das sollte funktionieren:

{
"in":"query",
"required":false
}

Das sollte nicht funktionieren

{
"in":"path",
"required":false
}

ändern Sie die Eigenschaft "in" in "query" anstelle von "path" und es sollte funktionieren.

24
Jerrod Horton

Ihr YAML schlägt fehl, weil wie in der Spezifikation angegeben:

Legt fest, ob dieser Parameter obligatorisch ist. Wenn sich der Parameter in "path" befindet, ist diese Eigenschaft erforderlich und der Wert MUSS "true" sein.

Quelle: http://swagger.io/specification/#parameterObject (In festen Feldern suchen Tabelle)

4
Paulo Oliveira