Sea

What is RESTful APIs ?

结构: 引言:什么是RESTful API REST架构风格的核心原则 RESTful API的资源设计 状态码 请求和响应格式 实战案例 引言:什么是RESTful API? 在现代 Web 和移动应用的开发中,前后端分离已成为主流开发模式。在这种架构中,前端负责 UI 展示,后端则通过 API 向前端提供数据接口。而提到 API,RESTful API 几乎是最常被提及的关键词之一。 REST,全称 Representational State Transfer,是一种架构风格,而不是具体的协议和技术。它由计算机科学家 Roy Fielding 在他的博士论文中提出,旨在设计更清晰、可扩展、结构化的 Web 服务。一个遵循 REST 原则的 API,通常被称为 “RESTful API”。 那么问题来了: RESTful API到底"长什么样"? 它为什么会成为主流? 在日常开发中,我们该如何设计一个既优雅又实用的RESTful API? 这篇文章将带你从基础概念出发,一步步了解REST的设计理念、资源路由规范、HTTP方法的语义、状态码的使用方式,以及常见的设计技巧和最佳实践。 REST架构风格的核心原则 我们知道REST并不是一种具体的技术和协议,而是一种"架构风格",它使得API更加规范、易用、可维护。下面是 REST 的六大核心原则。 无状态(Stateless) REST 要求每一个请求都必须是自包含的:服务器不会在不同请求之间存储任何客户端的状态信息。换句话说,客户端的每个请求都必须包含完成该请求所需的全部信息(显示传入)。 举例说明:登录后Client发送请求应在Header中附带token,而不是依赖服务器的Session。 那么为什么要这样做呢? Scalability:无状态设计让任何一个服务器节点都可以处理任何一个请求,因为请求中自带了所有信息。这为负载均衡和自动扩容提供了天然支持。 举例:如果一个系统部署了三个后端服务节点(A/B/C),在无状态的设计下,负载均衡器可以将任意请求分发到任一节点,完全不需要考虑"这个用户上次是在哪台服务器登录的" Easy Deployment:由于请求之间没有状态依赖,服务节点可以随时上下线,不会影响用户体验,适合微服务架构或容器化部署(如 Docker/Kubernetes)。 故障恢复更简单:当服务器崩溃时,不需要恢复任何"用户会话"或"中间状态",只需要重新启动实例即可继续处理请求。客户端只需要重新发起请求,不必担心状态丢失。 更高的可测试性和可维护性:测试 RESTful 接口时,每个请求都是独立的,可以单独构造和验证,不需要手动维护前置状态,降低了集成测试和自动化测试的复杂度。 统一接口(Uniform Interface) 统一接口是REST最核心的思想之一,它确保了客户端和服务器之间的通信的一致性和可预期性,从而降低系统复杂度。换句话说,不管你访问的是"用户信息"、“文章评论"还是"订单数据”,它们的请求风格应该看起来是类似的。 其中包括: 使用标准的 HTTP 方法(GET、POST、PUT、DELETE) 使用资源的 URI 来表示数据(如 /users/123) 资源应通过URI来唯一标识,而不是通过动词。 ✅例子: 获取所有用户:GET /users 获取某个用户:GET /users/123 获取用户的订单:GET /users/123/orders ❌例子: /getUserById?id=123 /doCreateUser 这里需要注意URI中含有 “?”, 不一定代表不符合REST,需要区分: 查询参数用于过滤、分页 - ✅ 合理 查询参数用于标识资源 - ❌ 不推荐 使用标准的响应格式(如 JSON) 使用统一的状态码表示处理结果(如 200 OK, 404 Not Found) 可缓存(Cacheable) 在 REST 架构中,服务器响应应该显式地标明是否可以被缓存、缓存多久、缓存的条件等。 💡 REST 的可缓存性意味着客户端或中间代理(如浏览器、CDN、反向代理)可以在某些条件下缓存响应结果,从而减少重复请求,提升性能。 可缓存的优势: 1. 减少服务器负载:当客户端或中间层缓存了响应数据,后续相同请求可以直接返回缓存内容,无需再次访问数据库或计算逻辑。 2. 提高响应速度:缓存一般在本地或边缘节点,响应时间远小于重新生成内容。 3. 带宽优化:对于高频访问的数据(如文章列表、商品页等),缓存可以大幅减少网络传输和 I/O 开销。 REST架构基于HTTP,因此天然可以使用HTTP的缓存机制: ...

