2016-07-20 9 views
0

Ich bin mit Go-Prahlerei Leiter des Master https://github.com/go-swagger/go-swagger/commit/3981236c3f6bd9eabb26f14e9d31b853d340405fGo-Prahlerei Antwort-Payloads keine Typen modellieren

Nicht sicher, ob dies ein Problem ist oder nur ein Mangel an Verständnis für meinen Teil. Ich habe eine Healthcheck-Methode, die standardmäßig einen Status 500 zusammen mit einem errorMessage-Objekt zurückgibt, das im Modell definiert ist. Die WithPayload-Methode verwendet jedoch einen GetHealthcheckDefaultBodyBody-Typ. Nicht so ein großes Problem hier, wie ich nur eine von denen erstellen kann, aber wo ich Arrays von Modelltypen zurückgeben muss, werde ich am Ende schreiben eine Menge Boilerplate, um von den Modelltypen zu den BodyBody-Typen, E.G.

func ClientsGet(params clients.GetClientsParams) middleware.Responder { 

    results, err := repository.GetAllClients() 

    if err != nil { 
     return clients.NewGetClientsDefault(500).WithPayload(clients.GetClientsDefaultBodyBody{Message: sPtr(err.Error())}) 
    } 


    return &clients.GetClientsOK{results} //does not compile as GetClientsOK accepts []*clients.GetClientsOKBodyBody not []*models.Client 
} 

Ich bemerkte, dass das Codebeispiel in der Repo in dieser Hinsicht meines generierten Code unterscheidet: https://github.com/go-swagger/go-swagger/blob/3981236c3f6bd9eabb26f14e9d31b853d340405f/examples/tutorials/todo-list/server-complete/restapi/operations/todos/add_one_responses.go. Ich war nicht in der Lage Code zu erzeugen, aus dem Beispiel hier spec: https://github.com/go-swagger/go-swagger/blob/3981236c3f6bd9eabb26f14e9d31b853d340405f/examples/tutorials/todo-list/server-complete/swagger.yml

Mein Spec:

