当前位置: 首页 > news >正文

GoZero微服务个人探究之路(九)api文件编写总结

参考来源go-zero官方文档icon-default.png?t=N7T8https://go-zero.dev/docs/tutorials

前言

go-zero是目前star最多的go语言微服务框架,api 是 go-zero特殊的语言,类型文件,go-zero自带的goctl可以通过.api文件生成http服务代码

api文件内容编写

不可使用关键字

沿用了golang的关键字,这些都不可以使用

break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var

syntax语句

代表了api语言版本,当前就是v1版本

syntax = "v1"

info语句

info对api文件编写描述信息,目前不会参与到goctl代码生成

info语句
info (
foo: "bar"
bar:
)

import语句

用于import其他api文件,支持相对和绝对路径
import "/path/to/file"

import (
"bar"
"relative/to/file"
)

数据类型

数据类型沿用golang数据类型,目前不支持数组,支持切片,不支持别名

不需要声明struct关键字

//单个结构体

type Bar {
Foo int `json:"foo"`
Bar bool `json:"bar"`
Baz []string `json:"baz"`
Qux map[string]string `json:"qux"`
}

//结构体组

type (
Int int
Integer = int
        Bar {
        Foo int `json:"foo"`
        Bar bool `json:"bar"`
        Baz []string `json:"baz"`
        Qux map[string]string `json:"qux"`
        }
)

service语句*

@server描述服务的meta信息

@server (// jwt 声明// 如果 key 固定为 “jwt:”,则代表开启 jwt 鉴权声明// value 则为配置文件的结构体名称jwt: Auth// 路由前缀// 如果 key 固定为 “prefix:”// 则代表路由前缀声明,value 则为具体的路由前缀值,字符串中没让必须以 / 开头prefix: /v1// 路由分组// 如果 key 固定为 “group:”,则代表路由分组声明// value 则为具体分组名称,在 goctl生成代码后会根据此值进行文件夹分组group: Foo// 中间件// 如果 key 固定为 middleware:”,则代表中间件声明// value 则为具体中间件函数名称,在 goctl生成代码后会根据此值进生成对应的中间件函数middleware: AuthInterceptor// 超时控制// 如果 key 固定为  timeout:”,则代表超时配置// value 则为具体中duration,在 goctl生成代码后会根据此值进生成对应的超时配置timeout: 3s// 其他 key-value,除上述几个内置 key 外,其他 key-value// 也可以在作为 annotation 信息传递给 goctl 及其插件,但就// 目前来看,goctl 并未使用。foo: bar
)

写service语句还需了解如下内容

@doc语句

对单个路由的meta信息描述

@doc (
foo: "bar"
bar: "baz"
)

@handler语句

描述单个路由的handler信息

@handler foo

路由语句
// 没有请求体和响应体的写法
get /ping// 只有请求体的写法
get /foo (foo)// 只有响应体的写法
post /foo returns (foo)// 有请求体和响应体的写法
post /foo (foo) returns (bar)

service语句的示例写法

// 带 @server 的写法
@server (prefix: /v1group: Login
)
service user {@doc "登录"@handler loginpost /user/login (LoginReq) returns (LoginResp)@handler getUserInfoget /user/info/:id (GetUserInfoReq) returns (GetUserInfoResp)
}
@server (prefix: /v1middleware: AuthInterceptor
)
service user {@doc "登录"@handler loginpost /user/login (LoginReq) returns (LoginResp)@handler getUserInfoget /user/info/:id (GetUserInfoReq) returns (GetUserInfoResp)
}

补充

路由前缀prefix

可以为同样的路由名指定不同的前缀,v1、v2

在routes.go里面,代码体现如下

服务分组group

指定分组的信息后,生成的代码更加逻辑清晰

签名开关signature

在@server部分可以设置signature为true来开启签名功能

生成routes.go代码示例如下

JWT认证

@server里面设置jwt:Auth开启

goctl生成代码如下

代码生成后的 jwt 认证,框架只做了服务端逻辑,对于 jwt token 的生成及 refresh token 仍需要开发者自行实现

中间件声明

在@server内通过middleware:来指定中间件,多个中间件逗号分隔

生成的目录结构就会有中间件代码

相关文章:

GoZero微服务个人探究之路(九)api文件编写总结

参考来源go-zero官方文档https://go-zero.dev/docs/tutorials 前言 go-zero是目前star最多的go语言微服务框架,api 是 go-zero特殊的语言,类型文件,go-zero自带的goctl可以通过.api文件生成http服务代码 api文件内容编写 不可使用关键字 …...

