RESTful API设计学习记录
前言最近在重构用户中心项目的API接口。刚开始写API时,完全不知道有什么规范,就是随便写。后来看了一些资料,才知道还有RESTful这种设计风格。这篇文章记录一下我学到的一些RESTful API设计最佳(bushi)实践 。 1. URL设计使用名词,不使用动词123456789# 不好GET /getUsersPOST /createUserDELETE /deleteUser# 好GET /usersPOST /usersDELETE /users/:id 使用复数形式1234# 统一使用复数GET /usersGET /ordersGET /products 层级关系12345# 获取用户的订单GET /users/:userId/orders# 获取订单的商品GET /orders/:orderId/products 避免过深的层级12345# 不好(层级过深)GET /users/:userId/orders/:orderId/products/:productId/reviews/:reviewId# 好(扁平化)GET /reviews?productId...
用户中心项目总结:从 0 到 1 的完整实践
前言我花了大约 3 周时间完成了我的第一个完整后端项目——用户中心系统。作为一个大二学生,这个项目让我从”只会写 Hello World”到能够独立完成一个前后端分离的系统。虽然项目还没部署,代码也还有很多可以优化的地方,但这个过程让我学到了很多。今天想和大家分享一下我为什么选择这个项目,以及整个开发过程中的思考和收获。 为什么选择用户中心项目?1. 从”看到”到”想做”其实最开始我并没有明确的项目方向。那段时间在网上刷到很多类似的项目教程,比如”从零开始搭建用户系统”、”Spring Boot 实战项目”之类的。看多了之后,我发现用户中心项目有几个特点特别适合我这种初学者: 功能明确:注册、登录、信息管理,这些功能我作为用户每天都在用,理解起来不费劲 技术栈常见:Spring Boot + MySQL + Redis,这些技术网上资料多,遇到问题容易找到解决方案 复杂度适中:不会太简单(比如只做个计算器),也不会太复杂(比如电商系统),正好适合练手 所以我就决定:就做这个了! 2. 软件工程导论的启发这学期我们开了《软件工程导论》这门课,虽然理论居多,但让我知道了做项目不是...
用户中心项目的数据库设计:常见问题与解决方案
用户中心是几乎所有 Web 应用的核心模块,负责用户注册、登录、信息管理等关键功能。我在学习后端开发时发现,设计一个用户中心的数据库并不像想象中那么简单。今天想和大家分享一些我在学习过程中遇到的问题,以及找到的解决方案。虽然我还在学习中,但这些经验希望能帮助到同样刚入门的朋友们。 一、用户表设计的核心问题1. 主键选择困境问题描述:刚开始设计用户表时,我遇到了第一个问题:用户 ID 应该用什么类型?是自增的整数(1, 2, 3…)还是 UUID(一串随机字符)?用 INT 还是 BIGINT? 解决方案: 对于初学者来说,我建议先用 INT AUTO_INCREMENT,原因很简单: 简单易懂:数据库会自动帮你生成 1, 2, 3… 这样的 ID 查询快:整数比较比字符串快很多 够用了:INT 类型最大可以存到 21 亿多,对于学习项目完全够用 1234CREATE TABLE `user` ( `user_id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID', -- 其他字段...) ENGINE=Inn...
程序员不一定知道的10个技术冷知识
前言在编程的世界里,总有一些有趣但容易被忽视的知识点。这些”冷知识”可能不会直接影响你的代码,但了解它们能让你对编程有更深的理解(而且聊天的时候可以装X 😎)。今天分享一些我觉得有趣的技术冷知识。 1. 为什么数组索引从0开始?这是一个经典问题。数组索引从0开始的原因有多种说法: 历史原因在C语言中,数组名实际上是指向数组第一个元素的指针。所以 arr[i] 实际上等价于 *(arr + i),即从数组起始地址偏移 i 个元素大小的位置。 如果从1开始,那么 arr[i] 就需要写成 *(arr + i - 1),多了一次减法运算。 数学原因从数学角度看,索引从0开始更符合”偏移量”的概念: 第一个元素:偏移0个单位 第二个元素:偏移1个单位 第n个元素:偏移n-1个单位 实际影响123456789// 从0开始:第i个元素的索引就是ifor (int i = 0; i < arr.length; i++) { arr[i] = i; // 简洁}// 如果从1开始:第i个元素的索引是i-1for (int i = 1; i <= a...
从零开始搭建个人博客:Hexo + Butterfly
前言一直想搭建一个个人博客,记录自己的技术成长和思考(主要是想有个地方记录踩过的坑,免得下次又忘了 😂)。经过一番调研,最终选择了 Hexo + Butterfly 主题。这篇文章记录一下搭建过程和一些踩坑经历(真的踩了好多坑…)。 为什么选择 Hexo?1. 静态站点生成器Hexo 是一个快速、简洁且高效的博客框架,使用 Markdown 编写文章,然后生成静态 HTML 文件。 优点: 速度快:静态文件,访问速度快 SEO友好:静态HTML,搜索引擎容易索引 免费托管:可以部署到 GitHub Pages、Netlify 等免费平台 版本控制:文章用 Markdown 编写,可以用 Git 管理 2. 丰富的主题Hexo 有丰富的主题生态,我选择了 Butterfly 主题,因为: 界面美观:现代化的设计风格 功能丰富:支持代码高亮、搜索、评论等 文档完善:中文文档详细,配置简单 持续更新:社区活跃,问题能及时解决 搭建过程1. 环境准备123456# 安装 Node.js(需要 12.0 以上版本)node -vnpm -v# 安装 Hexonpm install...
用户中心项目踩坑记 2 :登录态管理的那些坑
前言项目又又又有问题,浏览器刷新一下就得重新登录,手机和电脑也无法共享状态。作为一个大二学生,只能说完全就是啥也不会,只能一点点地查资料。本文记录我如何把零散的 Session 改成基于 Redis 的 Token 方案,希望给也在自学的同学一点参考。 问题现象:登录态“稍纵即逝”最开始我直接用 Spring Boot 自带的 HttpSession 保存用户对象: 123456@PostMapping("/login")public Result login(@RequestBody LoginRequest request, HttpSession session) { User user = userService.login(request.getAccount(), request.getPassword()); session.setAttribute("user", user); // 明明存了,但总丢 return Result.success(user);} 随之暴露了三个痛点: ...
用户中心项目踩坑记 1 :密码加密那些事儿
前言这是我做的第一个项目。前几天我对安全的理解只停留在“别写出 bug 就行”。直到在测试数据库时,亲眼看到 user_password 字段里躺着一串串明文密码,才想起之前刷到的视频里一句话:“明文密码 = 红线”。本文记录我从明文存储到使用 BCrypt 的全过程,留给也在苦苦写项目的同学做参考。 问题爆发:数据库里的“裸奔”密码项目初期我只想先跑通流程,直接把前端传来的密码丢进数据库。控制层代码大概是这样: 123456789// 错误示范,请勿模仿@PostMapping("/register")public Result register(@RequestBody User user) { if (user.getPassword().length() < 8) { return Result.error("密码长度不足"); } userMapper.insert(user); // 直接存明文 return Result.success();&...
博客开张:记录我的后端开发的思考与成长
写在前面今天是我开始写博客的第一天(终于下定决心了!)。作为一名后端开发学习者,我决定用这个博客记录我在开发过程中的思考、踩过的坑以及收获。虽然不知道能坚持多久,但至少先开始吧 😅 为什么要写博客? 知识沉淀:把零散的知识点整理成体系化的文章 问题复盘:记录debug过程,下次遇到类似问题能快速定位 技术成长:通过写作加深对技术的理解 分享交流:希望能帮助到遇到同样问题的开发者 博客内容规划这个博客主要会记录: 后端开发思考:架构设计、性能优化、代码质量等 Debug经验:实际项目中遇到的问题和解决方案 技术学习:学习新技术的心得和总结 踩坑记录:那些让人头疼的bug和解决方案 写在最后希望这个博客能见证我的技术成长,也希望能为其他开发者提供一些参考(虽然现在还是个菜鸟哈哈哈)。 路漫漫其修远兮,吾将上下而求索。 PS: 如果文章有错误,欢迎指正!毕竟还在学习中,难免会有理解不到位的地方 😊
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment
