ererbung und Zusammensetzung von Swagg
In meiner "vereinfachten" API werden alle Antworten abgeleitet erbe) von einer Basis "Antwort" -Klasse. Die Antwortklasse istzusammengesetz eines mit Metadaten gefüllten Headers und des Texts, der die vom Benutzer angeforderten Kerndaten enthält. Die Antwort (in JSON) ist so angeordnet, dass sich alle Metadaten auf der ersten "Ebene" befinden und der Körper ein einzelnes Attribut ist, das als "Körper" bezeichnet wird.
response
|--metadata attribute 1 (string/int/object)
|--metadata attribute 2 (string/int/object)
|--body (object)
|--body attribute 1 (string/int/object)
|--body attribute 2 (string/int/object)
Ich habe versucht, diese Beziehung in Swagger mit dem folgenden JSON zu definieren:
{
...
"definitions": {
"response": {
"allOf": [
{
"$ref": "#/definitions/response_header"
},
{
"properties": {
"body": {
"description": "The body of the response (not metadata)",
"schema": {
"$ref": "#/definitions/response_body"
}
}
}
}
]
},
"response_header": {
"type": "object",
"required": [
"result"
],
"properties": {
"result": {
"type": "string",
"description": "value of 'success', for a successful response, or 'error' if there is an error",
"enum": [
"error",
"success"
]
},
"message": {
"type": "string",
"description": "A suitable error message if something went wrong."
}
}
},
"response_body": {
"type": "object"
}
}
}
Ich versuche dann, verschiedene Antworten zu erstellen, indem ich die verschiedenen body / header-Klassen erstelle, die von body / header erben, und erstelle dann untergeordnete Antwortklassen, die sich aus den relevanten header / body-Klassen zusammensetzen (siehe Quellcode unten). Ich bin mir jedoch sicher, dass dies entweder die falsche Vorgehensweise ist oder dass meine Implementierung nicht korrekt ist. Ich konnte im @ kein Beispiel für eine Vererbung findswagger 2.0 Spezifikation (siehe unten), habe aber ein Beispiel für @ gefundKompositio.
Ich bin mir ziemlich sicher, dass dieser "Diskriminator" eine große Rolle spielt, aber ich weiß nicht, was ich tun muss.
FragKann mir jemand zeigen, wie man Komposition + Vererbung in Swagger 2.0 (JSON) implementieren soll, vorzugsweise durch "Korrigieren" des folgenden Beispielcodes. Es wäre auch großartig, wenn ich eine ErrorResponse-Klasse angeben könnte, die von der Antwort erbt, bei der das Attribut "result" im Header immer auf "error" gesetzt ist.
{
"swagger": "2.0",
"info": {
"title": "Test API",
"description": "Request data from the system.",
"version": "1.0.0"
},
"host": "xxx.xxx.com",
"schemes": [
"https"
],
"basePath": "/",
"produces": [
"application/json"
],
"paths": {
"/request_filename": {
"post": {
"summary": "Request Filename",
"description": "Generates an appropriate filename for a given data request.",
"responses": {
"200": {
"description": "A JSON response with the generated filename",
"schema": {
"$ref": "#/definitions/filename_response"
}
}
}
}
}
},
"definitions": {
"response": {
"allOf": [
{
"$ref": "#/definitions/response_header"
},
{
"properties": {
"body": {
"description": "The body of the response (not metadata)",
"schema": {
"$ref": "#/definitions/response_body"
}
}
}
}
]
},
"response_header": {
"type": "object",
"required": [
"result"
],
"properties": {
"result": {
"type": "string",
"description": "value of 'success', for a successful response, or 'error' if there is an error",
"enum": [
"error",
"success"
]
},
"message": {
"type": "string",
"description": "A suitable error message if something went wrong."
}
}
},
"response_body": {
"type": "object"
},
"filename_response": {
"extends": "response",
"allOf": [
{
"$ref": "#definitions/response_header"
},
{
"properties": {
"body": {
"schema": {
"$ref": "#definitions/filename_response_body"
}
}
}
}
]
},
"filename_response_body": {
"extends": "#/definitions/response_body",
"properties": {
"filename": {
"type": "string",
"description": "The automatically generated filename"
}
}
}
}
}
Diagram UpdateUm zu versuchen und zu verdeutlichen, was ich will, habe ich das sehr grundlegende Diagramm unten erstellt, das zeigen soll, dass alle Antworten Instanzen des "Antwort" -Objekts sind, die von (composition) unter Verwendung einer beliebigen Kombination von response_header- und response_body -Objekten erstellt wurden. Die Objekte response_header und response_body können erweitert und in jedes Antwortobjekt eingefügt werden. Dies erfolgt im Fall einer filename_response, die das filename_response_body-Kind der Basisklasse response_body verwendet. Sowohl fehlerhafte als auch erfolgreiche Antworten verwenden das Objekt "response".