我正在使用 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
}
如果需要任何其他信息,请发表评论。