三、beekit 入门指南

快速开始

这是一个最简单的 后台服务 例子:
main.go

package main

import (

	//  _ "github.com/go-sql-driver/mysql" //mysql数据驱动
	//  _ "drivers/dm"  //达梦数据库驱动
	_ "drivers/kingbase.com/gokb" //人大金仓数据库驱动

	"beekit/adapter"
	"beekit/cmd"
	"beekit/common"
	"beekit/middleware/auth"
	"beekit/service"
	"beekit/transport/rpc"
	"github.com/valyala/fasthttp"
)

// 初始化调试日志
func init() {}

// 初始化接口参数校验器
func init() {}

// 初始化配置文件
func init() {}

// 初始化orm引擎
func init() {}

func main() {
	//初始化权限粒度控制器
	common.EnforcerInstance = auth.Setup(common.Engine)
	server := rpc.NewService()
	//注册服务方法
	server.AddInstanceMethods(&SysLoginLogService{}, "SysLoginLogService")
	s := &fasthttp.Server{}
	err := server.Bind(s)
	for _, v := range server.Names() {
		fmt.Println(v)
	}
	s.ListenAndServe(":8000")
	fmt.Println(err)
}

根据自己使用的数据库来匿名引入驱动,例如引入 "github.com/go-sql-driver/mysql"

服务层 SysLoginLogService.go

package service

import (
	"beekit/common"
	"beekit/models"
	"beekit/transport/rpc/core"
	"context"
)

type SysLoginLogService struct {
}

func (e *SysLoginLogService) ExistID(ctx context.Context, id string) (bool, error) {
	has, err := common.Engine.ID(id).Exist(&models.SysLoginLog{})
	return has, err
}

func (e *SysLoginLogService) FindID(ctx context.Context, id string) (entity.SysDept, error) {
	var data entity.SysDept
	_, err := common.Engine.ID(id).Get(&data)
	return data, err
}

我们在服务层中定义了两个方法,分别是ExistID、FindID,这两个方法在main中便已经注册到服务的执行器里面了。
我们执行 go run main.go,运行服务,等服务启动后将会打印上面两个方法。

下面我们用postman来直接调用服务方法来试一下。
image
可以看到结果返回不存在id为1的记录。

调用数据格式说明

1.概述
beekit采用JSON-RPC 2.0 规范,JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。本规范主要定义了一些数据结构及其相关的处理规则。
2.约定
接口服务名由两部分组成,格式为:命名空间_方法名称,使用下划线拼接,定义的接口服务名必须唯一。
例如 SysLoginLogService_ExistID。

  • “SysLoginLogService”为服务层的命名空间,该名称可以随便自定义,最好唯一,不要重复。
  • “ExistID”为函数方法名称。

3.请求对象

{"jsonrpc":"2.0","method":"SysLoginLogService_ExistID","params":["1"]}

发送一个请求对象至服务端代表一个rpc调用, 一个请求对象包含下列成员:

  • jsonrpc
    指定JSON-RPC协议版本的字符串,必须准确写为“2.0”
  • method
    包含所要调用方法名称的字符串,给rpc内部的方法名及扩展名,不能在其他地方使用。
  • params
    调用方法所需要的结构化参数值,且必须是集合类型params:[],该成员参数可以被省略。
  • id
    已建立客户端的唯一标识id,值必须int数值,该成员参数可以被省略。服务端必须回答相同的值如果包含在响应对象。这个成员用来两个对象之间的关联上下文,省略时默认为零。

4.响应对象

{"jsonrpc":"2.0","id":0,"result":false,"code":0}

当发起一个rpc调用时,除通知之外,服务端都必须回复响应。响应表示为一个JSON对象,使用以下成员:

  • jsonrpc
    指定JSON-RPC协议版本的字符串,必须准确写为“2.0”
  • code
    使用整数表示调用结果状态。0表示成功状态,其他则表示失败。
  • result
    该成员在成功时必须包含。
    当调用方法引起错误时必须不包含该成员。
    服务端中的被调用方法决定了该成员的值。
  • error
    该成员在失败是必须包含。
    当没有引起错误的时必须不包含该成员。
  • id
    该成员必须包含。
    该成员值必须于请求对象中的id成员值一致。

响应对象必须包含result或error成员,但两个成员不会同时呈现。

5.错误对象
当一个rpc调用遇到错误时,返回的响应对象必须包含错误成员参数,并且为带有下列成员参数的对象:

  • code
    使用数值表示该异常的错误类型。必须为整数。
  • message
    对该错误的简单描述字符串。该描述应尽量限定在简短的一句话。
  • data
    包含关于错误附加信息的基本类型或结构化类型。该成员可忽略。该成员值由服务端定义(例如详细的错误信息,嵌套的错误等)。

-32768至-32000为保留的预定义错误代码。

  • -32700 Parse error语法解析错误,服务端接收到无效的json。该错误发送于服务器尝试解析json文本。
  • -32600 Invalid Request无效请求,发送的json不是一个有效的请求对象。
  • -32601 Method not found找不到方法,该方法不存在或无效
  • -32602 Invalid params无效的参数,无效的方法参数。
  • -32603 Internal error内部错误,JSON-RPC内部错误。
  • -32000 to -32099
    Server error服务端错误,预留用于自定义的服务器错误。

除此之外剩余的错误类型代码可供应用程序作为自定义错误。

posted @ 2022-05-07 16:20  天边行云  阅读(157)  评论(0编辑  收藏  举报