Go,你也可以的!-【8.1 登录注册接口】

8.1 登录注册接口

登录注册在我们的实际业务中是特别常见的东西,本节我们将从需求分析、需求实现等方面与您一起实现一个登录注册的业务流程。

在这之前,如果您还没有接触过前后端的接口开发,那么我们建议您先去了解一下前后端分离的处理流程、请求流程。

本节代码存放目录为 lesson23

分析及接口设计

我们以最简单的登录注册进行讲解,比如:通过输入用户名、密码进行注册,之后通过用户名及密码进行登录。

在这个需求中,我们使用两个接口实现逻辑,一个是注册接口、一个是登录接口。

接口设计如下:

接口名称接口路径参数返回请求方式
注册接口/registerusername、passwordsuccessGET
登录接口/loginusername、passwordsuccessGET

我们设计两个接口,一个用于注册,一个用于实现登录。

两个接口均接收usernamepassword,如果处理成功,那么将返回字符串success

请求方式我们都使用了GET,正常来说,像这种提交类的接口,我们应该使用POST会好一些,这里为了方便演示,我们暂时使用GET

业务实现

GO语言中,我们可以很轻松的使用原生的库就可以实现一个简单的接口服务器。

在上面的业务中,我们先使用本地存储实现,使用一个map进行注册信息的存储。如下所示:

var (
	userMap map[string]string
)

func init() {
	userMap = make(map[string]string)
}

如上代码所示,我们定义了一个map存储用户注册信息,其中key为用户名,value为用户密码。

在上面我们使用到了init(),这里讲一下,init()函数也就是初始化函数,在每个包中只能存在一个init(),并且是不需要显式调用的,在我们启动程序时会自动调用。

接下来我们实现注册接口,如下代码所示:

func main() {
	http.HandleFunc("/register", register)
	http.ListenAndServe("127.0.0.1:8088", nil)
}

func register(rsp http.ResponseWriter, req *http.Request) {
	username := req.URL.Query().Get("username")
	password := req.URL.Query().Get("password")

	_, ok := userMap[username]
	if ok {
		io.WriteString(rsp, "已经注册过了")
		return
	}

	userMap[username] = password
	io.WriteString(rsp, "success")
}

在上面的代码中,我们使用http.HandleFunc定义了注册接口,使用http.ListenAndServe启动了我们的接口服务器。

运行代码以后,我们就可以直接在浏览器请求接口:http://127.0.0.1:8088:/register?username=1&password=123456

请求成功后,浏览器显示了:success,这就代表我们已经注册成功了。

我们再次请求一次,浏览器显示了已经注册过了,按照我们的预期执行。

接下来我们需要实现登录接口,如下代码所示:

http.HandleFunc("/login", login)

func login(rsp http.ResponseWriter, req *http.Request) {
	username := req.URL.Query().Get("username")
	password := req.URL.Query().Get("password")

	cachePassword, ok := userMap[username]
	if !ok {
		io.WriteString(rsp, "用户名未注册")
		return
	}

	if cachePassword != password {
		io.WriteString(rsp, "密码错误")
		return
	}
	io.WriteString(rsp, "success")
}

程序运行以后,我们完成了登录、注册两个接口逻辑,这时候我们可以在浏览器输入:

  • 注册:http://127.0.0.1:8088:/register?username=1&password=123456

  • 登录:http://127.0.0.1:8088/login?username=1&password=123456

到此我们就完成了一个简单的登录注册示例,但是在实际的开发过程中,我们的注册信息肯定是需要存储起来的。

我们可以尝试使用MySQL文件等方式进行存储,这一类的文章也比较多,我们可以去尝试一下,将userMap换成对应的存储方式即可。

接口开发是我们一定需要掌握的,包括传统的HTTP服务,以及当下比较流行的微服务等。

关于传统的Web开发,可以看一下 malatd,这是一个轻量级的Web框架,使用简单易上手。

书籍地址:https://youcan.golang.website/

书籍代码:https://github.com/YouCanGolang

我的GitHub:https://github.com/swxctx

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Swxctx

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值