前言
大家好,我是node哥哥,一个被bug耽误了才艺的屌丝青年。最近我听说很多萌新们拿到需求一脸懵逼,没有思路写代码,那我这篇就讲讲如何写出符合需求的代码。
故事
话说这天,夜里11点多了,我在公司加班刚写完bug,正悠哉悠哉地准备掏出手机搞一把农药再走(话说最近好坑>_<单排连跪,难受),突然远处晃晃悠悠的出现一个身影。
我一惊,这么晚了,是谁?
走近一看,卧槽,原来是公司刚来的实习生小哥哥。
我: 我靠,老弟,你要吓死我吗?这么晚了你咋还不回去啊?
小哥哥: (抓了把头发,苦着脸) 啊,老哥你还在啊,我这不正发愁呢吗…
我: (搬了个椅子坐下,顺手剥了小哥哥的橘子吃了起来) 怎么讲,老弟?跟我说说呗,让我给你分析分析
小哥哥: (偷偷的把剩下的一个香蕉藏了起来) 啊…是这样的。这周老板给了我一个任务,让我写一个登录的接口,我感觉挺简单的,就一口答应了。结果都到了周四晚上了,我还没想好从哪开始写…我是不是很菜啊?难道我不适合编程么…(又抓了一把头发)
我: (开始心疼小哥哥…的头发,毕竟程序员最宝贵的就是头发了,他这么一把一把的抓,到最后肯定跟我一样,秃了半边) emm…小哥,你先别摧残你的发际线了,听我说。这个登录功能虽然挺简单的,但是如果是新手,没怎么写过代码,确实不好实现,我来带你分析分析需求和功能设计吧
小哥哥: (忙停下了抓头发的手,把刚才藏起来的香蕉掏出来给我) 真的哈,老哥,你太好了!
我: (一边剥香蕉皮,一边开始拿出纸笔) 嗯,你想想,如果你打开一个陌生的网站,比如全球最大的同性交友网站 github ,你想登录进去看看大佬们写的骚代码,第一步干什么?
小哥哥: 那肯定是先输入账号密码咯…
我: 对呀,这个账号密码不就是用户发送给后台服务用于检验权限的凭证吗?那我们的登录接口是不是有两个参数?账号(account)和密码(password)。
小哥哥: 是的,那有了账号密码之后呢?
我: 用户输入完账号密码,是不是就点击登录按钮?那这个登录,是不是就是前端向你的服务端发起请求?这个请求就是前端把账号密码通过接口传递给你,至此,用户的操作就完成了,剩下的就是你服务端的工作了。
小哥哥: (扶了一下黑框眼镜) 噢噢,我有点懂了。那么我的接口拿到了用户的账号密码,是不是就开始检验用户是不是合法了?
我: 对,但是你还需要做一个工作。一般用户的账号密码是存在数据库的,所以你需要写一个从数据user表根据账号密码查询用户的数据库接口,也就是说你将前端传来的账户和密码作为参数去数据库查询一次。
小哥哥: 嗯嗯,这个我知道。我学过springboot,可以用mybatis或者jpa操作数据库。
我: 哈哈,数据库访问的工具有很多,不同的场景我们可以使用合适的工具。那么从数据库查询了结果出来,我们就可以判断了,如果数据库查询到了记录。说明用户真实存在,返回给前端一个成功的状态码,否则,用户不存在,也给出相应的提示。返回结果一般是这样的:
//验证成功
{
"code": 0,
"msg": "登录成功",
"data": userInfo
}
//验证失败
{
"code": -1,
"msg": "账号或密码错误",
"data": null
}
前端拿到后端返回的信息,可以直接把json里msg返回给用户,也可以根据code自定义相关的提示话术。
小哥哥: 搜嘎!我好像知道怎么做了!我来理一下:
- 用户打开交友网站,输入账号和密码,点击登录
- 前端请求我写的登录接口把用户的账号密码发送给我
- 我有一个登录的controller,里面有一个登录的接口,接口的请求路径是: /session,请求方式是post,请求数据格式是 url参数,把这些跟前端约定好,他就可以顺利把数据传给我
- 我拿到账户密码后就开始把它们作为参数查询数据库,看看用户是否存在
- 根据查询的结果返回给前端相应的json数据
- 前端根据我返回的结果再给出相应的提示,告诉用户登录成功或失败
我: (趁他讲的时候不动声色的又把小哥哥的面包偷吃了) 嗯哼,小哥,思路清晰了吧?哈哈,其实啊这个只是最最简单的登录模型呢。一个商用网站的登录往往比这个复杂的多哦。比如前端用户可登录次数的限制,密码传输的加密,短信登录,免密登录,验证码检验,服务端网关拦截非法请求,服务端在用户登录之后做的一系列的业务操作等等…
小哥哥: 啊,这么多?我又懵圈了…
我: 没关系,小哥。我刚才帮你分析的过程你还记得吧。记住从用户的需求出发,模拟用户的操作,再想一想用户操作对应的前端请求是什么,前端请求来了后端做什么业务操作,返回什么样的信息给前端。最好你画一个流程图,就像你刚才那几个步骤一样,根据流程图把每一个小点都列出来,画好他们之间的前后关系,这对你写代码帮助非常大哦~
小哥哥: 嗯嗯,是这样的。刚才我理了一下,思路清晰多了。其实后端的话就接口层,业务层,数据库访问层这些,层次还是比较清晰的。接口层可以对用户输入的参数做一些检验,比如用户输入的账号密码是否为空,长度是否合法等等;业务层主要是解决一些需要逻辑处理的业务,比如账号密码的校验,发送邮件,发送短信,缓存用户信息等等;数据库层呢负责数据访问,比如用户的增删改查等。
我: 哇小哥哥,你真棒!总结的很好呢。
小哥哥: (有点不好意思) 老哥,谢谢你,我请你吃夜宵吧…
我: 好嘞,走着~
每天一个Java小技巧,今天你学废了吗?