基于.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接口标签:
- 世界百事通!初音未来的男朋友叫什么名字_初音未来的男朋友
- 世界观天下!一杯“荷塘咖啡”撬动文旅融合产业链 村民享受文旅发展红利
- 从缅甸逃回男子自述:水牢满地是血,女子遭囚禁虐打,好看的被卖至娱乐场所|看点
- 全球今年恐迎来厄尔尼诺“大烤”_热门看点
- 一张图:2023/07/03黄金原油外汇股指"枢纽点+多空占比"一览
- 黄酒怎么泡红枣?
- 定海浮生录·叁-每日关注
- 午评:两市放量上行沪指涨1.29% 汽车与保险行业领涨 世界即时看
- 【天天速看料】新田:李祥佐走访慰问困难党员和老党员
- 微头条丨服务不间断 持续助力高校毕业生就业
- 同情他们!第一批“吃螃蟹”的那些人,正提心吊胆开电动车
- 焦点简讯:成都东软学院学费多少_成都东软学院学费
- 呼和浩特强降雨引发山洪,致1人死亡2人失联
- 小暑吃黄的好处及方法
- 安控科技7月3日快速上涨
- 十年寒窗无人问一举成名天下知雪怕太阳草怕霜人怕没钱情怕伤_十年寒窗无人问
- 实时焦点:我恨狮子座人数_我恨狮子座
- 株洲桂娟餐饮服务有限责任公司_关于株洲桂娟餐饮服务有限责任公司概略-热推荐
- 毕业生报到证去哪里报到(毕业生报到证)|焦点精选
- 全球热消息:英国脱欧的原因及事件经过(英国脱欧的原因)
- 今日热议:津城天气:雷阵雨“灭火”!别想得美!
- 环球要闻:对虚开骗税等涉税违法行为亮剑出击广州市税务局释放税务稽查执法刚威
- 汕尾陆丰警方通报一加油站发生火灾:涉嫌放火者已被刑拘 全球播报
- 罗马诺:切尔西将继续与布莱顿谈凯塞多转会;球员已同意加盟-当前信息
- 全球今亮点!重庆启动水旱灾害防御Ⅳ级应急响应
- 9月上市/定位高于深蓝SL03 启源A07更多消息露出 全球最资讯
- 十个人电梯超重的问题_十人电梯超重官方答案 天天动态
- 红米手机参数配置对比(红米x40手机参数)
- 今日观点!《红楼梦》《小美人鱼》,“国家队”以芭蕾“明珠”点亮申城夏夜
- 世界最大跨径公轨两用悬索桥进入主塔施工阶段|世界百事通
- 世界观速讯丨喜报!我校7门课程新入选国家级一流本科课程
- 当前信息:蜗牛移动怎么查话费?_蜗牛移动怎么查话费
- 中金岭南韶关冶炼厂新增12万吨锌基新材建设项目(一期)工程开工_通讯
- 注意,发票作废的时代或将结束!
- 每日速看!秦静温乔舜辰最新章节1350章
- 局长信箱怎么查询回信西安医疗保障局(局长信箱怎么查询回信)
- 丹佛斯变频器面板按键说明图_变频器面板按键说明书
- 美国今年已发生186起儿童意外枪击事件 当前简讯
- 温网开赛前迎坏消息!郑钦文的运气太差了,网友:又要白忙活? 环球要闻
- 上财校友会无锡讲座分享会-环球快消息
- 【独家焦点】路面更平整,通行更顺畅!他们积极探索社区治理新模式
- 高校该不该开放?有商家将高校参观做成“付费生意”
- 世界即时看!视点|又见卖菜“小过重罚”11万,执法公平不能只靠法院兜底
- 麦博m111电路图(麦博m-111)_环球观点
- 中东土豪百亿补贴,高合汽车“续”上了?
- “第三支箭”落地 上市房企定增连续获批背后的市场脉搏 头条焦点
- 基督教歌曲耶稣爱你_天主教耶稣爱你网
- 儿童新冠二阳了怎么办 二阳会不会出现新冠后遗症 基本情况讲解
- 雅虎记者:阿努诺比希望在进攻端扮演更重要角色&想要多持球
- 高温催生避暑旅游热 :中信证券及外资扎堆买入加仓长白山,涨停还有几个
- 新资讯:在马赛遇袭中国游客已前往瑞士并提前回国
- 赵鹏获任中国人保党委副书记
- 惠来县发布暴雨橙色预警
- 《夏目友人帐》将制作第七季 ,15周年庆祝影片公开
- 当时明月在——怀念林文月教授丨人来人往
- 王源被人民文娱点评,言辞犀利,句句说到观众的心坎里 世界微头条
- 阿根廷首次使用人民币偿付到期外债 天天速递
- 2022~2023年内蒙古养老金调整新消息和养老金上调细则最新消息(全文)_天天快看点
- 甘肃省中级职称评审需要哪些资料_甘肃省中级职称评审
- 又一家科创型生物医药企业落地宝山!
- 台退役少将于北辰言论被台海军前舰长打脸:我同学真的不知道_全球快看
- 超长约!格兰特5年1.6亿回归开拓者 环球速讯
- 赛尔号格尔顿(查尔顿 赛尔号精灵) 全球聚看点
- 每日速递:党建引领“五共”善治 ——创新基层治理的“大冶样本”
- 焦点简讯:苹果成为首家收盘市值达到3万亿美元的公司 iPhone 15换机周期要来了
- 雄县属于哪个市哪个省(雄县属于哪个市)
- 曝汪姓男艺人性侵19岁女子 具体是什么情况? 当前观察
- 掘金夜经济
- 邢台巨鹿:“红色驿站”里学习忙 世界球精选
- 神十六航天员是哪三位简介(董志川讲天文科普:航天员拍到月亮羞答答溜走)
- 360的老板_360老板是谁
- 世界即时看!张韶涵买的小岛图片(张韶涵买下太平洋小岛)
- AMD R5 5600X3D 处理器海外上架:6 核 12 线程,96MB 三级缓存
- 高考放分了,这些防骗“判断题”要答好-今日精选
- 全球热头条丨金银河:子公司碳酸锂产品中试生产线已投入生产运行并已实现产品销售
- 世界微头条丨word转jpg格式图片怎么弄手机_word转jpg
- 歌尔股份:上半年净利润同比预减76%-84% 全球微速讯
- 台湾黑社会老大(关于台湾黑社会老大的基本详情介绍)
- 播报:集泰股份:与武汉大学共建先进材料研究中心
- 国家外汇管理局公布2023年5月我国国际收支货物和服务贸易数据
- 东风不与周郎便 铜雀春深锁二乔原文 赤壁原文及翻译 世界热资讯
- 每日播报!温暖2023 | 十大最具影响力短视频火热征集中
- 果然是油画大师,丹麦油画之父画的美女,色彩明艳!
- 来自虞美人之坡结局 来自虞美人之坡简介
- 世界微资讯!什么叫开脸观音_什么叫开脸
- 莱音珠宝黄金价格今天多少一克(2023年06月30日)
- 每日观点:演员这首歌的歌词(演员的歌词是什么)
- 曾红娟(关于曾红娟介绍)
- 一天拆除14座桥 湖北交投集团打造“映山红”改扩建特种兵
- you suck翻译(you suck)-全球速讯
- 中航电测6月30日快速上涨 环球精选
- 今日热门!宗地镇戈岜小学志愿服务队
- 全球快资讯丨醉酒后故意伤害怎么判
- 27.77万亿元!公募基金规模再创历史新高
- 【天天报资讯】6.30盘前策略 今天继续实盘实时分享抓涨停
- 雅戈尔(600177):6月29日北向资金减持61.27万股
- 全球微速讯:国乒女单2人出局,钱天一爆冷不敌日本小将,何卓佳完败于孙颖莎
- 贵州和广西,主打一个双向奔赴!
- 装修建材板块6月29日跌1.63%,坚朗五金领跌,主力资金净流出2138.97万元 天天快播
- 世界今热点:一周数读
广告
广告
- 如何验证翡翠的真假?只需要简单8步 天天短讯
- DJI RS 3 Mini发布:2千克负载仅795克,支持快速竖拍 天天新消息
- 形容法律威严的句子(精选187句)
- 《宝可梦》满血情况下受到的伤害减半,能带来多少对战机会?
- 世界热推荐:活力中国丨在忙碌的生产线感知中国经济活力
- 全球消息!海南航空回应男子在航班上喊飞机要出事:该名旅客已移交机场公安
- 陆金贷(小额应急)网贷逾期3年多久上征信|全球百事通
- 比亚迪继续减持比亚迪股份,半年已减持超30%
- 胎压监测板块1月9日涨0.91%,通达电气领涨,主力资金净流出2377.78万元_环球快消息
- 世界速看:陆金贷(小额应急)贷款逾期八天延迟还款会影响征信吗
- 記者觀察|封關壬寅末終落幕 港深雙城記開新篇 世界微动态
- 南开区16岁小孩抚养费一般多少钱
- 世界微头条丨十来万的车,我选卡罗拉
- 新华视点|商圈火、景区旺 各地消费市场显活力|聚焦
- 每日热门:光猫和路由器怎么连接 光猫和路由器的正确连接方法
- 蔬菜生吃还是熟吃?你是哪一派?|天天观点
- 天天消息!九典制药(300705.SZ):非洛地平片获批上市
- 热水泡脚脚痒是怎么回事?-环球时快讯
- 面试时,最可怕的就是背调?-世界视点
- 环球短讯![快讯]广联航空:关于特定股东减持数量过半的进展






