1

我正在使用 go-swagger 创建 API 端点,并直接在处理函数内部调用业务逻辑,这工作正常。我需要实现“中间件”,这也可以简化我正在使用 mockery 和 testify 进行的单元测试。下面是代码。

Swagger.yml

我只提供了端点的示例代码

---
swagger: "2.0"
info:
  description: Swagger api for VM Manager
  title: vmManager
  version: 1.0.0
consumes:
- application/json
produces:
- application/json
schemes:
- http
paths:
  /createVM:
    post:
      tags:
        - vmManager
      operationId: createVM
      parameters:
        - name: body
          in: body
          schema:
            $ref: "#/definitions/vmInput"
      responses:
        201:
          description: Created
          schema:
            $ref: "#/definitions/response"
        default:
          description: error
          schema:
            $ref: "#/definitions/errorObject"

configure_vmmanager.go

来自上面招摇的呼唤来了

api.VMManagerCreateVMHandler = vm_manager.CreateVMHandlerFunc(func(params vm_manager.CreateVMParams) middleware.Responder {
        log.Debugf("Create VM Handler Called")
        log.Infof("Payload Data : %v , VM Name : %v , Request ID : %v", params.Body.ConfigData, params.Body.VMName, params.Body.RequestID)  
        log.WithFields(log.Fields{
            "Request Payload": params.Body,
        }).Infof("Request Payload to  CreateVMHandler: ")

        vmOutput, err := resthandler.CreateVMHandler(params.Body)
        if err != nil {
                log.Errorf("Eror while creating VM %v :" ,err)
                 errorObject := &models.ErrorObject{ErrorDetails: err ,}
    // TODO Addition for custom error code
                //return vm_manager.NewCreateVMDefault(*ErrorCode).WithPayload(&models.Error{ErrorCode: errorCode, ErrorDesc: err.ErrorDesc})
                return vm_manager.NewCreateVMDefault(int(*err.ErrorCode)).WithPayload(errorObject)
        }
        log.WithFields(log.Fields{
            "Response of CreateVMHandler":vmOutput,
        }).Infof("Response from  CreateVMHandler :")
        return vm_manager.NewCreateVMCreated().WithPayload(vmOutput)
    })

create_vm_handler.go

定义部分

func CreateVMHandler(item *models.VMInput) (*models.Response, *models.ErrorDetails) {
.
.
.
return serverOut, nil
}

如果需要任何其他信息,请发表评论。

4

0 回答 0