June 20, 2025 · 3 min · Jacky
Sea

大海浪淘沙,我们终归是大海中一颗细小沙粒

找工近一月,收获有哪些? 距离4/15号被layoff已经过去一个多月了,这段时间投简历战况如何呢? 累计到今日投递量:63 面试邀请(一轮,OA):6 ( 3个phone screen,其中一个进二轮OA,3 OA) 目前被拒:18(收到拒信的,包含一轮和OA后被拒的) 这一个月为什么只投了63份简历?按照很多人海投的水平来说,一天40-50份,一个月起码也要1000多份。原因是这样的,首先我是非海投,我基本只投2岗位(frontend+full stack),因此每天post出来的岗位很有限,我能投的符合我条件的更有限。。。其次我会根据JD来修改我的简历,试过的都知道,这得多费时间和精力。 再聊聊我收到的面试情况,因为上段工作在华人公司,被迫害的有点心理阴影了,我这一个月来投的都是西人公司,放弃了Vanpeople这种华人找工作的平台,主要focus在Linkedin和Indeed。 另外在三个phone screen之后我有哪些收获呢? Phone screen会问到的题目都很有限,基本就那几类,availability,自我介绍,为什么投我们公司,初步BQ问题; 这类面试准备时不能完全背,背会让你的回答很机械,有经验的HR或Recruiter一眼就可以看出来; 需要把简历中的project内容很好的复述出来,讲清楚你在这段工作经验中具体做了什么,因为我在修改简历时,偶尔会往项目经历中加一些从未用过的tech stacks,虽然可以增加机筛的成功率,但是如果只是随手一写,从来没用过,面试中准露馅。(其中一个面试就是败在这) 关于OA,我个人感觉就是很难,巨TMD的难,而是还限时,选择题考察一些很细节的内容,例如React中useEffect的渲染时机,然后coding题大多都不是leetcode,都是场景编程题,可能和我投的是前端岗位有关系。关于Networking,其实最近也没怎么尝试了,只是加加Linkedin联系人,看看别人在什么公司工作这样子,反而会带来部分焦虑😐。 这一个月除了投简历之外,我也一直都在刷leetcode,题量在慢慢增长,马上突破100了,刷了dfs,bfs之后,收获还蛮大的,看题慢慢有感觉了。个人项目那块,真的是进度提不起来啊,搞了快3-4个月了,是该收尾了,每次弄完一个feature然后隔很久再开始搞,又要熟悉一遍之前的代码,有时还会发现其实项目某些功能毫无意义,下个项目一定要好好写项目文档和需求分析。 和大厂程序员聊后的一些感悟 我在X上偶尔刷到一位也在Van的推主(很早就关注了),在Downtown的某家大厂做AI方向,还有自己的开源项目,看到他有咨询业务,抱着聊聊天的心态找他连麦,互相聊了聊,我也说明了我的情况,也问了很多问题,聊天内容如下: 没必要太专注于某一项技术,不要总是想把某个技术学彻底,即使是很多大佬也做不到 给自己定个期限(能够接受的全职找工作),然后专注地去做就可以了 专注于面试相关的内容(简历优化,面试口语,描述自己做过的项目) 每次面试要录音,然后复盘!!!! 面试中的问题不要机械地去背,读的熟练些会更好 技术栈可以往AI领域靠,langChain,RAG,agent,mcp leetcode刷题建议,跟着代码随想录 + github hot100, 保持刷题手热,熟练 我现在的一切问题,等找到一份工作之后都会解决 不要太专注于技术,不要想怎么从junior转变为senior,尽量不要跳槽 让自己专注于某几项内容,不要考虑太长远的内容 可以往全栈上靠(node.js),但是不建议转后端 下一个月的计划 关于六月的计划,简单罗列一下吧; 简历投递:100份(平均一天4份) Leetcode题量:突破100 BQ:坚持每周准备三个,不多!就三个!一个月就是12个 研读React文档,如果有时间再读读Next文档 个人项目:招聘管理系统保证基本功能,然后部署上线就完事了

May 23, 2025 · 1 min · Jacky

失业前夕| 重新开始找工作| 未来何去何从

