需求描述

实现用户注册、登录、获取用户信息功能

一、创建工程

创建一个名称为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服务,下一节我们将演示怎么连接访问数据库进行数据交互