使用api和rpc的一个综合使用

复制代码
type (
	LoginRequest {
		Username string `json:"username"`
		Password string `json:"password"`
	}
	RegistRequest {
		Username string `json:"username"`
		Password string `json:"password"`
	}
	RegistResponse {
		UserId uint   `json:"userId"`
		Err    string `json:"err"`
	}
)

@server (
	prefix: /api/users
)
service users {
	@handler login
	post /login (LoginRequest) returns (string)

	@handler register
	post /regist (RegistRequest) returns (RegistResponse)
}

type (
	UserInfoRequest {
		Id uint `json:"id"`
	}
	UserInfoResponse {
		Username string `json:"username"`
	}
)

@server (
	prefix: /api/users
	jwt:    Auth //开启jwt认证
)
service users {
	@handler userInfo
	get /info (UserInfoRequest) returns (UserInfoResponse)
}

首先是api文档,然后通过命令

复制代码
//goctl api go -api user.api -dir .

去生成对应的go项目

在etc/users.yaml中添加myslq的链接信息和jwt

在config/config.go中添加相应的配置内容

在svc中配置数据库的初始化和Context信息

最后就是logic/loginlogic.go中对于具体服务的一个处理

在login中进行token的生成,其他的响应根据业务写出相应的代码

然后是rpc的引入,首先是写一个和前面的api比较相似的proto

复制代码
syntax = "proto3";

package user;


option go_package="./user";

message LoginRequest{
  string Username=1;
  string Password=2;
}

message LoginResponse{
  uint32 UserId =1;
  string Token=2;
}


message RegisterRequest{
  string username=1;
  string password=2;
}

message RegisterResponse{
  uint32 user_id=1;
  string err=2;
}

service user{
  rpc UserLogin(LoginRequest) returns(LoginResponse);
  rpc UserRegister(RegisterRequest)returns(RegisterResponse);
}

//goctl rpc protoc user.proto --go_out=./types --go-grpc_out=./types --zrpc_out=.

然后通过命令去生成对应的go文件,同时将所有的处理业务从api转移到proto中,

最后api通过etcd获取rpc所对应的服务,最终处理请求

相关推荐
SamDeepThinking13 分钟前
从REST到gRPC,一个API选型的思考框架
java·后端·程序员
Zane199416 分钟前
接口都能写默认实现了,为什么还需要抽象类
java·后端
王坊兴17 分钟前
Ubuntu 部署产品原型静态服务器:SFTP + Nginx
服务器·nginx·ubuntu
未秃头的程序猿18 分钟前
读Spring AI源码的方法——不是硬啃,是带着问题去翻
java·后端·spring
用户31268748772031 分钟前
别再 Thread.sleep 硬等了!并发工具类到底怎么选?
java
Java内核笔记33 分钟前
万字长文剖析 Spring Boot 4 自动配置机制源码:从 @EnableAutoConfiguration 到条件装配
java·后端
旗开得胜马到成功37 分钟前
AMD TPM 8.3/8.5漏洞技术剖析:服务器加密信任根崩塌后的备份密钥泄露风险与紧急加固
运维·服务器·网络·系统架构
evans在进步37 分钟前
Spring MVC 核心机制详解:全局异常处理、请求跳转与数据绑定
java·spring·mvc
guanchabao40 分钟前
三相63A与端口级遥调并行:2026年AI服务器老化测试专用PDU的选型路径
服务器
weixin_BYSJ19871 小时前
springboot小区物业管理小程序---附源码45555
java·javascript·spring boot·python·django·flask·php