泛型..

1.泛型 所谓泛型 在类定义处是一种类型参数(我们平常所见到的参数指的就是方法中的参数 他接收有外界传递来的值 然后在方法中进行使用) 在类内部的话 则充当一种占位符 并且还提高了代码的复用率 何以见得提高了代码的复用率 其实就是通过对比使用了泛型技术和没有使用泛型技…...

Android App开发基础(1)—— App的开发特点

本文介绍基于Android系统的App开发常识,包括以下几个方面:App开发与其他软件开发有什么不一样,App工程是怎样的组织结构又是怎样配置的,App开发的前后端分离设计是如何运作实现的,App的活动页面是如何创建又是如何跳转…...

docker-compose初探

我一直直接使用docker命令来创建容器,没有怎么用过docker-compose。也不知道docker-compose和docker有什么区别,docker-compose有什么好处。 现在我约略认为,docker-compose是一个简化docker命令的工具,或者说,它是能…...

【webrtc】跟webrtc学时间戳、序号类型转换

间隔ms src\modules\congestion_controller\remb_throttler.ccnamespace {constexpr TimeDelta kRembSendInterval = TimeDelta::Millis(200); } // namespace百分比的处理 src\modules\congestion_controller\remb_throttler.ccvoid RembT...

文件操作与IO(一些小项目)

在指定目录中寻找文件 扫描指定目录,并找到名称对应的所有文件(不包含目录). import java.io.File; import java.util.Scanner;public class Project1 {public static void main(String[] args) {//1.输入必要的信息Scanner sc new Scanner(System.in);System.out.println(&…...

C语言-算法-线性dp

[USACO1.5] [IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中,从 7 → 3 → 8 →…...

Pandas应用-股票分析实战

股票时间序列 时间序列: 金融领域最重要的数据类型之一 股价、汇率为常见的时间序列数据 趋势分析: 主要分析时间序列在某一方向上持续运动 在量化交易领域,我们通过统计手段对投资品的收益率进行时间序列建模,以此来预测未来的收…...

Database history tablesupgraded

zabbix升级到6之后,配置安装完成会有一个红色输出,但是不影响zabbix使用,出于强迫症,找到了该问题的解决方法。 Database history tables upgraded: No. Support for the old numeric type is deprecated. Please upgrade to nume…...

Dify学习笔记-应用发布(四)

1、发布为公开 Web 站点 使用 Dify 创建 AI 应用的一个好处在于,你可以在几分钟内就发布一个可供用户使用的 Web 应用,该应用将根据你的 Prompt 编排工作。 如果你使用的是自部署的开源版,该应用将运行在你的服务器上 如果你使用的是云服务&…...

优化用户体验测试应用领域:提升产品质量与用户满意度

在当今数字化时代,用户体验测试应用已经成为确保产品质量、提升用户满意度的关键工具。随着技术的不断发展,用户的期望也在不断演变,因此,为了保持竞争力,企业必须将用户体验置于产品开发的核心位置。本文将探讨用户体…...

顶顶通呼叫中心中间件机器人压力测试配置(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件机器人压力测试(mod_cit基于FreeSWITCH) 一、配置acl.conf 打开ccadmin-》点击配置文件-》点击acl.conf-》我这里是已经配置好了的,这里的192.168.31.145是我自己的内网IP,你们还需要自行修改 二、配置线路 打开ccadmin-&g…...

Debezium发布历史87

原文地址: https://debezium.io/blog/2020/03/19/integration-testing-for-change-data-capture-with-testcontainers/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. 使用 Testcontainer 进行变更数…...

Leetcode131.分割回文串-Palindrome Patitioning-Python-回溯法

解题思路: 1.切割回文串,可以用解决找组合问题的思路解决,而解决组合问题,可以用回溯法,故本题选择回溯法。 2.理解两个事情:1.递归函数里的for循环是横向遍历给定字符串s的每一个字母。2.针对s的每一个字…...

Java面试——基础篇

目录 1、java语言有哪些优点和缺点? 2、JVM 、 JDK 和 JRE的关系 3、为什么说 Java 语言“编译与解释并存”? 4、Java和c的区别 5、基本数据类型 5.1、java的8种基本数据类型: 5.2、基本类型和包装类型的区别: 5.3、包装类型的缓存机…...

C++——结构体

1,结构体基本概念 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。像int(整型),浮点型,bool型,字符串型等都是属于系统内置的数据类型。而今天要学习的结构体则是属于我们自定义…...

C++技术要点总结, 面试必备, 收藏起来慢慢看

目录 1. 语言对比 1.1 C 11 新特性 2.2 C 和 C 的区别 2.3 Python 和 C 的区别 2. 编译内存相关 2.1. C 程序编译过程 2.2. C 内存管理 2.3. 栈和堆的区别 2.4. 变量的区别 2.5. 全局变量定义在头文件中有什么问题? 2.6. 内存对齐 2.7. 什么是内存泄露 …...

VR数字展厅,平面静态跨越到3D立体化时代

近些年,VR的概念被越来越多的人提起,较为常见的形式就是VR数字展厅。VR数字展厅的出现,让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新,同时也意味着展览传播的方式不再局限于原来的图文、视频,而是…...

Linux中LVM实验

LVM实验: 1、分区 -L是大小的意思-n名称的意思 从vg0(卷组)分出来 2、格式化LV逻辑卷 LVM扩容 如果icdir空间不够了, 扩展空间lvextend -L 5G /dev/vg0/lv1 /dev/vg0/lv1(pp,vg,lv) 刷新文件系统xfs_growfs /lvdir VG扩容 …...

外包干了一个月,技术退步明显。。。。。

先说一下自己的情况,本科生,19年通过校招进入南京某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...

苹果内购订阅的“时间陷阱”:如何正确处理UTC与东八区的时间转换(附Java代码)

苹果订阅时间戳的时区陷阱:UTC与东八区转换的实战指南 1. 为什么时间戳处理如此重要? 在苹果应用内购(IAP)订阅系统中,时间戳处理看似简单,实则暗藏玄机。许多开发者都曾踩过这样的坑:用户明明购…...

如何用WechatFerry构建企业级微信自动化解决方案

如何用WechatFerry构建企业级微信自动化解决方案 【免费下载链接】wechatferry 基于 WechatFerry 的微信机器人底层框架 项目地址: https://gitcode.com/gh_mirrors/wec/wechatferry 一、场景化价值:从业务痛点到自动化突破 在数字化转型加速的今天&#xf…...

终极指南:nanoGPT如何让每个人都能训练自己的AI语言模型?

终极指南:nanoGPT如何让每个人都能训练自己的AI语言模型? 【免费下载链接】nanoGPT The simplest, fastest repository for training/finetuning medium-sized GPTs. 项目地址: https://gitcode.com/GitHub_Trending/na/nanoGPT 想要训练自己的AI…...

Scala入门必修课:val与var的深度对比与选择指南

Scala入门必修课:val与var的深度对比与选择指南1. 引言:变量定义的灵魂拷问2. 基础概念:val与var的定义2.1 直观区别2.2 类型推导3. 深入理解:从编译到执行3.1 编译后的字节码差异3.2 内存与性能考量4. 实际应用:选择指…...

Python开源代码管理避坑实战:从Git高级操作到Docker环境配置

前言:为什么你总在开源门前徘徊? “这个项目看起来好复杂,我连代码都看不懂...” “提交PR会不会被大佬嘲笑?” “环境配置又报错了,算了,下次再说吧” 如果你有过这些想法,别担心&#xff…...

抖音视频批量下载神器:3分钟搞定复杂内容管理的终极方案

抖音视频批量下载神器:3分钟搞定复杂内容管理的终极方案 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 抖音作为全球最受欢迎的短视频平台,每天产生海量的精彩内容。然而&#xff0c…...

如何突破数据标注瓶颈?Label Studio全攻略:从多模态标注到AI协作

如何突破数据标注瓶颈?Label Studio全攻略:从多模态标注到AI协作 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/l…...

DownKyi:B站视频下载工具的全方位技术解析与应用指南

DownKyi:B站视频下载工具的全方位技术解析与应用指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#x…...

基于Hunyuan-MT-7B的算法竞赛题解翻译系统

基于Hunyuan-MT-7B的算法竞赛题解翻译系统 1. 引言 算法竞赛是全球程序员和算法爱好者展示实力的舞台,但语言障碍常常成为知识共享的壁垒。一道优秀的解题思路,可能因为语言不通而无法被更多人学习借鉴。传统的机器翻译工具在面对算法题解中的专业术语…...

当NB-IoT遇上同步轨道卫星:GEO场景下的定时关系增强全指南(基于3GPP Release 17最新规范)

GEO卫星场景下NB-IoT定时关系增强技术解析 1. GEO卫星通信与NB-IoT的技术融合挑战 地球静止轨道(GEO)卫星通信与窄带物联网(NB-IoT)技术的结合,为全球物联网覆盖提供了革命性解决方案。GEO卫星位于地球赤道上空35,786公…...