基于.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接口-天天速看料
- 排面!詹皇儿子胜甜瓜之子 詹瓜皮蓬卡戴珊现场观战-今日最新
- 黄光裕老矣-世界新资讯
- 坪山走在全市前列,率先开展智能网联汽车商业化试点-世界头条
- [快讯]开普检测:关于公司部分监事股份减持计划时间过半的进展|环球速读
- 异动快报:柳钢股份(601003)12月16日9点53分触及涨停板
- 天天要闻:南化股份: 南宁化工股份有限公司关于收到中国证监会上市公司并购重组审核委员会审核公司发行股份购买资产并募集配套资金暨关联交易事项的提示性公告
- 当前信息:神雾节能(000820)12月15日主力资金净买入7554.11万元
- 东亚机械:公司产品压缩机可以为口罩、医用药瓶药罐、医用手套、医用器械制作等提供纯净的空气动力源
- 天天观焦点:奥比中光: 北京市金杜(深圳)律师事务所关于奥比中光2022年限制性股票激励计划(草案)之法律意见书
- 长飞光纤光缆(06869.HK)盘中涨超7%,截至发稿,涨5.63%,报15.02港元,成交额7379.72万港元
- 苏州苏高新集团取消发行2亿元超短期融资券 发行安排另行公告 天天播报
- 钒钛股份(000629.SZ)与大连融科签订2023年钒电池储能原料合作年度框架协议 预计交易金额约10亿元|环球报道
- 中银绒业董秘回复:截止12月10日公司股东户数为113003
- 微动态丨9月23日兰卫医学现1048.5万元大宗交易
- 县域医共体落地哈密,中国电信新疆公司助力智慧医疗新模式-环球热推荐
- 优彩资源: 第三届监事会第九次会议决议公告 全球资讯
- 厦门港务(000905)12月8日主力资金净买入1924.34万元
- 【和讯生猪早报】国泰君安期货:期货抢跑,关注现货反馈情况
- 股票行情快报:法尔胜(000890)12月6日主力资金净卖出55.28万元 要闻速递
- 超四成转化至制造业领域!我国科技成果转化合同项数超46万项
- 前4个月甘肃外贸进出口总值209.8亿元 同比增长8.1%
- 株洲首座220千伏“多站合一”变电站将于6月投运
- 合肥市龙河口引水工程取水口围堰顺利合龙
- 中宣部:斩断伸向未成年人的盗版侵权“魔爪”
- 国务院开展根治欠薪冬季专项行动 为农民工追讨欠薪68.62亿元
- 坚决打击网络暴力 帮助网民切实维护自身权益
- 七台河市鹿山煤矿二井发生矿震 4人被困井下
- 暂停27天后 福建仙游火车站重启
- “大工匠”传经送宝
- 黑龙江七台河一煤矿发生矿震 目前井下4人被困
- 湖南临澧凌晨拉响防空警报 回应:短路引起故障
- 广东国庆假期高速公路车流总量超5000万车次 大湾区车流量同比增长10%
- 南海热带低压加强为台风 海南发布台风三级预警
- 广东升级广交会期间疫情防控举措 所有持证人员核酸检测“应检尽检”
- 国庆假期北京市接待旅游总人数861.1万人次
- 高福、童贻刚团队:新冠病毒溯源将是一场“持久战”
- 四川水利国庆假期全力应战最强秋汛
- 南海热带低压将于8日夜间至9日上午在海南岛东部登陆
- 聊天群背后的黑色产业链 金钱诱惑下被害人变成害人者
- 黑龙江省绥化市全域均为低风险地区
- 走近网瘾少年们:他们沉迷网络的病根何在?
- 节后第一天北京白天晴或多云利于出行 夜间起秋雨或再上线
- 走访抗美援朝纪念馆:长津湖的寒冷,与战斗一样残酷
- 绥化全域低风险!黑龙江绥化北林区一地调整为低风险
- 农业农村部:确保秋粮丰收到手、明年夏季粮油播种
- 中国故事丨“沉浸式”盘点今年的教育好声音!
- 升旗、巡岛、护航标、写日志,他们一生守护一座岛
- 他从一窍不通的“门外汉”,到重装空投“兵专家”
- 获2021年诺奖的蛋白,结构由中国学者率先解析
- “双减”后首个长假:亲子游、研学游需求集中释放
- 天山脚下,触摸丝路发展新脉动
- 且看新疆展新颜
- 《山海情》里“凌教授”的巨菌草丰收啦
- “双减”出台两个月,组合拳如何直击减负难点?
- IP类城市缘何吸引力强?玩法创新带动游客年轻化
- 面对婚姻,“互联网世代”的年轻人在忧虑什么?
- 沙害是自然界的恶魔,而他是荒沙碱滩的征服者
- “辱华车贴”商家及客服被行拘,处罚要不放过每一环
- 网游新政下,未成年人防沉迷的“主战场”在哪?
- 160万骑手疑似“被个体户”?平台不能当甩手掌柜
- 报告显示:这个国庆假期,粤川浙桂赣旅游热度最高
- 陈毅元帅长子忆父亲叮嘱:你们自己学习要好,就可以做很多事儿
- 北京国庆7天接待游客超861万人次 冬奥线路受青睐
- 从1.3万元降到700元,起诉书揭秘心脏支架“玄机”
- 都市小资还是潮流乐享?花草茶市场呈爆发性增长
- 国庆主题花坛持续展摆至重阳节
- 云南保山:170公里边境线,4000余人日夜值守
- 线上教学模式被盯上,网络付费刷课形成灰色产业链
- 全国模范法官周淑琴:为乡村群众点燃法治明灯
- 嘉陵江出现有记录以来最强秋汛
- 中国科技人才大数据:广东总量第一,“北上”这类人才多
- 神经科学“罗塞塔石碑”来了:迄今为止最完整的大脑细胞图谱
- 多地网友投诉遭遇旅游消费骗局,呼吁有关部门严查乱象
- 受南海热带低压影响 海南海口三港预计停运将持续到10日白天
- 农业农村部:确保秋粮丰收到手、明年夏季粮油播种
- 广州10月8日至20日对所有从省外来(返)穗人员实施核酸检测
- 辽宁省工信厅发布10月8日电力缺口橙色预警
- 受琼州海峡封航影响 10月7日、8日进出海南岛旅客列车停运
- 这场红色故事“云比拼”,穿越时空为我们指引方向
- 陕西支援14省份采暖季保供用煤3900万吨
- 汾河新绛段发生决口
- 看,生机勃勃的中国
- 百闻不如一见——北京大学留学生参访新疆
- 新疆霍尔果斯市2例无症状感染者新冠病毒均为德尔塔变异株
- 哈尔滨市南岗区爱达88小区将调整为低风险地区
- 国庆假期全国道路交通总体安全平稳有序
- 假期怎么过得这么快?国庆5.15亿人次出游,你咋过的?
- 国庆假期北京接待游客861.1万人次
- 山西平遥消防4天29次救援:拖着腿走路也要完成任务
- 新疆兵团可克达拉市:195名密接者已全部隔离医学观察
- 国庆假期中国预计发送旅客4.03亿人次
- 公安部交管局:国庆假期日均出动警力18万余人次,5位交警辅警牺牲
- 国庆假期中国国内旅游出游5.15亿人次
- 新疆哈密市巴里坤县发生4.3级地震 震源深度9千米
- 冷空气自西向东影响中国大部地区 气温将下降4℃至6℃
- 2021年MAGIC3上海市青少年三对三超级篮球赛落幕
- 国庆假期广西累计接待游客逾3611万人次 实现旅游消费272.41亿元
- 新疆伊犁州:妥善做好滞留旅客安置返回工作
- 新疆霍尔果斯无症状感染者新冠病毒属德尔塔变异株 未发现高度同源的基因组序列
X 关闭
行业规章
X 关闭