公司黄了,我却很开心 从今年1月16日入职到今天,三个多月的时间,我见证这家公司走下坡路直至濒临关门的全过程,从一开始的延迟发工资,搞绩效考核调整薪资结构,不断有人上门讨债,严抓考勤,到最后的老板坦白公司说公司快黄了,一切都发生的特别快,大概也就一个半月时间。当我听到这个消息,其实我内心并不惊讶,因为我们平时其实都能感觉得到,我并没有为公司感到丝毫的惋惜,相反,我感到真TMD爽,终于是不用再受这家华人公司的折磨了。话虽然这么说,这也意味着我又要开始找工作了,又要开始天天失眠了。。。 找工继续 经过在上一家华人公司内体验过了之后,我现在对小规模的华人公司产生了心理阴影,我告诉自己:能去西人公司,绝不去吃屎。但上段工作经验也算是第一份本地工作经验,对接下来的找工还是有些许的帮助的;除此之外,经过了实际的工作的磨练之后,我发现自己改简历的能力也越发炉火纯青,现在的简历比今年年初刚开始找工时写的那份像样了不少 !找工作也有了一些自己的心得。例如:根据Job description 定制化修改 Resume,这条换做以前,我真是不太敢这么做。在北美的开发相关面试中有两个东西必须要准备:1. Leetcode 2. Behavior Questions Leetcode 不多说了把,想进中大厂,逃不了刷题,关于刷题,其实我从去年年初就开始接触刷题了,虽然有些晚。。但是一直都没有坚持,最近才开始捡起来,打算持续刷下去,积累一定的刷题量,目前只在刷一些难度偏低的题,DP, 二叉树这些都还没开始看。 Behavior Questions 是这里的面试的一个特色(Culture Fit),就是面试官用来考察你的行为作风是否与团队的culture匹配,大部分内容需要提前准备,答题方式就是用STAR法,上周我面了一个phone screen,问的东西就是BQ,还好准备了相关问题的回复,还算比较轻松的应对了。 未来的何去何从? 其实我是一个极其缺乏安全感的人,当一件事不受我控制的时候,我就会焦虑,所以当每天为找工作发愁的时候,我的生活会比较煎熬,相反,在上家公司工作的那几个月里,我的睡眠质量特别高。我会担心找不到理想的工作只能去餐馆端盘子,超市整理货架,担心这样下去就永远找不到IT相关的工作了。在这里高额的生活成本迫使我不可能脱产几个月在家找工,毕竟每个月还要交房租。这个问题对于现阶段的我来说真的是无解,我唯一能做的就是不断地尝试,看看是否能在钱包和精神坚持不住之前生活有所转机。。 Remote Jobs尝试 这两年就业环境的恶劣让很多人开始尝试一些work from home的工作,例如Web 3领域会有很多开发岗,我看过一些开发岗,大多都是nodeJS全栈,需要学习一些web3的库,例如:web3.js,需要学习如何连接钱包等技术,会有一定的门槛,英语水平,技术栈等等。对我个人而言应该不是那么困难,我的技术栈本来就是JS based,Frontend:React,Vue,Next;Backend:Nest,Express。因此我在今年会学习如何找到这类remote jobs,后续也会在这里记录下来。 这周复活节小长假,两周前刚过了26岁生日,希望之后一切都顺利!

April 20, 2025 · 1 min · Jacky
Mountain

试用期已到,但有些东西却一直没到。。

两个月这就过去了? 从今年1月16日入职,到今天正好两月整,之前入职时候合同上约定的,转正后可以享受医疗保险,工资也会相应调整(但愿如此),调整金额不保证,说是每个人都是不一样的,真是interesting…. 这两月说长不长,说短也不短,可谓是和我入职时相比发生了比较大的变化,这个月开始要搞绩效(技术部门搞KPI,只能说是太6了) 月初团队来了个全栈老哥,他貌似来这边之后还干了一段时间的厨子,应该是语言不好,不太好找西人公司,听他的谈吐可以感觉出来还是蛮有经验的,熟悉了一周项目,第二周我就和他搭档了。 还有一件事就是团队中一位后端老哥走了,原因大致是周末上线他负责的一个部分出了问题,导致公司可能损失了,然后就被AB方案了,他毅然决然地走了,还请了我们所有人一杯coffee,其实我甚至有些为他感到高兴,终于摆脱这个地方了,哪怕当前找工作很困难…… 谈谈我自己,渐渐我发现我开始无法从工作内容中学习到新的东西了,我发现我开始重复地做某些事情了,对我来说,工作中最大的挑战可能就是准确地估算出tickets完成的deadline,每周的工作内容又比较相似,大致为:改功能、修Bug、删内容、加内容。在墨鱼的时候我会去让自己学习一些项目之外的知识,虽然大多都很碎片化,我只是简单记录在笔记软件上,这也是我一直想的问题,这些学习后的笔记,需要如何回顾? 下班后的学习和休息平衡 之前没工作的时候,我就在想如果我能找到工作,哪怕只是很🗑️的工作,我一定会每天下班后拼命地学习,刷题,然后再跳槽去更好的地方,这两月的工作真是给了当头一棒,下班后吃完饭,一股贯彻全身的疲劳感让我只想躺在床上刷手机,周末往往也会因为要出去采购和种种原因,最终导致留给自己学习的时间少之又少。 接下来我准备给自己定个计划,每天下班后抽出点时间刷2道leetcode和搞个人项目,每天尝试投简历,先坚持一个月看看。这周就先这样了,等会要休息了,明天又要去打工了。

