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 编写

JSON-to-Proto

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 预览

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 配置

  1. 定义一个方法 NewDB,返回初始化后的对象

  2. 把初始化后的对象通过 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
    }

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~