Skip to main content

API Import

概述

在 go-zero 中,我们通过 api 语言来声明 HTTP 服务,然后通过 goctl 生成 HTTP 服务代码,在之前我们系统性的介绍了 API 规范

在 HTTP 服务开发中,我们都是通过 api 描述语言来描述 HTTP 服务,随着业务量的增加,api 文件可能会越来越大,又或者我们有一些公共结构体,如果我们都写在同一个 api 文件中,那么 api文件将变成非常巨大,不易阅读和维护,我们可以通过 api import 来引入其他 api 文件解决这类问题。

api 文件引入

假设我们 HTTP 服务的响应格式统一为如下 json 格式:

{
"code": 0,
"msg": "success",
"data": {}
}

通过如上 json 可以看出,我们的响应格式中有 codemsgdata 三个字段,其中 codemsg 是固定的,data 是可变的,我们可以将其中2个字段 codemsg 抽象出来,定义为一个公共的结构体,然后在其他 api 文件中引入这个结构体。

示例,假设我们有一个用户服务来查询用户信息和修改用户信息,我们可以将 codemsg 抽象在 base.api 中,然后 user.api 中复用和定义具体的响应结构体即可。

syntax =  "v1"

type Base {
Code int `json:"code"`
Msg string `json:"msg"`
}
温馨提示

在 api 描述语言中,没有 package 的概念,所以在引入其他 api 文件时,需要使用相对路径,如上面示例中的 import "base.api",如果是在同一个目录下,亦可以使用 import "./base.api"。 import 支持相对路径和绝对路径。

在 api 描述语言中,我们规定将所有 service 语法块声明的 HTTP 服务信息都放在 main api文件中,抽象结构体放在其他 api 文件中,然后在 main api 文件中引入其他 api 文件,这样可以让 main api 文件更加简洁,易于维护,而被引入的 api 文件中不允许出现 service 语法块,否则会报错。

特别注意:api 引入不支持循环引入!!!