大家好,我是程序员青戈,一个被Bug耽误了才艺的程序员👦专注于Java领域的知识分享和技术交流,每天会给大家带来Java学习的干货教程📚

微信搜索公众号 Java学习指南,回复 面试 领取一线大厂面试题一套可以进技术交流学习群一起共同进步哦😊

从一个小需求谈谈如何锻炼编程思维_服务端



故事

话说这天,夜里11点多了,我在公司加班刚写完bug,正悠哉悠哉地准备掏出手机搞一把农药再走(话说最近好坑>_<单排连跪,难受),突然远处晃晃悠悠的出现一个身影。

我一惊,这么晚了,是谁?

走近一看,卧槽,原来是公司刚来的实习生小哥哥。

我: 我靠,老弟,你要吓死我吗?这么晚了你咋还不回去啊?

小哥哥: (抓了把头发,苦着脸) 啊,老哥你还在啊,我这不正发愁呢吗…

我: (搬了个椅子坐下,顺手剥了小哥哥的橘子🍊吃了起来) 怎么讲,老弟?跟我说说呗,让我给你分析分析

小哥哥: (偷偷的把剩下的一个香蕉藏了起来) 啊…是这样的。这周老板给了我一个任务,让我写一个登录的接口,我感觉挺简单的,就一口答应了。结果都到了周四晚上了,我还没想好从哪开始写…我是不是很菜啊?难道我不适合编程么…(又抓了一把头发)

我: (开始心疼小哥哥…的头发,毕竟程序员最宝贵的就是头发了,他这么一把一把的抓,到最后肯定跟我一样,秃了半边) emm…小哥,你先别摧残你的发际线了,听我说。这个登录功能虽然挺简单的,但是如果是新手,没怎么写过代码,确实不好实现,我来带你分析分析需求和功能设计吧

小哥哥: (忙停下了抓头发的手,把刚才藏起来的香蕉🍌掏出来给我) 真的哈,老哥,你太好了!

我: (一边剥香蕉皮,一边开始拿出纸笔) 嗯,你想想,如果你打开一个陌生的网站,比如全球最大的同性交友网站 github ,你想登录进去看看大佬们写的骚代码,第一步干什么?

小哥哥: 那肯定是先输入账号密码咯…

我: 对呀,这个账号密码不就是用户发送给后台服务用于检验权限的凭证吗?那我们的登录接口是不是有两个参数?账号(account)和密码(password)。

小哥哥: 是的,那有了账号密码之后呢?

我: 用户输入完账号密码,是不是就点击登录按钮?那这个登录,是不是就是前端向你的服务端发起请求?这个请求就是前端把账号密码通过接口传递给你,至此,用户的操作就完成了,剩下的就是你服务端的工作了。

小哥哥: (扶了一下黑框眼镜) 噢噢,我有点懂了。那么我的接口拿到了用户的账号密码,是不是就开始检验用户是不是合法了?

我: 对,但是你还需要做一个工作。一般用户的账号密码是存在数据库的,所以你需要写一个从数据user表根据账号密码查询用户的数据库接口,也就是说你将前端传来的账户和密码作为参数去数据库查询一次。

小哥哥: 嗯嗯,这个我知道。我学过springboot,可以用mybatis或者jpa操作数据库。

我: 哈哈,数据库访问的工具有很多,不同的场景我们可以使用合适的工具。那么从数据库查询了结果出来,我们就可以判断了,如果数据库查询到了记录。说明用户真实存在,返回给前端一个成功的状态码,否则,用户不存在,也给出相应的提示。返回结果一般是这样的:

//验证成功
{
"code": 0,
"msg": "登录成功",
"data": userInfo
}
//验证失败
{
"code": -1,
"msg": "账号或密码错误",
"data": null
}

前端拿到后端返回的信息,可以直接把json里msg返回给用户,也可以根据code自定义相关的提示话术。

小哥哥: 搜嘎!我好像知道怎么做了!我来理一下:

  1. 用户打开交友网站,输入账号和密码,点击登录
  2. 前端请求我写的登录接口把用户的账号密码发送给我
  3. 我有一个登录的controller,里面有一个登录的接口,接口的请求路径是: /session,请求方式是post,请求数据格式是 url参数,把这些跟前端约定好,他就可以顺利把数据传给我
  4. 我拿到账户密码后就开始把它们作为参数查询数据库,看看用户是否存在
  5. 根据查询的结果返回给前端相应的json数据
  6. 前端根据我返回的结果再给出相应的提示,告诉用户登录成功或失败

我: (趁他讲的时候不动声色的又把小哥哥的面包🍞偷吃了) 嗯哼,小哥,思路清晰了吧?哈哈,其实啊这个只是最最简单的登录模型呢。一个商用网站的登录往往比这个复杂的多哦。比如前端用户可登录次数的限制,密码传输的加密,短信登录,免密登录,验证码检验,服务端网关拦截非法请求,服务端在用户登录之后做的一系列的业务操作等等…

小哥哥: 啊,这么多?我又懵圈了…

我: 没关系,小哥。我刚才帮你分析的过程你还记得吧。记住从用户的需求出发,模拟用户的操作,再想一想用户操作对应的前端请求是什么,前端请求来了后端做什么业务操作,返回什么样的信息给前端。最好你画一个流程图,就像你刚才那几个步骤一样,根据流程图把每一个小点都列出来,画好他们之间的前后关系,这对你写代码帮助非常大哦~

小哥哥: 嗯嗯,是这样的。刚才我理了一下,思路清晰多了。其实后端的话就接口层,业务层,数据库访问层这些,层次还是比较清晰的。接口层可以对用户输入的参数做一些检验,比如用户输入的账号密码是否为空,长度是否合法等等;业务层主要是解决一些需要逻辑处理的业务,比如账号密码的校验,发送邮件,发送短信,缓存用户信息等等;数据库层呢负责数据访问,比如用户的增删改查等。

我: 哇小哥哥,你真棒!总结的很好呢。

小哥哥: (有点不好意思) 老哥,谢谢你,我请你吃夜宵吧…

我: 好嘞,走着~

每天一个Java小技巧,今天你学废了吗?


感谢大家的阅读,能否请您小手点一点下方的 一键三连

最后送诸位一句话:但行好事,莫问前程。再见~


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6