首页 >资讯 > > 正文

基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口|新动态

2022-12-21 20:13:30
1前言

最近电脑坏了,开源项目的进度也受到一些影响

这篇酝酿很久了,作为本系列第二部分(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的命名跟函数命名一样,都是动词,一目了然

PS:RPC这种几乎一个团队一个风格,我见过有人把所有接口都做成post方法,然后请求参数全部用json格式放在body里的。

关键是这个请求参数还不统一,同个项目不同开发人员写的请求参数格式不一致,很恶心。(微信有些接口也是这样)

RESTFul风格

分别是增删改查的接口

操作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:服务器错误服务器负责这些错误状态代码。
比如添加了数据,返回 201 (created)添加、更新、删除这些不需要返回数据的接口,返回 204 (no content)没登录,返回 401 (unauthorized)找不到,返回 404 (not found)没权限,返回 403 (forbidden)

这样就很清晰了,看接口返回的状态码就能知道结果如何。

在一些前端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 - 友情链接管理,这个功能比较复杂,单独做成一个分类

后续会有更多类似友情链接这样比较复杂的功能加入(比如评论),这种会单独做成一个分类。

PS:之前在开发博客前台的时候,把大部分功能都写在了 services里面,现在开发接口的时候就派上用场了,很多逻辑都是通用的,在接口的controller里面只需要调用这些 services就可以了。

4需要关注的其他东西

本文不涉及具体实现,只是作为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接口

上一篇: 下一篇:
x
推荐阅读

基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口|新动态

2022-12-21

变豆菜能吃吗可以怎么做啊?变豆菜的功效与主治与作用是什么呢?

2022-12-21

利扬芯片: 关于使用暂时闲置自有资金进行现金管理的公告

2022-12-07

阳光电源12月6日获深股通净卖出3.51亿 速看料

2022-12-06

汤臣倍健2021年市占率10.3% 稳居行业第一

2022-05-22

总投资3172.5亿元 石家庄提前超额完成年度目标任务

2022-03-20

石家庄海关共签发RCEP原产地证书864份 货值3.9亿元

2022-03-20

蚌埠海关累计签发RCEP原产地证书35份 涉及金额2583.09万元

2022-03-20

绥化望奎以工业化思维为引领 推动肉类加工制造产业腾飞

2022-03-20

衡阳耒阳免费发放油茶苗 助推油茶产业稳步发展

2022-03-20

郴州安仁文旅项目集中开工 总投资1000万元

2022-03-20

2022年郴州计划重点推进文旅项目101个 总投资354亿元

2022-03-20

宿州泗县深入推进文旅融合发展 擦亮城市品牌

2022-03-20

汽车零部件产业“领头羊” 锦州力争一季度“开门红”

2022-03-20

油价或有望冲击“九元”大关 宁波新能源汽车市场如何

2022-03-20

从水塘到“云”端 全国最大高邮鸭养殖基地实现智慧养殖

2022-03-20

淡季不忘引流 京郊民宿市场有望迎来回暖

2022-03-20

镇江乡村一二三产业融合发展 闯出“镇江之路”

2022-03-20

总投资30亿元 盐城东台8个重大产业项目相继开工

2022-03-20

去年南京规上信息软件业企业实现营收7577.28亿元 同比增长10.3%

2022-03-20

2021年南京农业保险保费收入53.07亿元 同比增长19.13%

2022-03-20

安阳本土确诊病例上升至26例

2022-01-10

3次推迟婚期 满洲里抗疫民警兑现承诺:“我回来娶你了!”

2022-01-10

上海公安民警在岗位上迎接2022年“中国人民警察节”

2022-01-10

郑州核酸检测为中小学生开辟“绿色通道”

2022-01-10

反扒便衣警察“小曹”:藏在人海中的隐形“守护者”

2022-01-10

哥哥移植肾脏给病重弟弟 已在上海顺利康复

2022-01-10

网友与人裸聊被敲诈10万余元 被告人获刑5年

2022-01-10

1月10日起天津市暂停开展旅行社旅游业务活动

2022-01-10

“3·28”特大跨境电信网络诈骗案公开审理

2022-01-10

忠诚履职 守护万家灯火

2022-01-10

奥密克戎病例已涉天津、安阳 “动态清零”必须坚持!

2022-01-10

专家协作成功完成亲体肾移植 同“肾”兄弟顺利康复

2022-01-10

著名指挥陈燮阳携苏州交响乐团“相约北京”

2022-01-10

中国热科院选育出4个木薯新品种

2022-01-10

北京疾控:12月9日以来途经或旅居天津市人员请立即报备

2022-01-10

河南安阳本轮疫情累计报告确诊病例26例

2022-01-10

许勤批示黑土地保护不力问题:加快形成黑土地保护长效机制

2022-01-10

【挑战365天正能量速写画】第041期:当警娃难,当双警家庭的警娃更难

2022-01-10

重庆姐弟坠亡案两被告人5个月间聊天记录曝光

2022-01-10

因疫情防控措施落实不力 江苏金湖一超市被红牌警告

2022-01-10

江歌案一审判决刘鑫赔偿近70万元 有何依据?专家解读

2022-01-10

广东肇庆“毒驾连撞5车致1死”肇事司机被批捕

2022-01-10

一线工作近22年的缉毒警:我知道坏的是毒品不是人性

2022-01-10

青海保障门源地震后生活必需品应急物资

2022-01-10

江西最大文物倒卖案宣判:倒卖国家二级文物 9人获刑

2022-01-10

呼和浩特:寒假期间有条件的学校要开展校内托管服务

2022-01-10

广西东兴口岸恢复通关 入境需网上预约

2022-01-10

天津米面油存量由20天提高至30天 超市菜市场进货量翻倍

2022-01-10

天津市委市政府致全市父老乡亲的慰问信:我们一定能够打赢

2022-01-10

北京市十五届人大五次会议胜利闭幕

2022-01-10

“中国最后一个原始部落”翁丁老寨火灾原因公布

2022-01-10

天津:划定封控区 全市开展全员核酸检测

2022-01-10

重庆姐弟被生父扔下坠亡案上诉期结束 一审法院暂未收到两被告人上诉状

2022-01-10

子夜直击,天津寒天战“疫”

2022-01-10

兰州名师话“美育”:“尚乐立人”分层培优 以“美”润教

2022-01-10

中国边疆“北方第一所”:9名民警守护“生命禁区”

2022-01-10

江歌母亲江秋莲:尊重法院判决,法律认定在我意料之中

2022-01-10

河南安阳9日12时至24时新增11例本土确诊病例

2022-01-10

辟谣!网传“封控区管控区相继解封”通知并非西安

2022-01-10

铁路公安以110幅优秀书画作品庆祝人民警察节

2022-01-10

“中国最后一个原始部落”翁丁老寨火灾原因公布

2022-01-10

天津:划定封控区 全市开展全员核酸检测

2022-01-10

重庆姐弟被生父扔下坠亡案上诉期结束 一审法院暂未收到两被告人上诉状

2022-01-10

子夜直击,天津寒天战“疫”

2022-01-10

兰州名师话“美育”:“尚乐立人”分层培优 以“美”润教

2022-01-10

中国边疆“北方第一所”:9名民警守护“生命禁区”

2022-01-10

江歌母亲江秋莲:尊重法院判决,法律认定在我意料之中

2022-01-10

河南安阳9日12时至24时新增11例本土确诊病例

2022-01-10

辟谣!网传“封控区管控区相继解封”通知并非西安

2022-01-10

铁路公安以110幅优秀书画作品庆祝人民警察节

2022-01-10

老人5折环卫工8折生活困难免费 这家面馆背后有个暖心事

2022-01-10

亲手制作“城砖” 这群小学生期末测评“砌了一面明城墙”

2022-01-10

河南安阳本土确诊病例与奥密克戎变异株有关

2022-01-10

浙江北仑调整封控区后首轮核酸检测12528人 结果均为阴性

2022-01-10

广东加强春运期间重点交通场所疫情防控

2022-01-10

浙江永康第五轮“三区”核酸检测结果均为阴性

2022-01-10

天津奥密克戎小学生病例传播链上已有15人 14人为儿童

2022-01-10

天津市商务部门快速应对疫情 米面油存量提至30天

2022-01-10

天津:抓紧开展全员筛查 全力筑牢疫情防控网

2022-01-10

江歌母亲代理律师:江秋莲核心诉求在判决中体现,将考虑是否上诉

2022-01-10

广州鹤洞大桥正式恢复桥面通车

2022-01-10

法院:刘鑫为自保阻挡江歌于门外有明显过错 事后言论有违伦常

2022-01-10

北京发布春节放假安排,倡导市民在京过年

2022-01-10

防范“生娃即失业”,不能仅算假期账

2022-01-10

西双版纳州内跨县流动需48小时核酸证明

2022-01-10

辞退6万名员工 新东方转舵:直播卖货、投资电影

2022-01-10

浙江金华首启气膜方舱实验室 最多日检100万人份

2022-01-10

北京市加强应急物资保障体系建设

2022-01-10

北京市开展公共安全风险管理体系建设

2022-01-10

代表热议“京津冀世界级城市群”盼加强能源协同发展

2022-01-10

天津津南本轮本土疫情第3-20例阳性感染者活动轨迹公布

2022-01-10

河南安阳确认2病例感染奥密克戎毒株

2022-01-10

那年今日 | 历史上的1月10日发生过什么大事?

2022-01-10

西双版纳景洪解除分区分级管理区域

2022-01-10

郑州10日开展新一轮核酸检测

2022-01-10

江秋莲诉刘暖曦生命权纠纷案一审宣判

2022-01-10

河南安阳市病例与天津市津南区现有本地疫情属同一传播链

2022-01-10

陕西新增报告本土确诊病例15例 均在西安市

2022-01-10

天津新增21例本土新冠肺炎确诊病例 均在津南区

2022-01-10