最近电脑坏了,开源项目的进度也受到一些影响
(资料图片仅供参考)
这篇酝酿很久了,作为本系列第二部分(API接口开发)的第一篇,得想一个好的开头,想着想着就鸽了好久,索性不扯那么多了,直接开写吧~
2关于RESTFul网上很多相关的文章都要把RESTFul历史来龙去脉给复制一遍,所以我这就不重复了,现在主要的HTTP接口风格就俩:RPC和RESTFul。
举个例子就可以看出这俩的区别
RPC风格分别是增删改查的接口
操作 | HTTP方法 | URL |
---|---|---|
增 | post | /blog/add |
删 | post | /blog/deleteById |
改 | post | /blog/updateById |
查 | get | /blog/getAll |
可以看出RPC风格的特点:
基本就是用post和get这俩方法来操作接口URL的命名跟函数命名一样,都是动词,一目了然RESTFul风格PS:RPC这种几乎一个团队一个风格,我见过有人把所有接口都做成post方法,然后请求参数全部用json格式放在body里的。
关键是这个请求参数还不统一,同个项目不同开发人员写的请求参数格式不一致,很恶心。(微信有些接口也是这样)
分别是增删改查的接口
操作 | HTTP方法 | URL |
---|---|---|
增 | post | /blog/ |
删 | delete | /blog/{id}/ |
改 | put | /blog/{id}/ |
查 | get | /blog/ |
查 | get | /blog/{id}/ |
可以看出RESTFul风格的特点:
利用各种HTTP方法来实现增删改查(其实还有patch、head这些方法,不展开了)URL的命名是名词,以资源名称作为URL,更统一使用get获取资源,方便后端、客户端、网关这些地方做缓存,提高性能接口返回值除了请求接口,RESTFul还建议接口返回的时候根据不同状态使用不同的HTTP状态码。
以下是HTTP定义的五类状态码。
类别 | 描述 |
---|---|
1xx:信息 | 通信传输协议级信息。 |
2xx:成功 | 表示客户端的请求已成功接受。 |
3xx:重定向 | 表示客户端必须执行一些其他操作才能完成其请求。 |
4xx:客户端错误 | 此类错误状态代码指向客户端。 |
5xx:服务器错误 | 服务器负责这些错误状态代码。 |
这样就很清晰了,看接口返回的状态码就能知道结果如何。
在一些前端ajax库(比如axios)中,返回码如果是4xx或5xx,就会抛出异常,这样访问逻辑就可以根据错误做出一些提示。
例子
假设接口返回结构是这样
{"successful":true,"message":"请求成功","data":[{...},{...},{...}]}
请求接口的 JavaScript 代码如下
axios.get("/blog/").then(res=>msg.success(`请求成功,返回信息:${res.data.message}`)).catch(res=>msg.error(`请求失败,返回信息:${res.data.message}`))
但是!实际场景很复杂,HTTP标准状态码就40个,根本不够用啊。
所以这些HTTP状态码只能对返回值做个大概的分类,复杂系统还是得自己定义一套错误码。
小结这俩各有优劣,RESTFul看起来比较统一优雅,但表达能力有限;RPC的URL命名看起来比较随意,不过自由发挥的空间也很大。
我个人是比较倾向RESTFul风格的,所以StarBlog使用了RESTFul风格的接口,不过这并不能满足全部功能需求,所以参考Django的RestFramework,将RESTFul和RPC稍微结合一下。
举个例子:要在博客增删改查的基础上增加设置置顶、点赞等功能。
操作 | HTTP方法 | URL |
---|---|---|
设置置顶 | post | /blog/{id}/setTop/ |
点赞 | post | /blog/{id}/thumbUp/ |
获取置顶文章 | get | /blog/getTop/ |
可以看到这种缝合怪是以RESTFul为基础,增删改查以外的功能,在对应的资源上使用RPC风格。
setTop/ thumbUp/ getTop这些动词在RestFramework里面也叫 action ,意为对一系列资源执行的动作。
关于HTTP方法,对资源有修改的,使用post方法,没有修改单纯读取的,使用get方法。
3接口开发规划本系列文章更新顺序跟StarBlog博客开发的顺序基本一致,即在已有MVC架构网站的基础上,增加RESTFul接口,用于管理后台(前后端分离)对博客进行配置管理。
目前我把接口分成这几类
auth - 认证授权,顾名思义,后面会细说admin - 管理员相关,主要功能有配置管理、访问记录、系统监控等blog - 博客相关,功能就是文章、分类、图片等信息的crudcommon - 公用接口,StarBlog除了博客功能外,还以接口形式提供了一些小功能,如一句诗、一言、随机图片、主题切换等test - 测试接口,用于一些功能测试,在正式环境会关闭访问links - 友情链接管理,这个功能比较复杂,单独做成一个分类后续会有更多类似友情链接这样比较复杂的功能加入(比如评论),这种会单独做成一个分类。
4需要关注的其他东西PS:之前在开发博客前台的时候,把大部分功能都写在了 services里面,现在开发接口的时候就派上用场了,很多逻辑都是通用的,在接口的controller里面只需要调用这些 services就可以了。
本文不涉及具体实现,只是作为RESTFul接口开发部分的前言或者大纲,接口开发看似就crud四个操作很简单,实际上比想象的复杂。
例如,获取文章列表接口,博客的文章数量会很多,不可能一个接口返回所有文章信息,因此要做分页处理,同时我们还希望能在文章列表实现关键词过滤、分类、状态筛选、排序等功能;
已登录用户才能发表评论,管理员才能管理文章,因此需要实现认证授权、角色管理等功能;
同一时间可能有很多人访问博客(或者是爬虫),需要对接口做限流处理,以免程序崩溃;
接口数量多起来了,swagger显示太杂乱,需要对接口分组,或者更换swagger前端;
正式环境不想让用户看到swagger接口文档,可以隐藏或者给swagger加锁;
频繁访问的资源,可以使用服务端缓存提升性能,减轻IO压力,使用客户端缓存降低服务器流量;
耗时操作(如批量导出文章、发送短信通知)放到异步任务队列(或者后台任务)里执行;
以上列举的种种只是我在撰写本文的当下考虑博客需要用到的,实际上应该还有很多。只能说后端的水很深,开发本项目的过程也是一个不断探索、实践的过程,“No silver bullet”,没有任何技术能适用全部场景,只能在不断的积累中得出某个场景下的最佳实践。
OK,本文就到这吧。
5系列文章基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目基于.NetCore开发博客项目 StarBlog - (3) 模型设计基于.NetCore开发博客项目 StarBlog - (4) markdown博客批量导入基于.NetCore开发博客项目 StarBlog - (5) 开始搭建Web项目基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表基于.NetCore开发博客项目 StarBlog - (7) 页面开发之文章详情页面基于.NetCore开发博客项目 StarBlog - (8) 分类层级结构展示基于.NetCore开发博客项目 StarBlog - (9) 图片批量导入基于.NetCore开发博客项目 StarBlog - (10) 图片瀑布流基于.NetCore开发博客项目 StarBlog - (11) 实现访问统计基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译基于.NetCore开发博客项目 StarBlog - (13) 加入友情链接功能基于.NetCore开发博客项目 StarBlog - (14) 实现主题切换功能基于.NetCore开发博客项目 StarBlog - (15) 生成随机尺寸图片基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)基于.NetCore开发博客项目 StarBlog - (17) 自动下载文章里的外部图片基于.NetCore开发博客项目 StarBlog - (18) 实现本地Typora文章打包上传基于.NetCore开发博客项目 StarBlog - (19) Markdown渲染方案探索基于.NetCore开发博客项目 StarBlog - (20) 图片显示优化基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口-
基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口1前言最近电脑坏了,开源项目的进度也受到一些影响这篇酝酿很久了,作为本系列第二部分(API接口开发)的第一篇,得想一个好的开头,想着想着
-
保险科技融合新征程:构建互联网+医疗+医药+保险四维生态闭环随着大数据、云计算、人工智能等科技与金融业态的融合日益紧密,金融科技正成为助推保险业高质量发展的新动能。近年来,无论是保险公司,还是
-
每日快看:嘉环科技(603206):中国国际金融股份有限公司关于嘉环科技股份有限公司2022年度持续督导现场检查报告中国国际金融股份有限公司关于嘉环科技股份有限公司2022年度持续督导现场检查报告上海证券交易所:经中国证券监督管理委员会(以下简称“中国
-
【天天聚看点】小米 MIX Fold 2 月光银、玄夜黑配色今日开售编程客栈12月20日讯:今js日php10点,小米MIXFol编程客栈d2新配色——月光银、玄夜黑将正式开售,售价8999python编程元
-
多地倡导无症状和轻症可上班 抗原试剂“一盒难求”局面或将扭转连日以来,抗原试剂盒“一盒难求”,成为了抢手的香饽饽。受各地陆续取消核酸检测点的影响,抗原试剂成为了居民判断自己是否感染新冠病毒的...
-
唐源电气董秘回复:公司股价受多方因素影响,目前公司运营一切正常,董事会及管理层会继续深耕经营唐源电气(300789)12月19日在投资者关系平台上答复了投资者关心的问题。投资者:陈唐龙董事长,贵公司股票自上市以来长期低迷并且长期下跌,请
-
浙农股份董秘回复:公司作为浙江省供销社下属唯一上市平台,将不断践行服务三农使命-每日热讯浙农股份(002758)12月19日在投资者关系平台上答复了投资者关心的问题。投资者:贵公司是否参与“浙江高质量发展建设共同富裕示范区”的建设浙
-
建安区司法局组织召开“送法进企业”优化法治化营商环境企业界负责人座谈会|当前关注为有力推动全区法治化营商环境建设,为企业健康发展提供法治保障,近日,建安区司法局联合建安区委统战部在建安区司法局会议室召开“送法进...
-
回来了!沃伦明日迎来篮网首秀 时隔两年重返NBA回来了!沃伦明日迎来篮网首秀时隔两年重返NBA,沃伦,篮网队,nba,凯文杜兰特,凯里·欧文,多伦多猛龙队
-
阿姨常年练功地被磨出印记 画面让网友看笑:太执着 树压力好大_每日热门近日,一位阿姨常年绕树练功的视频火了,视频中,阿姨无论春夏秋冬,都按固定路线锻炼,地面上都磨出印记。网友看完之后纷纷表示,这棵树的压
-
光热玻璃加紧供货!安彩光热与国内某100MW光热发电项目达成合作据安彩高科(600207)12月14日晚间公告,全资子公司——河南安彩光热科技有限责任公司(下文简称安彩光热)是全球第二家具备批量生产光热玻...
-
本周盘点(12.12-12.16):信雅达周跌3.37%,主力资金合计净流出1.22亿元截至2022年12月16日收盘,信雅达(600571)报收于10 04元,较上周的10 39元下跌3 37%。本周,信雅达12月12日盘中最高价报10 67元。12月15日盘
-
苏大维格:12月15日融券卖出金额6.32万元,占当日流出金额的0.05%同花顺数据中心显示,苏大维格12月15日获融资买入1707 72万元,占当日买入金额的14 03%,当前融资余额8574 37万元,占流通市值的1 96%,超过历
-
川宁生物总经理邓旭衡:打造具有全球竞争力的创新型合成生物学企业中证网讯(记者倪铭)12月15日,川宁生物首次公开发行股票并在创业板上市网上路演在中国证券报·中证网举行。川宁生物总经理邓旭衡致辞时表...
-
四方科技(603339)12月15日主力资金净买入344.13万元|环球观速讯截至2022年12月15日收盘,四方科技(603339)报收于12 93元,上涨2 86%,换手率1 13%,成交量3 49万手,成交额4489 34万元。12
-
美联储小幅上调今年GDP增速预期 继续下调明后两年GDP预期美联储小幅上调今年GDP增速预期继续下调明后两年GDP预期
-
欧克科技: 安信证券关于欧克科技使用部分募集资金向全资子公司增资以实施募投项目的核查意见_全球快报欧克科技:安信证券关于欧克科技使用部分募集资金向全资子公司增资以实施募投项目的核查意见
-
我市加快推进国家中小城市综合改革试点工作_今日热讯8月25日,我市召开加快推进国家中小城市综合改革试点工作会议。市领导王惠民、王军霞出席会议。会议总结了我市国家中小城市综合改革试点前一阶
-
高凌信息(688175)12月13日主力资金净卖出434.41万元-微头条截至2022年12月13日收盘,高凌信息(688175)报收于37 46元,下跌4 19%,换手率5 93%,成交量1 11万手,成交额4187 05万元。
-
【新要闻】绿盟科技:交通强国建设背景下交通运输网络安全建设新主张全文共3816字,阅读大约需8分钟。 一 引言 党的二十大报告提出,坚持把发展经济的着力点放在实体经济上,推进新型工业化,加快建设制
-
兆新股份:12月12日获融资买入39.28万元|今日关注同花顺数据中心显示,兆新股份12月12日获融资买入39 28万元,占当日买入金额的2 44%,当前融资余额1330 66万元,占流通市值的0 37%,超过历史8
-
全球微头条丨万润新能(688275.SH)拟投建年产10万吨湖北万润新能源电池正极材料项目智通财经APP讯,万润新能(688275 SH)发布公告,公司拟与十堰市郧阳区政府签署《湖北万润新能源电池正极材料项目投资协议书》,双方约定在秦巴
-
热消息:教育部:严厉打击隐形变异培训 强化非学科类培训监管教育部6日在其官网发布消息称,教育部日前召开2022年全国“双减”工作秋季学期视频调度会,部署秋季学期校外教育培训治理工作。会议指出,...
-
全球资讯:一张票高达358元,阿凡达2为何这么贵?中新经纬12月10日电 (牛朝阁)“358元!怎么这么贵!”“票价这么贵
-
唯万密封(301161)12月8日主力资金净买入420.23万元截至2022年12月8日收盘,唯万密封(301161)报收于23 73元,上涨5 19%,换手率13 26%,成交量3 78万手,成交额8860 64万元。12
-
生益科技(600183)12月7日主力资金净卖出2353.47万元截至2022年12月7日收盘,生益科技(600183)报收于14 76元,下跌3 72%,换手率0 64%,成交量15 0万手,成交额2 24亿元。12月7日的
-
股票行情快报:八亿时空(688181)12月6日主力资金净买入296.08万元截至2022年12月6日收盘,八亿时空(688181)报收于39 4元,上涨0 25%,换手率0 57%,成交量0 44万手,成交额1741 55万元。12月6
-
英华眼科“一城两院”三周年庆典暨英华儿童眼科番禺院区盛大开业2022年6月26日,英华眼科集团举办品牌三周年庆典活动,同时宣布英华儿童眼科番禺院区正式投入使用。当天,原中山眼科中心院长葛坚教授、广
-
女性不孕不育的原因有哪些?快过来看看吧孕育一个健康聪明的宝宝,对于大多数家庭来说都是一件特别幸福的事情,但是近几年不孕不育的患者呈现增加的趋势,据统计我国患有不孕不育的
-
睡前刷手机为什么睡不着?电子设备发出的蓝光抑制褪黑素合成近日一项调查显示,睡前玩手机8分钟,会让大脑持续兴奋1小时。医学研究发现,视网膜的内生感光视神经细胞只要受到蓝光8分钟刺激,就会让身