Vscode niuhe 插件使用教程 - 自定义请求和返回协议

官方教程已经上线, 请访问: http://niuhe.zuxing.net
admin-core 项目中, 提供了一个自定义实现 Bearea 认证和修改默认返回的例子(报特定错误时显示为成功)

在实际开发场景里,对请求进行认证以及在数据返回前进行统一处理是常见的需求。例如,在开发企业级应用时,为确保系统安全性,需要对用户的每一次请求进行严格的身份认证;在数据展示前,为保证数据格式统一、符合业务需求,也需要对返回数据进行处理。这时,我们可以通过自定义 IApiProtocol 实现来达到这一目的。

在通过插件生成的 niuhe 代码中,IApiProtocol扮演了统一处理参数的关键角色。它为处理请求认证和数据统一处理等操作提供了标准化的接口,您可以基于IApiProtocol进行定制化开发,灵活满足不同业务场景下对请求和数据处理的多样化需求,从而使整个开发流程更加高效、规范。

在 niuhe 代码里,您只需实现 IApiProtocolReadWrite 方法,前者处理输入数据,后者处理输出数据,再在 GetModule 返回自定义实现就行。

type IApiProtocol interface {
	Read(*Context, reflect.Value) error
	Write(*Context, reflect.Value, error) error
}

其在 go niuhe 库中提供了一个默认实现 :

type DefaultApiProtocol struct{}

func (self DefaultApiProtocol) Read(c *Context, reqValue reflect.Value) error {
	if err := zpform.ReadReflectedStructForm(c.Request, reqValue); err != nil {
		return NewCommError(-1, err.Error())
	}
	return nil
}

func (self DefaultApiProtocol) Write(c *Context, rsp reflect.Value, err error) error {
	rspInst := rsp.Interface()
	if _, ok := rspInst.(isCustomRoot); ok {
		c.JSON(200, rspInst)
	} else {
		var response map[string]interface{}
		if err != nil {
			if commErr, ok := err.(ICommError); ok {
				response = map[string]interface{}{
					"result":  commErr.GetCode(),
					"message": commErr.GetMessage(),
				}
				if commErr.GetCode() == 0 {
					response["data"] = rsp.Interface()
				}
			} else {
				response = map[string]interface{}{
					"result":  -1,
					"message": err.Error(),
				}
			}
		} else {
			response = map[string]interface{}{
				"result": 0,
				"data":   rspInst,
			}
		}
		c.JSON(200, response)
	}
	return nil
}

下面代码片段展示自定义协议的引入示例

var thisModule *niuhe.Module
func GetModule() *niuhe.Module {
	if thisModule == nil {
		thisModule = niuhe.NewModule("api")
		thisModule = niuhe.NewModuleWithProtocolFactoryFunc("api", func() niuhe.IApiProtocol {
			return niuhe.DefaultApiProtocol{} // 自定义时替换掉本行即可
		})
	}
	return thisModule
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值