当前位置: 首页>资讯 >

天天看点:基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口

来源: | 时间: 2022-12-19 18:58:04 |

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接口

关键词:

 

热文推荐

天天看点:基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口

1前言最近电脑坏了,开源项目的进度也受到一些影响这篇酝酿很久了,作为本系列第二部分(API接口开发)的第一篇,得想一个好的开头,想着想着

2022-12-19

松下 S5 Mark II 曝光,配备全新的相位检测自动对焦系统 视点

IT之家12月19日消息,PhotoRumors上个月表示,松下将于2023年2月CP+展期间发布全画幅LumixS5MarkII微单相机,用于取代现款LumixS5微…

2022-12-19

中科曙光董秘回复:作为以技术创新为基因的科技企业,中科曙光将继续专注核心技术研发,不断丰富产品类型-热点评

中科曙光(603019)12月19日在投资者关系平台上答复了投资者关心的问题。投资者:请问管理层,公司有这么多概念,云计算,数据中心,自主可控,

2022-12-19

焦点速读:感染后咽口水都像吞刀片?江城专家支招嗓子疼咳嗽如何缓解

感染后咽口水都像吞刀片?江城专家支招嗓子疼咳嗽如何缓解---近日,许多“阳过”的网友分享称,感染后咽口水像吞刀片。为什么会出现这种症状。

2022-12-18

煮好的鸡蛋能放多久 煮鸡蛋能放多长时间

1、煮鸡蛋能够存放三天左右,但是也与存放的温度等因素有关。2、如果是天气比较冷或者是放在冰箱中冷藏,一般能够存放三天左右,如果是在比较

2022-12-18

11月车企销量TOP 10:冠亚军无悬念,特斯拉冲入榜单

11月国内的疫情管控还比较严格,且呈现出了全国各地散发的情况,尤其是不少汽车消费大省,都受到了疫情管控的冲击,整体车市走势也是一反常态

2022-12-17

当前快讯:福建发布首批60件专利开放许可已达成首单专利开放许可交易

近日,省市场监管局(知识产权局)积极指导推动海峡股权交易中心知识产权交易服务平台专利开放许可专区上线运行,首批集中发布60件开放许可的

2022-12-16

多人故意伤害致人轻伤罪 热门看点

殴打人构成共同犯罪,涉嫌故意伤害罪。在共同犯罪中对共同犯罪的形成、实施与完成起决定或重要作用的犯罪分子属于主犯,在共同犯罪中起主要作

2022-12-16

浙数文化(600633)12月15日主力资金净买入7440.18万元|焦点报道

截至2022年12月15日收盘,浙数文化(600633)报收于8 8元,上涨5 9%,换手率7 64%,成交量96 66万手,成交额8 57亿元。12月15日的

2022-12-16

建发致新创业板IPO审核获深交所恢复 公司为全国性的高值医疗器械流通商 消息

因已完成财务资料更新,12月15日,深交所恢复上海建发致新医疗科技集团股份有限公司(建发致新)发行上市审核。中信证券(600030)股份有限公司为

2022-12-15

自学初级会计证考过了有什么用

自学初级会计证考过了有很多用处,考取初级会计证书,是进入会计行业工作的前提。没有初级会计证,一般不能从事会计工作;考取了初级会计证就

2022-12-15

兰剑智能:12月14日获融资买入289.81万元|全球热头条

同花顺数据中心显示,兰剑智能12月14日获融资买入289 81万元,占当日买入金额的14 82%,当前融资余额5845 42万元,占流通市值的3 95%,超过历

2022-12-15

即时焦点:环球数码创意(08271):广东环球数码需向珠影制片支付1.57亿元

智通财经APP讯,环球数码创意发布公告,于2022年12月13日,广东省广州市中级人民法院对重审作出的《民事判决书》送达广东环球数码。根据《广州

2022-12-14

观速讯丨每日冲煞属相 2023年8月5日属什么生肖冲什么

当我们运气不好的时候,真的不要去做一些重要的人生大事,因为这样可能会给我们造成一个很大的影响,因此,我们有什么重大的日子时,应该要先

2022-12-14

日产预计不会在年底前与雷诺就重组联盟达成协议 快消息

据悉,双方已持续两个月的谈判仍在继续,现在看来可能会持续到新年

2022-12-13

天天即时看!保利发展拟发行21.9亿元公司债券

中国网地产讯12月13日,据上交所披露,保利发展拟发行21 9亿元公司债券。据募集说明书显示,债券牵头主承销商 簿记管理人 债券受托管理人为中

2022-12-13

【机构调研记录】海富通基金调研拓荆科技、邦彦技术等5只个股(附名单) 世界最新

根据市场公开信息及12月12日披露的机构调研信息,海富通基金近期对5家上市公司进行了调研,相关名单如下:1)拓荆科技(证券之星综合指标:0 5

2022-12-13

世界聚焦:机票退票费(教你怎么退特价机票)

退票手续费(教你如何退特价票)机票改签退票费新规!再也不白花钱了!南宁快报2018-07-1922:11:08早点开始。我们走吧!想去旅游看看这里开始永

2022-12-12

雪人股份董秘回复:公司与氢能源汽车相关的主要产品是氢燃料电池动力系统及系统核心零部件

雪人股份(002639)12月12日在投资者关系平台上答复了投资者关心的问题。

2022-12-12

世界最新:至纯科技: 关于本次非公开发行A股股票不存在直接或通过利益相关方向参与认购的投资者提供财务资助或补偿的公告

证券代码:603690    证券简称:至纯科技         公告编号:2022-145       上海至纯洁净系统科技股份有限公司 关于本

2022-12-09

资讯

天天看点:基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口

1前言最近电脑坏了,开源项目的进度也受到一些影响这篇酝酿很久了,作为本系列第二部分(API接口开发)的第一篇,得想一个好的开头,想着想着

2022-12-19     
松下 S5 Mark II 曝光,配备全新的相位检测自动对焦系统 视点

IT之家12月19日消息,PhotoRumors上个月表示,松下将于2023年2月CP+展期间发布全画幅LumixS5MarkII微单相机,用于取代现款LumixS5微…

2022-12-19     
中科曙光董秘回复:作为以技术创新为基因的科技企业,中科曙光将继续专注核心技术研发,不断丰富产品类型-热点评

中科曙光(603019)12月19日在投资者关系平台上答复了投资者关心的问题。投资者:请问管理层,公司有这么多概念,云计算,数据中心,自主可控,

2022-12-19     
焦点速读:感染后咽口水都像吞刀片?江城专家支招嗓子疼咳嗽如何缓解

感染后咽口水都像吞刀片?江城专家支招嗓子疼咳嗽如何缓解---近日,许多“阳过”的网友分享称,感染后咽口水像吞刀片。为什么会出现这种症状。

2022-12-18     
煮好的鸡蛋能放多久 煮鸡蛋能放多长时间

1、煮鸡蛋能够存放三天左右,但是也与存放的温度等因素有关。2、如果是天气比较冷或者是放在冰箱中冷藏,一般能够存放三天左右,如果是在比较

2022-12-18     
11月车企销量TOP 10:冠亚军无悬念,特斯拉冲入榜单

11月国内的疫情管控还比较严格,且呈现出了全国各地散发的情况,尤其是不少汽车消费大省,都受到了疫情管控的冲击,整体车市走势也是一反常态

2022-12-17