{ 
    "swagger": "2.0", 
    "info": { 
    "title": "M3 Intl Maas Service", 
    "version": "0.1.0" 
    }, 
    "produces": [ 
    "application/json" 
    ], 
    "consumes": [ 
    "application/json" 
    ], 
    "schemes": [ 
    "http" 
    ], 
    "definitions": { 
    "client": { 
     "properties": { 
     "id": { 
      "format": "int64", 
      "type": "integer" 
     }, 
     "name": { 
      "type": "string" 
     } 
     }, 
     "required": [ 
     "id", 
     "name" 
     ], 
     "type": "object" 
    }, 
    "messageTeaser": { 
     "properties": { 
     "campaignId": { 
      "type": "string" 
     }, 
     "clientName": { 
      "type": "string" 
     }, 
     "footer": { 
      "type": "string" 
     }, 
     "id": { 
      "type": "string" 
     }, 
     "isNew": { 
      "type": "boolean" 
     }, 
     "jobNumber": { 
      "type": "string" 
     }, 
     "piLink": { 
      "type": "string" 
     }, 
     "repId": { 
      "type": "string" 
     }, 
     "summary": { 
      "type": "string" 
     }, 
     "title": { 
      "type": "string" 
     } 
     }, 
     "required": [ 
     "id", 
     "title", 
     "summary", 
     "isNew", 
     "footer", 
     "jobNumber", 
     "clientName", 
     "piLink", 
     "repId", 
     "campaignId" 
     ], 
     "type": "object" 
    }, 
    "errorMessage": { 
     "type": "object", 
     "required": [ 
     "message" 
     ], 
     "properties": { 
     "message": { 
      "type": "string" 
     } 
     } 
    } 
    }, 
    "paths": { 
    "/clients": { 
     "get": { 
     "parameters": [ 
      { 
      "in": "path", 
      "required": true, 
      "name": "client_id", 
      "type": "integer" 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "get client", 
      "schema": { 
       "items": { 
       "properties": { 
        "id": { 
        "format": "int64", 
        "type": "integer" 
        }, 
        "name": { 
        "type": "string" 
        } 
       }, 
       "required": [ 
        "id", 
        "name" 
       ], 
       "type": "object" 
       } 
      } 
      }, 
      "401": { 
      "description": "unauthorised" 
      }, 
      "404": { 
      "description": "client not found" 
      }, 
      "default": { 
      "description": "generic error response", 
      "schema": { 
       "type": "object", 
       "required": [ 
       "message" 
       ], 
       "properties": { 
       "message": { 
        "type": "string" 
       } 
       } 
      } 
      } 
     }, 
     "tags": [ 
      "clients" 
     ] 
     }, 
     "put": { 
     "parameters": [ 
      { 
      "in": "path", 
      "required": true, 
      "name": "client_id", 
      "type": "integer" 
      }, 
      { 
      "in": "body", 
      "required": true, 
      "name": "client", 
      "schema": { 
       "properties": { 
       "id": { 
        "format": "int64", 
        "type": "integer" 
       }, 
       "name": { 
        "type": "string" 
       } 
       }, 
       "required": [ 
       "id", 
       "name" 
       ], 
       "type": "object" 
      } 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "update client", 
      "schema": { 
       "items": { 
       "properties": { 
        "id": { 
        "format": "int64", 
        "type": "integer" 
        }, 
        "name": { 
        "type": "string" 
        } 
       }, 
       "required": [ 
        "id", 
        "name" 
       ], 
       "type": "object" 
       } 
      } 
      }, 
      "401": { 
      "description": "unauthorised" 
      }, 
      "404": { 
      "description": "client not found" 
      }, 
      "default": { 
      "description": "generic error response", 
      "schema": { 
       "type": "object", 
       "required": [ 
       "message" 
       ], 
       "properties": { 
       "message": { 
        "type": "string" 
       } 
       } 
      } 
      } 
     }, 
     "tags": [ 
      "clients" 
     ] 
     }, 
     "delete": { 
     "parameters": [ 
      { 
      "in": "path", 
      "required": true, 
      "name": "client_id", 
      "type": "integer" 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "delete client" 
      }, 
      "401": { 
      "description": "unauthorised" 
      }, 
      "404": { 
      "description": "client not found" 
      }, 
      "default": { 
      "description": "generic error response", 
      "schema": { 
       "type": "object", 
       "required": [ 
       "message" 
       ], 
       "properties": { 
       "message": { 
        "type": "string" 
       } 
       } 
      } 
      } 
     } 
     } 
    }, 
    "/clients/{client_id}": { 
     "get": { 
     "parameters": [ 
      { 
      "in": "path", 
      "required": true, 
      "name": "client_id", 
      "type": "integer" 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "get client", 
      "schema": { 
       "items": { 
       "properties": { 
        "id": { 
        "format": "int64", 
        "type": "integer" 
        }, 
        "name": { 
        "type": "string" 
        } 
       }, 
       "required": [ 
        "id", 
        "name" 
       ], 
       "type": "object" 
       } 
      } 
      }, 
      "401": { 
      "description": "unauthorised" 
      }, 
      "404": { 
      "description": "client not found" 
      }, 
      "default": { 
      "description": "generic error response", 
      "schema": { 
       "items": { 
       "type": "object", 
       "required": [ 
        "message" 
       ], 
       "properties": { 
        "message": { 
        "type": "string" 
        } 
       } 
       } 
      } 
      } 
     }, 
     "tags": [ 
      "clients" 
     ] 
     }, 
     "put": { 
     "parameters": [ 
      { 
      "in": "path", 
      "required": true, 
      "name": "client_id", 
      "type": "integer" 
      }, 
      { 
      "in": "body", 
      "required": true, 
      "name": "client", 
      "schema": { 
       "properties": { 
       "id": { 
        "format": "int64", 
        "type": "integer" 
       }, 
       "name": { 
        "type": "string" 
       } 
       }, 
       "required": [ 
       "id", 
       "name" 
       ], 
       "type": "object" 
      } 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "update client", 
      "schema": { 
       "items": { 
       "properties": { 
        "id": { 
        "format": "int64", 
        "type": "integer" 
        }, 
        "name": { 
        "type": "string" 
        } 
       }, 
       "required": [ 
        "id", 
        "name" 
       ], 
       "type": "object" 
       } 
      } 
      }, 
      "401": { 
      "description": "unauthorised" 
      }, 
      "404": { 
      "description": "client not found" 
      }, 
      "default": { 
      "description": "generic error response", 
      "schema": { 
       "items": { 
       "type": "object", 
       "required": [ 
        "message" 
       ], 
       "properties": { 
        "message": { 
        "type": "string" 
        } 
       } 
       } 
      } 
      } 
     }, 
     "tags": [ 
      "clients" 
     ] 
     }, 
     "delete": { 
     "parameters": [ 
      { 
      "in": "path", 
      "required": true, 
      "name": "client_id", 
      "type": "integer" 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "delete client" 
      }, 
      "401": { 
      "description": "unauthorised" 
      }, 
      "404": { 
      "description": "client not found" 
      }, 
      "default": { 
      "description": "generic error response", 
      "schema": { 
       "items": { 
       "type": "object", 
       "required": [ 
        "message" 
       ], 
       "properties": { 
        "message": { 
        "type": "string" 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    }, 
    "/healthcheck": { 
     "get": { 
     "responses": { 
      "200": { 
      "description": "confirm that the service is healthy" 
      }, 
      "default": { 
      "description": "generic error response", 
      "schema": { 
       "type": "object", 
       "required": [ 
       "message" 
       ], 
       "properties": { 
       "message": { 
        "type": "string" 
       } 
       } 
      } 
      } 
     }, 
     "tags": [ 
      "healthcheck" 
     ] 
     } 
    }, 
    "/usermessagesummary/{community_id}/{user_id}/{lang_id}": { 
     "get": { 
     "parameters": [ 
      { 
      "in": "path", 
      "required": true, 
      "name": "community_id", 
      "type": "string" 
      }, 
      { 
      "in": "path", 
      "required": true, 
      "name": "user_id", 
      "type": "string" 
      }, 
      { 
      "in": "path", 
      "required": true, 
      "name": "lang_id", 
      "type": "string" 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "Returns message summary according to criteria", 
      "schema": { 
       "items": { 
       "properties": { 
        "campaignId": { 
        "type": "string" 
        }, 
        "clientName": { 
        "type": "string" 
        }, 
        "footer": { 
        "type": "string" 
        }, 
        "id": { 
        "type": "string" 
        }, 
        "isNew": { 
        "type": "boolean" 
        }, 
        "jobNumber": { 
        "type": "string" 
        }, 
        "piLink": { 
        "type": "string" 
        }, 
        "repId": { 
        "type": "string" 
        }, 
        "summary": { 
        "type": "string" 
        }, 
        "title": { 
        "type": "string" 
        } 
       }, 
       "required": [ 
        "id", 
        "title", 
        "summary", 
        "isNew", 
        "footer", 
        "jobNumber", 
        "clientName", 
        "piLink", 
        "repId", 
        "campaignId" 
       ], 
       "type": "object" 
       } 
      } 
      }, 
      "401": { 
      "description": "unauthorised" 
      }, 
      "404": { 
      "description": "client not found" 
      }, 
      "default": { 
      "description": "generic error response", 
      "schema": { 
       "items": { 
       "type": "object", 
       "required": [ 
        "message" 
       ], 
       "properties": { 
        "message": { 
        "type": "string" 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Antwort

0

können Sie versuchen, mit:

"200": { "description": "get client", "schema": { "items": { "$ref": "#/definitions/client" } }

Der Schiedsrichter stellt sicher, dass die gleiche Art wiederverwendet wird anstatt wegen der anonymen Definition eine neue zu generieren.

Verwandte Themen