Routes & operations
Routes and operations turn an annotation into an entry in the spec’s paths
map, wired to the parameters it accepts and the responses it returns. This page
covers the two operation annotations and the companion structs they reference.
Each pane pairs the annotated Go (left) with the exact fragment the scanner
emits (right), from the test-covered
docs/examples/concepts/routes
package.
For the exhaustive rule on any annotation below, follow its link to the
Maintainers reference; the
Parameters: / Responses: body grammars are covered in
Sub-languages.
swagger:route
swagger:route <METHOD> <path> [tags] <operationID> declares a path and its
operation in one annotation. The body’s responses: block ties status codes to
named responses ($ref into the spec’s responses). It lives in a plain
comment block — no Go declaration required.
// swagger:route GET /pets pets listPets
//
// Lists pets in the store, optionally filtered by tag.
//
// responses:
//
// 200: petsResponse
// default: errorResponseFull source: docs/examples/concepts/routes/routes.go
{
"get": {
"tags": [
"pets"
],
"summary": "Lists pets in the store, optionally filtered by tag.",
"operationId": "listPets",
"parameters": [
{
"type": "string",
"x-go-name": "Tag",
"description": "Tag filters pets by tag.",
"name": "tag",
"in": "query"
},
{
"maximum": 100,
"minimum": 1,
"type": "integer",
"format": "int32",
"x-go-name": "Limit",
"description": "Limit caps the number of results.",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"$ref": "#/responses/petsResponse"
},
"default": {
"$ref": "#/responses/errorResponse"
}
}
}
}
Full source: docs/examples/concepts/routes/testdata/route.json
swagger:operation
swagger:operation carries the same header but spells the operation out as a
YAML document after a --- fence — useful when you want to author the operation
object directly (here a path parameter and an inline $ref response schema).
// swagger:operation GET /pets/{id} pets getPet
//
// ---
// summary: Get a pet by ID.
// parameters:
// - name: id
// in: path
// required: true
// type: integer
// format: int64
// responses:
// '200':
// description: the requested pet
// schema:
// $ref: '#/definitions/Pet'
// default:
// $ref: '#/responses/errorResponse'Full source: docs/examples/concepts/routes/routes.go
{
"get": {
"tags": [
"pets"
],
"summary": "Get a pet by ID.",
"operationId": "getPet",
"parameters": [
{
"type": "integer",
"format": "int64",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "the requested pet",
"schema": {
"$ref": "#/definitions/Pet"
}
},
"default": {
"$ref": "#/responses/errorResponse"
}
}
}
}
Full source: docs/examples/concepts/routes/testdata/operation.json
swagger:parameters
swagger:parameters <operationID>… declares a struct whose fields become the
parameters of the named operation(s). Field doc comments carry in:, the
validations, and the description; the parameters attach to every operation ID
listed.
// ListPetsParams is the parameter set for the listPets operation. Each field
// becomes one parameter; the operation IDs after swagger:parameters name the
// operations the set applies to.
//
// swagger:parameters listPets
type ListPetsParams struct {
// Tag filters pets by tag.
//
// in: query
Tag string `json:"tag"`
// Limit caps the number of results.
//
// in: query
// minimum: 1
// maximum: 100
Limit int32 `json:"limit"`
}Full source: docs/examples/concepts/routes/routes.go
[
{
"type": "string",
"x-go-name": "Tag",
"description": "Tag filters pets by tag.",
"name": "tag",
"in": "query"
},
{
"maximum": 100,
"minimum": 1,
"type": "integer",
"format": "int32",
"x-go-name": "Limit",
"description": "Limit caps the number of results.",
"name": "limit",
"in": "query"
}
]
Full source: docs/examples/concepts/routes/testdata/parameters.json
swagger:response
swagger:response <name> declares a struct as a named entry in the spec’s
top-level responses. A Body field (or in: body) becomes the response
schema; routes reference it by name. Here the body is a []Pet, so the schema
is an array of $refs.
// PetsResponse is the list returned by listPets.
//
// swagger:response petsResponse
type PetsResponse struct {
// in: body
Body []Pet
}
// ErrorResponse is the default error payload.
//
// swagger:response errorResponse
type ErrorResponse struct {
// in: body
Body struct {
// Message is a human-readable error message.
Message string `json:"message"`
}
}Full source: docs/examples/concepts/routes/routes.go
{
"description": "PetsResponse is the list returned by listPets.",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/Pet"
}
}
}
Full source: docs/examples/concepts/routes/testdata/response.json
swagger:file
swagger:file on a parameter field marks it as a binary upload — the parameter
emits as {type: file}. It belongs on a formData field of a
swagger:parameters struct.
// swagger:route POST /pets/{id}/photo pets uploadPetPhoto
//
// responses:
//
// 200: petsResponse
// UploadParams is the multipart upload for the uploadPetPhoto operation.
//
// swagger:parameters uploadPetPhoto
type UploadParams struct {
// Photo is the image to upload.
//
// in: formData
// swagger:file
Photo io.ReadCloser `json:"photo"`
}Full source: docs/examples/concepts/routes/routes.go
[
{
"type": "file",
"x-go-name": "Photo",
"description": "Photo is the image to upload.",
"name": "photo",
"in": "formData"
}
]
Full source: docs/examples/concepts/routes/testdata/file.json
What’s next
- Validations — constrain parameter and field values.
- Model definitions — the schemas these operations reference.
- Shaping the output —
$refvs inline, aliases, and the other rendering knobs.