http和rpc框架微服务一些杂七杂八的知识点 | 青训营

52 阅读2分钟

http框架中是如何完成整个工作的:

HTTP 请求 -> 解析参数 -> 创建客户端 -> 组装 RPC 请求 -> 调用 RPC 服务 -> 处理 RPC 响应 -> 返回 HTTP 响应 这是在http框架里面完成的工作。

服务请求方式: 从这个代码看,FavoriteAction函数是一个HTTP处理函数,用于实现点赞功能。

客户端调用这个接口的HTTP方法(GET/POST)主要有以下几种方式指定:

  1. 在路由中指定

例如在注册该处理函数时:

go

Copy code

h.POST("/favorite", FavoriteAction)

这样就固定了该接口必须使用POST方法调用。

  1. 在处理函数内部校验
go

Copy code

func FavoriteAction(ctx context.Context, c *app.RequestContext) {

  if c.Method != "POST" {
    // 返回错误
  }

  // 处理逻辑

}

在函数内部可以对入参c.Method进行校验。

  1. 通过代码注释指定

例如在函数上面:

go

Copy code

// @Post /favorite
func FavoriteAction(ctx context.Context, c *app.RequestContext) {

}

这里通过注释的方式标注了POST方法。

  1. 通过服务描述指定

在OpenAPI/Thrift IDL等格式中定义这个接口需要使用的HTTP方法。

总结:

  • 路由级别指定
  • 代码内校验
  • 注释标注
  • IDL定义

组合这几种方式,可以在不同级别约束客户端请求需要使用的HTTP方法。

如何在 Kitex 服务中使用 GORM

image.png

image.png

image.png

image.png

GO语言导包问题

o 语言中,同一个包内的所有文件都在同一个命名空间下,这意味着同一个包内的所有文件可以互相访问对方的任何导出和非导出的函数、变量、常量、类型等,无需任何导入。

但要注意以下几点:

  1. 文件的包名必须相同:同一目录下的所有 Go 文件的包名必须一致。
  2. 导出的名字:Go 中的变量、函数、常量或类型的名字如果以大写字母开头,那么它是已导出的,可以被其他包访问。如果是小写字母开头,则只能在其所在的包中被访问。
  3. 文件分割:您可以根据逻辑、功能或任何其他考虑来分割您的代码到不同的文件中,但只要它们在同一个包内,它们都可以互相访问。

Gorm模型类定义需要注意

但是,你需要将idfavorite字段首字母大写,以使它们能被外部包访问,否则默认情况下它们是私有的。