需求描述
实现用户注册、登录、获取用户信息功能
一、创建工程
创建一个名称为book的go mod工程
$ cd ~ $ mkdir book && cd book $ go mod init book
查看book目录
$ ls
在book目录下会多出一个go.mod文件
go.mod
二、创建api文件
创建user/api文件夹
$ mkdir -p user/api && cd user/api
创建user.api文件
$ goctl api -o user.api
输出结果
Done.
三、定义api服务
我们用goland打开book工程,修改user.api文件内容为
info(
title: "user api"
desc: "用户系统"
author: "anqiansong"
email: "anqiansong@xiaoheiban.cn"
)
type RegisterReq struct {
Username string `json:"username"`
Mobile string `json:"mobile"`
Password string `json:"password"`
}
type LoginReq struct{
Username string `json:"username"`
Password string `json:"password"`
}
type UserReply struct {
Id int64 `json:"id"`
Username string `json:"username"`
Mobile string `json:"mobile"`
Nickname string `json:"nickname"`
Gender string `json:"gender"`
JwtToken
}
type JwtToken struct {
AccessToken string `json:"accessToken,omitempty"`
AccessExpire int64 `json:"accessExpire,omitempty"`
RefreshAfter int64 `json:"refreshAfter,omitempty"`
}
service user-api {
@handler ping
post /user/ping ()
@handler register
post /user/register (RegisterReq)
@handler login
post /user/login (LoginReq) returns (UserReply)
}四、生成user api服务
$ goctl api go -api user.api -dir .
查看一下user服务tree
. ├── etc │ └── user-api.yaml ├── internal │ ├── config │ │ └── config.go │ ├── handler │ │ ├── loginhandler.go │ │ ├── pinghandler.go │ │ ├── registerhandler.go │ │ └── routes.go │ ├── logic │ │ ├── loginlogic.go │ │ ├── pinglogic.go │ │ └── registerlogic.go │ ├── svc │ │ └── servicecontext.go │ └── types │ └── types.go ├── user.api └── user.go
五、启动服务
启动一个服务,侦听8888端口
$ go run user.go -f etc/user-api.yaml

访问服务
$ curl -i -X POST http://localhost:8888/user/ping
总结
本节主要演示怎样从创建api文件到启动一个api服务,下一节我们将演示怎么连接访问数据库进行数据交互

