基于.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接口开发)的第一篇,得想一个好的开头,想着想着
焦点热门:65岁赵本山与宋小宝搭戏,精神抖擞,态度严谨!手中二胡成标配
再过一段时间,春节就要到了。而每当春节快来临时,许多人就不由得想起了曾经的“小品王”赵本山,这个给无数观众带来许多欢乐的男人。可自...
隔水药膳蒸鸡做法 隔水药膳蒸鸡怎么做-世界今日讯
1、山药除去粗皮,切成长段7—10厘米、厚度1厘米的纵片,枸杞子洗净备用。2、净鸡去爪,剖开背脊,抽去头颈骨留皮,下开水锅内氽一下取出,洗
快看:赛特新材(688398)12月16日主力资金净卖出260.43万元
截至2022年12月16日收盘,赛特新材(688398)报收于36 2元,下跌4 74%,换手率1 61%,成交量0 59万手,成交额2166 02万元。12月
风机叶片高速转动时,如何进行位移轨迹测量? 焦点速看
目前,我国已成为世界第二大经济体,第一大工业国,第一大货物贸易国,经济的迅猛发展导致了能源供不应求的局面。随着传统石化能源的日益紧张
提钱花网贷逾期5千不还会上征信吗
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
世界观焦点:chatgpt怎么玩?chatgpt国内能用吗?
ChatGPT编程客栈是OpenAI推出的最优化的语言模型系统,它能够实现流畅对答、写代码、写剧本、辩证分析问题、纠错等能力。最近陆续有大神做了国
新华制药股价创历史新高 频繁异动收关注函
证券时报记者赵黎昀 12月14日午后,新华制药(000756)股价再度拉升封住涨停,收于43 43元 股,创历史新高。这已是近8个交易日来,该公司出现
浙江震元12月14日主力资金大幅流出:全球热点评
浙江震元12月14日主力资金净流出4437 53万元,涨跌幅为-9 56%,主力净量(dde大单净额 流通股)为-1 70%,两市排名4848 4887。投顾分析:该股今
仅剩最后一个月!微软再次警告Win8.1即将停止支持 世界热讯
今年早些时候,微软就曾告知用户,Win8 1将在2023年1月10日停止支持。微软再次警告用户,即将停止Win8 1的一切技术支持,之后微软将不再为该版
冲云破雾,丰富产品研发管线及科研底蕴为荣盛生物上扬势注入确定性
近日,东北证券发布《医药行业2023年策略报告》,以“风物长宜放眼量,静待医药板块价值回归”为主题,对明年及未来一定时期内的医药产业发...
【播资讯】乒乓球亚锦赛由哪国主办 以2019年为例
1 2019年亚洲乒乓球锦标赛将于2019年9月15日至22日在印度尼西亚举行。2 8月24日,中国乒乓球队公布了2019年亚洲乒乓球锦标赛参赛名单。中国男
走在前沿 干在实处——记浚县公安局交警大队大队长王玉刚-今日热搜
今年7月下旬,浚县连降大到暴雨,河水涨溢,引起严重的洪涝灾害,不少道路被淹,不断出现险情。灾情就是命令,防控就是责任。面对严峻的防汛抗
璞泰来: 上海璞泰来新能源科技股份有限公司关于回购注销部分限制性股票完成的公告
证券代码:603659 证券简称:璞泰来 公告编号:2022-094 上海璞泰来新能源科技股份有限公司
创维数字董秘回复:截至2022年11月30日,公司股东户数为61,657户-全球速看
创维数字(000810)12月08日在投资者关系平台上答复了投资者关心的问题。投资者:请问12月7号公司股东人数是多少创维数字董秘:您好,截至2022年11月3
苏州科达董秘回复:公司将持续完善现有的产品和解决方案,此前通过线上形式发布了融合通信一体机等新产品
苏州科达(603660)12月07日在投资者关系平台上答复了投资者关心的问题。投资者:你好董秘,请问科达2022年的新品发布会还举行吗?苏州科达董秘
攀枝花将组建国内首只能源金属收储基金|全球快播报
11月18日,攀枝花城建交通(集团)有限公司与攀枝花钒钛交易中心有限公司签署战略合作协议,双方将组建国内首只能源金属收储基金,探索“钒钛交
12月5日威奥股份(605001)龙虎榜数据:游资杭州上塘路上榜
沪深交易所2022年12月5日公布的交易公开信息显示,威奥股份(605001)因有价格涨跌幅限制的日收盘价格跌幅偏离值达到7%的前五只证券登上龙虎榜
环球观点:智能自控:中信建投证券投资者于11月28日调研我司
2022年11月30日智能自控(002877)发布公告称中信建投证券研究发展部副总裁高庆勇于2022年11月28日调研我司。
潍柴重机董秘回复:公司将绿色船舶动力作为重要的研究方向,积极推进天然气等替代燃料在船用发动机方面的应用-环球快看
潍柴重机(000880)11月30日在投资者关系平台上答复了投资者关心的问题。
杭州长庆街道王马社区组织开展数字人民币支付商圈教学活动
近日,长庆街道王马社区充分发挥统战银行家联盟的专业力量,携手工商银行之江支行组织开展了一场打造社区数字人民币支付商圈现场教学讲解活
中科蓝讯上市首日亏1.41万元 中签亏损程度名列今年第二
7月以来,新股上市首日破发频现,两市已有5只新股首日破发。7月15日,中科蓝讯科创板上市,该股开盘即破发,盘中一度跌超30%。经计算,若投
“数字适老化及无障碍改造”助力老年人融入智慧政务
数字适老化及无障碍改造系针对老年人群体融入数字社会的一项重要工程。为此,钱塘区政务服务中心做了一系列探索,以切实解决辖区内老年人在
突发!被称为“中国最牛打印店”的荣大科技IPO撤回申请
被称为中国最牛打印店的荣大科技,在把很多公司送入IPO轨道之后,自己却折戟IPO。证监会官网显示,已收到荣大科技IPO撤回申请。去年5月,荣
购置税废置、购置汽车优惠利好频出 2022年你会买车么?
先问大家一个问题,2022年你还会买车吗?从今年5月开始,消费券、购车补贴、购置税优惠等等一系列的促汽车消费政策,都在刺激着每一位持币观