基于.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接口 天天快看点
- 黄山承包土地纠纷律师怎么收费
- 2022四川数字经济企业50强排行榜|实时焦点
- 顶固集创(300749.SZ)股东曹岩累计减持9万股 减持时间过半_热文
- 有呼必应 助企发展_今日热搜
- 当前要闻:CQF是什么时候考试?考试能不能延期?
- 天天热门:发布变更又快又稳?腾讯运维工程师经验首发
- 鸿博股份:12月16日获融资买入287.94万元-热点评
- 捏鼻梁会让鼻子变挺吗|新要闻
- 38岁老詹拼42分钟轰33+9+9 他的对手比他小14岁
- 进口退烧药遭国人哄抢,代购直邮齐涨价,与国外价差最高达9倍 全球新动态
- 丰田霸道普拉多图片,丰田霸道兰德酷路泽v8多少钱|当前简讯
- 环球速讯:梅安森: 民生证券股份有限公司关于重庆梅安森科技股份有限公司部分募投项目延期的核查意见
- 显盈科技:12月15日获融资买入397.64万元,占当日流入资金比例28.66%_全球速看
- ST柏龙: 关于收到广东证监局《行政监管措施决定书》的公告|每日精选
- 川环科技(300547)12月15日主力资金净买入132.10万元
- 修改财务报表可以贷款吗(财务报表不申报可以吗)
- 精彩看点:福建七岁小孩抚养费一般多少钱
- 江南化工董秘回复:股份交易属交易双方商业行为,交易双方依据签署的协议履行权利与义务
- 寿险渐复苏 财险动能足 保险业转型发展静候春天到来|全球观焦点
- 当前热议!天下秀: 天下秀数字科技(集团)股份有限公司股东集中竞价减持股份进展公告
- 世界通讯!华斯股份董秘回复:截至2022年12月10日 的股东人数约为32400 名
- 牧原股份(002714.SZ)拟设立多家子公司 分别开展生猪、新能源、生物技术相关业务
- 快看点丨MediaTek先进科技引领移动平台创新趋势
- 普源精电: 普源精电科技股份有限公司关于公司董事会及监事会换届的公告
- 微速讯:浙江世宝(002703)12月8日主力资金净买入3291.45万元
- 焦点关注:高视医疗资本市场前景难言乐观:竞争力存疑,产品多次被召回
- 股票行情快报:庄园牧场(002910)12月6日主力资金净卖出637.38万元|天天速看料
- 全国首部!江西“小切口”立法 解决环境大问题
- 邯郸市启动为期半年的食品安全专项行动 严打食品违法犯罪行为
- “洗衣液奶茶”因存安全隐患全部下架 商家:“以后也不会再卖了”
- 警惕“唱反调”演变成不尽责 独董不能止于说“不”更要勤勉尽责
- 恐龙呼吸道感染首个证据发现 几万年前的恐龙也患感冒
- 台风“圆规”携风裹雨来袭 广东深圳、珠海等地停课停工
- 西藏米林“家庭农场”:引领种植产业 助力乡村振兴
- 从东北到西北 他在“军垦第一城”规划着城建未来
- 新疆阿克苏地区库车市发生4.1级地震 震源深度21千米
- 环球影城过山车突然停驶 游客被困十米高
- 新版控烟条例效果如何?禁烟区依然烟熏火燎
- 还在打赏假脸女主播?来看视频“变装秀”
- 大雨洪水中的这7个瞬间,让我们流泪了……
- 台风“圆规”将登陆 广东多地停课停工
- 哈尔滨市新增治愈出院本土新冠肺炎确诊病例8例
- 西藏普兰边检民警:让孤寡老人迎来有“儿女”陪伴的温馨重阳节
- 上海率先出台《住宅装饰装修质量验收规范》团体标准
- 吴谢宇称死刑“量刑太重”上诉 二审新增一名辩护律师
- 粤启动最高标准防御台风“圆规” 深圳珠海等多地停课停工
- 山西大同:受近期气温骤降影响 11日起陆续供暖
- 媒体记者赞开封古城墙夜景 宛如时空隧道式“穿越”体验
- 风雨无情,携手共“晋”
- 有助降低农业磷肥施用 科研人员在植物磷营养吸收上取得新发现
- 台风“圆规”给福建带来风雨影响 福建转移近3万人
- 生物多样性“家谱”扩容 杭州桐庐发现低危新记录种天目臭蛙
- 亲身感受技能魅力和力量 近40位外交官在沪“走进世赛”
X 关闭
最新资讯
- 福建发布台风黄色预警信号 福州海警守护辖区渔船民安全
- 广西新增境外输入确诊病例8例 新增境外输入无症状感染者1例
- 雷锋精神:做“永不生锈的螺丝钉”
- 风雨同舟 谱写抗洪壮歌
- 晋陕全力做好防汛救灾 恢复生产工作
- 哈尔滨多地风险等级调整为低风险
- 激流勇“晋”!一组谐音成语致敬山西
- 海河流域上游强降雨后泄洪 洪峰预计今晚进入天津
- 河南卫辉村民抢收蔬菜捐赠山西:俺分文不要
- 台风“圆规”致海南进出岛客运暂停
- “圆规”加强为台风级 将在海南琼海到陵水一带沿海登陆
- 为了百分之五的孩子:残疾儿童如何接受九年义务教育?
- 关乎教育公平感 禁止收集家长职务信息该成为明规则
- 台风“圆规”将登陆 较强冷空气将影响我国大部地区
- “圆规”加强为台风级 中央气象台发布台风橙色预警
- 骗财、自杀、诱奸……四个关于“饭圈女孩”的故事
- 绥化“战疫”,有群“做好事上瘾”的年轻人助攻
- 这些“反诈App”,关键时刻或能帮上你
- 北京秋雨又上线夜间大部有小雨 15日起大风降温来袭
- 收养12个患病弃婴 在这个家庭亲情不一定与血缘联系
- 学生被家暴学校却保持缄默?强制报告制度还需更多配套
- 教培退潮,成人职教成为培训机构入局、转型热门选项
- 文化场馆活动 展现多彩魅力
- 既要“富口袋”也要“富脑袋”
- 落马官员违纪违法:自认国企特殊 享乐放纵迷打球
- 2021年中国汽车行业用户满意度指数测评结果发布
- 1000度近视坐过山车致视网膜脱落 眼科专家:高度近视用力咳嗽、打喷嚏都有可能造成悲剧
- 家庭养老床位“无人照护如有人” 安装适老智能设备 24小时远程监护
- 3小时话剧《长安第二碗》浓缩40年来时代巨变
- 1738元机票提前10天退竟要扣1182元退票费
- 在“未来工厂”,老师傅变身“新工人”
- 面对气候变化,文物保护要有前瞻性
- 挪用公款并收受别墅 是否应并罚
- 国道244陕西留坝县武关驿段出现山体塌方
- 厦门做细文化遗产保护监督 联合会商促整改
- 大熊猫国家公园正式设立 四年试点受益的不仅是大熊猫
- 人工智能+3D打印,做出一口好“牙”
- 大熊猫的故乡藏着哪些“生物多样性”密码?
- 我国正式设立首批五个国家公园 大熊猫国家公园“转正”
- 郑州追征一网红600多万元税款 网络主播补税潮要来了?
- 成都中小学劳动教育纳入必修课 每周不少于1课时
- 161天减重31.2斤! 41岁癌症晚期男子惊艳健美大赛舞台
- 解密《长津湖》《火红年华》共同的DNA 以真实人物为原型
- 电价只降不升预期打破 限制高耗能产业盲目发展
- 成都已建成783条“回家的路” 条条通往幸福
- 中外院士“智汇”成都 带来人工智能最新突破方向
- 车祸需赔5.3万余元,他打零工10余年终还清
- 野生象群对人类的信任在逐渐增加
- 北京东西城“罚教管”综合治理斑马线 机动车礼让渐成习惯
- 前三季度新登记新能源汽车同比增178.49%
X 关闭