March 16, 2025 · 1 min · Jacky
Mountain

工作一月有感

牛马生活的第一个月 不知不觉在这家公司已经工作满一个月了,总的下来感受就是,目前来说工作的强度和难度都是可以接受的程度,由于本身项目并不注重前端,因此前端一些任务也就是小修小改,不会涉及很复杂的功能,基本问问cursor,查查文档就能解决;工作量方面,大概一周分配到4,5个tickets,基本1~2是比较简单的小修小改,所以工作量上目前也还可以,除了周四周五会比较紧张些,因为周四五需要交付到测试,万一有bug还要改,所以基本我都会在前半周都完成大半,剩下两天专心修bug。 虽然说工作强度不是那么大,但是不能陷入安逸的陷阱,因为说实话,这些内容给自己带来的提升太有限了,之前也提到,这就不是一家注重前端开发的公司,连基本的UI设计的都没有,招我进来的原因可能也只是想让前端能实现某些功能就行了,样式啥都无所谓。。。 由于目前没有代步车,每天我只能乘公车上下班,这里的公共交通太不靠谱了,通勤时间每天大致2h,这导致每天下班回家后,我的疲劳感会让我失去一切想学习的动力(心有余力不足)。 和同事交流以及对市场的观察,发现后端开发的职业前景会比前端好一些,我一直都想尝试入门后端,无奈没接触过 Java,只用过一些很轻量的node后端框架;况且未来我也是想朝着full stack发展的。 最近开启了我第二个全栈项目,取名为 RecruitPro, 是个用于管理招聘信息的系统,主要目的是想用点没用过的tech stack,例如:nestJS、Postgres sql、 supabase; 顺便再提升下自己的项目经验,下次也可以写在resume上,不得不说有了cursor的加持(powered by AI),真的容易了不少。 由于一直依靠着cursor来处理代码问题,这让我会一种我 “无所不能” 的错觉,让我错误的认为:Made by AI = Mine; 我觉得这是一个很可怕的事情,会让我忽略平常在开发中一些不起眼但很重要的基础问题,我一直会问自己,当脱离ai,我可以自己写代码吗? 有人会说:当AI编程工具的出现,程序员没有理由不去用,不要有学生时代的思想——什么东西都要自己掌握了才能经得起推敲的,任何技术都是服务于产出的,而效率才是产出最注重的,当ai简化了某些过程,我没必要放着现成的答案不要,非要自己去做。。。 个人观点:AI 工具当然要用,而且要多用,Use it wisely,现在市场上出现各式各样的AI工具,涵盖了各行各业,我们完全可以用AI工具打造出一套符合自己行业的workflow,这真的是一件很爽的事情,想象一下:你是一名小红书写手,当你早上9:00刚起床,你的workflow已经自己找出你行业的头条并以你的文笔风格生成了一篇文章,最后自动发布到平台上。有点AI agent的感觉了。虽然这么说,有了AI 的加持,我们的工作效率可以成倍提升,但是基础知识的学习也不能抛弃,就我个人而言,我还是会去学习JS基础,甚至抱着红皮书啃;其次在AI时代背景下,我们也许不用每个问题都刨根问底,但是一定要具备宏观概念,就比如:项目的技术栈的选择,业务的实现逻辑,如何进行不同场景地性能优化等等。

February 17, 2025 · 1 min · Jacky