code: def build_operation(operation, ns, rule, func):
      
      swagger_operation = swagger.Operation(
          operationId=operation_name(operation, ns),
          parameters=swagger.ParametersList([
          ]),
          responses=swagger.Responses(),
          tags=[ns.subject_name],
      )
  
      # custom header parameter
      swagger_operation.parameters.append(
          header_param("X-Response-Skip-Null")
      )
  
      # path parameters
      swagger_operation.parameters.extend([
          path_param(argument, ns)
          for argument in rule.arguments
      ])
  
      # query string parameters
      qs_schema = get_qs_schema(func)
      if qs_schema:
          swagger_operation.parameters.extend([
              query_param(name, field)
              for name, field in qs_schema.fields.items()
          ])
  
      # body parameter
      request_schema = get_request_schema(func)
      if request_schema:
          swagger_operation.parameters.append(
              body_param(request_schema)
          )
  
      # sort parameters for predictable output
      swagger_operation.parameters.sort(key=lambda parameter: parameter["name"])
  
      add_responses(swagger_operation, operation, ns, func)
      return swagger_operation
docs: Build an operation definition.