登录注册功能实现&小黑屋游戏API设计
一、项目说明
1. 功能实现
该项目实现了登录注册功能(前端+后端)并提供了小黑屋游戏的两个基本API。
用户可创建多个存档或删除存档,在每次操作后自动保存。
存档管理及游戏部分需结合前端实现。
2. 特殊情况处理
(1)从前端上防止用户输入空用户名或空密码,并在注册时增加了确认密码功能。(好像不是后端应该关心的)
(2)游戏部分,前端每次调用API都会自动在数据库中保存数据。
(3)在每个controller类加了 @CrossOrigin 注解以解决跨域问题。
3. 如何使用
由于我做了登录注册界面的前端,登录注册功能的使用是十分简单的。
登录注册相关的API提供了两个,/login 可判断用户输入的用户名及其对应的密码在数据库中是否存在,/signup 可在数据库中创建一个新的用户。
因时间仓促及本人水平有限,密码是明文存储在数据库中的,确是不足之处。
存档管理功能提供了几个API,/selectArchive 用于选择存档,/addArchive 用于创建新存档,/deleteArchive 用于选择存档,/saveArchive 用于保存存档。
游戏部分提供了两个基本的API,/getWood 用于采集木头,/getFire 用于点火。每次调用API,变化后的数据会自动保存在数据库中。
(目前点火功能还存在一些问题。点火前没有判断数据库中木头的数量,木头数量≤0时仍然能点火。做的太急忘了这一点,提交后才想到。本来这一部分计划增加更多的内容,并做一个接口文档。但由于我近期忙于一些别的事情,时间很紧张,就没有实现。其他功能的实现与这两个功能是相似的,有时间会完善一下。)
API 返回的数据经过前端处理,即可用于游戏。
二、学习历程
首先是看完了wiki培训三的内容,敲了一遍代码,简单学习了一下数据库的使用。
到这,我初步理解了各个层的作用及其关系,但这对于写出一个符合要求的API还不够。
登录注册功能的实现比较简单。项目里面用到了 @Select 和 @Insert 注解(嗯,mybatis 确实好用)。我在测试数据时发现,如果数据库中有两组相同的用户名及密码,就不能正常登录。因此,我决定把用户名设置为不可重复的。如果用户注册了一个已存在的用户名,就会在网页上弹窗提醒。(我为什么要关心这个捏)
存档管理部分,由于一个用户可对应多个存档,用户和存档在数据库表中是一对多的关系。这在数据库中也是比较容易构建的。让我棘手的一个地方是,用户登录之后怎么才能实现只选择自己的存档而不选择别人的。我给出的解决方案是:前端向后端发送请求时需包含两个参数,一个是个人的存档的序号,一个是用户的uid。这两个参数能唯一定位存档。由于登录界面存在跳转,uid需要跨html页面传递过去。我尝试用了网上的方法实现这一点,但并没有成功。因此,我存档管理部分的前端也只能中途放弃。
游戏部分,我所做的确实不多,只实现了基本功能。由于游戏页面和存档选择界面之间也需要跨页面传参,游戏界面的前端我并没有做,(其实也不会做)。
除了mybatis的@Update @Insert @Delete 注解,处理跨域的@CrossOrigin注解以及处理异常的@ExceptionHandler 注解之外,别的东西培训时基本都提及过。
当然,我并不满足于项目的现状,我想让它变得更好,更完善。这需要日后学习更多的知识来完成。
三、数据库 er 图
由DBeaver自动生成