基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口-天天即时看
最近电脑坏了,开源项目的进度也受到一些影响
这篇酝酿很久了,作为本系列第二部分(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接口开发)的第一篇,得想一个好的开头,想着想着
环球看热讯:报告:中国19家钢铁企业达到或接近世界一流水平
中国网是国务院新闻办公室领导,中国外文出版发行事业局管理的国家重点新闻网站。本网通过10个语种11个文版,24小时对外发布信息,是中国进行
Dance in the moment:全球要闻
今天和同事聊天,聊到了《明朝那些事儿》,聊到了朱元璋,他小时候被元朝官兵欺负,恨透了官僚,后来竟扭转乾坤,换了天地。做了皇帝,仍然勤
英军方承认向乌派兵参与秘密行动
据《泰晤士报》13日报导,英国皇家海军陆战队中将罗伯特·马高恩在军方刊物中写道,英国皇家海军陆战队第45突击队成员,今年1月在协助将英...
“一张网”兜起百姓大小事 世界热头条
近日,梅州市五华县水寨镇西河社区因为一张手绘图“火”了。这是一幅长1 5米、宽1米,由数十张小图合成的西河社区手绘网格图,连日来吸引...
国网太康县供电公司实现“零证预约”“一证受理”
2021年以来,太康县供电公司全面深化“放管服”改革,持续优化电力营商环境,全面落实针用电报装的“三减四零”举措,做到“零证预约”、“...
《上流战争3》恶女硕京又坏又会穿!校服藏巧思、衣服跟着黑化?:当前头条
去年开播的狗血剧《上流战争》目前已播至第三季,剧情也渐渐变得「不科学」,动不动就赐死要角,然后再满血归来,让观众看到后来都直呼「不能
深圳机场恢复8条国际客运航线
近日,“深圳-特拉维夫”航线恢复运营,该航线是2020年以来中国内地第一条复航的以色列直达航线。截至目前,深圳机场共运行至洛杉矶、温哥...
全球热点!雪莲子怎么泡发 雪莲子泡发的教程
1、浸泡雪莲子时也可以用温水浸泡,可以利用50度摆布的温水直接浸泡雪莲子,并且每隔两小时换水一次如许过,五六个小时之后雪莲子就能泡发,但
山河药辅主力资金持续净流入,3日共净流入1041.94万元
山河药辅12月16日DDE大单资金(主力资金)净流入752 21万元,两市排名347 4898。近3日山河药辅主力资金持续流入,3日共净流入1041 94万元。【投
爱奇艺(IQ.US)将启用新价格:12月16日正式执行,涨价后追平腾讯、优酷
(原标题:爱奇艺(IQ US)将启用新价格:12月16日正式执行,涨价后追平腾讯、优酷)12月12日,从爱奇艺(IQ US)向用户发布的站内信获知,爱奇艺将于2
腾盛博药-B(02137.HK)拟授出149.7万份购股权及39.65万份受限制股份单位
格隆汇12月15日丨腾盛博药-B宣布,于2022年12月15日,公司根据首次公开发售后购股权计划条款向10名购股权受让人授出合共149 7万份购股权,惟须
经营困难拖欠工资应该怎样追回?你了解吗?_快资讯
根据原劳动部《对〈工资支付暂行规定〉有关问题的补充规定》(劳部发〔1995〕226号)第四条的规定,“无故拖欠”系指用人单位无正当理由超...
信用社贷款倒单怎么办-速递
天数不同,等额本息法,中国公民18-65岁;它是正当的、稳定的,包括冻结该信贷的使用者的银行存款,并根据抵押支付贷款。如果有必要,我们可以
世界快资讯丨偃师区检察院“检爱同行·法治进乡村”巡讲活动走进教师进修学校
大河网讯为提高教师进修学校学生自觉守法和自我保护意识,9月23日,偃师区人民检察院“检爱同行·法治进乡村”巡讲活动在区教师进修学校举...
山东全省医疗机构今日起不再查验核酸
山东省各市领导小组(指挥部):为方便群众看病就医,经研究确定,自2022年12月14日零时起,对进入全省各级各类医疗机构的人员,不再查验核酸
天天观热点:泰恩康(301263.SZ)副总经理张震收到广东证监局警示函
智通财经APP讯,泰恩康发布公告,公司副总经理张震于近日收到广东证监局下发的《关于对张震采取出具警示函措施的决定》(行政监管措施决定书〔2
异动快报:ST曙光(600303)12月13日9点25分触及跌停板
12月13日盘中消息,9点25分ST曙光(600303)触及跌停板。目前价格6 47,下跌4 99%。其所属行业商用车目前上涨。该股为汽车零部件,新能源整车
环球快看点丨工业互联网“百城千园行”伙伴计划正式启动
在11月15日举行的2022(第二十一届)中国互联网大会开幕论坛上,工业互联网“百城千园行”伙伴计划正式启动,该计划旨在聚力汇智协同推进工...
南岭民爆: 湖南南岭民用爆破器材股份有限公司关于发行股份购买资产并募集配套资金暨关联交易报告书修订说明公告|世界即时
证券代码:002096 股票简称:南岭民爆 编号:2022-095 湖南南岭民用爆破器材股份有限公司 关于发
益盛药业董秘回复:公司库存的原材料里主要为人参,未有红景天的储备
益盛药业(002566)12月09日在投资者关系平台上答复了投资者关心的问题。投资者:请问公司这么多库存中药材会不会贬值,红景天的原材料储备多不
焦点速看:以绿色金融助力高质量发展
前不久,人民银行、银保监会等6部门印发《重庆市建设绿色金融改革创新试验区总体方案》(以下简称《方案》)。《方案》提出,用5年左右时间,在
老凤祥欧亚卖场藏宝金豪华店开业 李凤鸣穿“中国红”出席剪彩仪式
近日,老凤祥欧亚卖场藏宝金豪华店盛大开业,青年演员李凤鸣受邀出席剪彩仪式。活动当天正值国庆节,李凤鸣衣品在线,她佩戴老凤祥点羽系列
同比下降8%!新疆高院发布2021年消费者权益纠纷典型案例
3月15日,新疆维吾尔自治区高级人民法院紧密配合消费者权益保护日宣传,通报全区法院2021年消费者权益纠纷案件审理情况,同时发布两个典型