02-定义api
运行
kratos run
vscode 插件
- proto
- go
步骤
- 修改 api
- 修改 server
- 修改 service
wire 指令添加到 Makefile
.PHONY: wire
# wire
wire:
cd cmd/kratos-realworld/ && wire
wire 关键点
上一层要有下一层的注入,传递链条不能断
页面编辑
1, 定义字段
2, 参数传入
3, 字段实例化参数传递
wire 文件
# wire.go
不用管
# wire_gen.go
可以删除重新生成
# main.go
可能需要编辑
api 编写
service RealWorld {
/* http://localhost:8000/helloworld/333 */
// Sends a greeting
rpc Login (LoginRequest) returns (UserReply ) {
option (google.api.http) = { // 注解
post: "/api/users/login", // 路径
body: "*", // json 解析到 message
}; // option 需要分号
}
}
message LoginRequest{
message User {
string email = 1;
string password = 2;
}
User user = 1;
}
message UserReply {
message User {
string email = 1;
string token = 2;
string username = 3;
string bio = 4;
string image = 5;
}
User user = 1;
}
swagger 预览
- openapi.yaml 里面的内容复制到打开网页即可
数据库接入
docker 镜像
version: '3'
services:
rwdb:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: dangerous
MYSQL_DATABASE: realworld # for database creation automatically
MYSQL_ROOT_HOST: "%"
ports:
- 3306:3306
volumes:
- 'rw-mysql:/var/lib/mysql'
networks:
- rw
networks:
rw:
driver: bridge
volumes:
rw-mysql:
driver: local
gorm 安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
gorm 配置
定义一个方法 NewDB,返回初始化后的对象
把初始化后的对象通过 wire 注入到 NewData 函数
// 路径 internal\data\data.go // 初始化数据库连接,返回连接对象 func NewDB(c *conf.Data) *gorm.DB { db, err := gorm.Open(mysql.Open(c.Database.Dsn), &gorm.Config{ DisableForeignKeyConstraintWhenMigrating: true, }) if err != nil { panic("failed to connect database") } InitDB(db) return db } // 自动迁移数据表 func InitDB(db *gorm.DB) { if err := db.AutoMigrate( &User{}, ); err != nil { panic(err) } }
第二步
// ProviderSet is data providers. NewGreeterRepo, NewDB // 注入需要初始化的方法 var ProviderSet = wire.NewSet(NewData, NewDB, NewUserRepo, NewProfileRepo) // Data . // 提供数据对象,作为返回值给其他方法注入 type Data struct { // TODO wrapped database client db *gorm.DB } // 提供数据组件,依赖了数据配置(初始化 Database、Cache 等) // NewData . // ProviderSet 提供的初始化后的数据库连接对象 func NewData(c *conf.Data, logger log.Logger, db *gorm.DB) (*Data, func(), error) { cleanup := func() { log.NewHelper(logger).Info("closing the data resources") } return &Data{db: db}, cleanup, nil }