基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口_每日速递

2022-12-21 05:29:51
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接口开发)...

12-21 05:29:51

常润股份: 常熟通润汽车零部件股份有限公司关于使用部分暂时闲置募集资金进行现金管理到期赎回的公告|天天精选

证券代码:603201   证券简称:常润股份       公告编号:2022-027  常熟通润汽车零部件股...

12-20 16:55:33

中航光电(002179)12月19日主力资金净买入7098.17万元-全球速讯

截至2022年12月19日收盘,中航光电报收于58 67元,上涨0 89%,换手率0 33%,成交量5 07万手,成交额...

12-20 10:59:26

环球简讯:还呗网贷逾期暂时还不起有起诉的风险吗

可能会。如果用户使用网贷消费之后出现了逾期,并且经过网贷机构和第三方的催收人员催缴欠款无果之后,...

12-20 00:07:33

快消息!隧道股份: 上海隧道工程股份有限公司第十届监事会第六次会议决议公告

证券代码:600820   股票简称:隧道股份         编号:临 2022-048债券代码:185752  ...

12-19 16:20:13

奕东电子:公司有空气净化消毒机产品 全球要闻

(原标题:奕东电子:公司有空气净化消毒机产品)同花顺(300033)金融研究中心12月19日讯,有投资者向...

12-19 10:38:03

今日视点:鹿邑县:“三举措”积极推进乡镇管理体制机制改革

为深入贯彻落实省委市委关于深化乡镇管理体制机制改革精神,扎实做好乡镇机构改革“后半篇文章”,鹿邑...

12-19 01:22:23

提钱花逾期5个月会不会上征信

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...

12-18 13:34:53

【经纬晚班车】皮尔巴拉锂精矿拍卖价年内第二次下跌,全球锂价下行开始?

欢迎来到中新经纬《经纬晚班车》,这里有重要的新闻资讯、财经热点

12-17 15:36:21

12月16日基金净值:汇添富价值领先混合最新净值0.8131,涨0.1% 今日快看

12月16日,汇添富价值领先混合最新单位净值为0 8131元,累计净值为0 8131元,较前一交易日上涨0 1%。...

12-17 01:17:19

瑞松科技(688090.SH):厦门恒兴拟转让5%的股份予自然人赵伟_天天微速讯

格隆汇12月16日丨瑞松科技(688090 SH)公布,公司持股5%以上股东厦门恒兴集团有限公司(“厦门恒兴”)与...

12-16 16:35:34

惠企纾困“拼服务”加速经济回归常态运行

据光明日报报导,在日前召开的企业家座谈会上,广西柳州释放了惠企纾困拼服务、全力加快经济回归常态运...

12-16 10:24:12

*ST紫晶: 独立董事提名人声明

查看原文公告

12-15 22:29:48

浙江将确保医疗和防疫物资不低于3个月用量|全球快看

省市县三级协同,加强药物、口罩、抗原等防疫物资生产和储备,同时做好呼吸机等重症救治资源储备,确保...

12-15 15:22:56

旭辉控股与中国建设银行上海市分行达成银企战略合作

旭辉控股与中国建设银行上海市分行达成银企战略合作2022年12月15日10:11中国网财经

12-15 10:18:48

每日动态!大悦城(000031.SZ):拟公开发行不超15亿元公司债券

格隆汇12月14日丨大悦城(000031)(000031 SZ)发布大悦城控股集团股份有限公司2022年面向专业投资者公开...

12-14 21:24:23

偃师区人民检察院召开提升业务数据质量培训会 天天速看

大河网讯为进一步加强检察业务数据质量,提升工作人员专业技能和业务素养,1月20日下午,偃师区检察院组...

12-14 15:14:29

盘前有料丨阿根廷率先晋级;北京恢复跨省团队游业务…重要消息还有这些

(原标题:盘前有料丨阿根廷率先晋级;北京恢复跨省团队游业务…重要消息还有这些)重要的消息有哪些今...

12-14 08:45:40

光洋股份: 董事会议事规则(修订稿) 当前速讯

常州光洋轴承股份有限公司董事会议事规则(经 2022 年 12 月 13 日召开的公司第四届董事会第二十...

12-13 18:00:12

三门峡集团犯罪律师怎么收费_环球百事通

(一)不涉及财产关系的:2000元-30000元 件。上下浮动幅度:20%但收费额不足2000元的按2000元收取。(二)...

12-13 10:56:58

【环球新要闻】中国一重: 公告2022-032(中国第一重型机械股份公司关于召开2022年第一次临时股东大会的公告)

证券代码:601106     证券简称:中国一重      公告编号:2022--032           ...

12-12 22:09:33

怡达股份(300721)12月12日主力资金净买入159.92万元 天天观热点

截至2022年12月12日收盘,怡达股份(300721)报收于47 83元,下跌3 37%,换手率0 86%,成交量0 61万手...

12-12 15:17:28

热门看点:情感作

书中的主人公是到东北讨生活的南方女人、渡江去俄罗斯闯荡的小舅、孤身一人漂洋过海的豆腐状元、追随恋...

12-12 07:17:20

山东路桥董秘回复:公司在京津冀、长三角、粤港澳大湾区、成渝地区均有承接项目,并通过成立区域总部的方式

山东路桥(000498)12月09日在投资者关系平台上答复了投资者关心的问题。投资者:科技部、住建部印发《“...

12-09 10:28:28

异动快报:南化股份(600301)12月8日9点32分触及涨停板_当前最新

12月8日盘中消息,9点32分南化股份(600301)触及涨停板。目前价格13 15,上涨10 04%。其所属行业工程...

12-08 09:26:18

12月6日基金净值:广发趋势优选灵活配置混合A最新净值1.6736,跌0.1%

12月6日,广发趋势优选灵活配置混合A最新单位净值为1 6736元,累计净值为2 0726元,较前一交易日下跌0...

12-07 01:31:35

适合家养几款植物推荐 好养轻松开出花海

随着夏天的到来,迎来了碗莲的开花期,它喜欢高温的天气,圆圆的叶子,美丽的花朵有很高的观赏价值,在...

09-16 14:23:40

发挥企业自治能动性 武进首个工业园自管会成立

日前,武进国家高新区贺北社区以贺北第一工业园为试点,整合园区资源,优化内部机制,牵头成立了武进首...

08-22 13:32:00

一名本土确诊病例系厦门大学教职工 校方已排查93人均阴性

  中新网11月26日电 据厦门大学微信公众号消息,11月25日18:00,上海市召开新冠肺炎疫情防控新闻发布...

11-26 14:15:17

江西本轮疫情新冠肺炎住院确诊病例“清零”

  (抗击新冠肺炎) 江西本轮疫情新冠肺炎住院确诊病例“清零”  中新网南昌11月26日电 (记者 吴鹏...

11-26 14:15:17

江苏徐州:封控区隔离人员1304人核酸检测均为阴性

  中新网11月26日电 据“徐州发布”微博消息,江苏省徐州市疫情防控应急指挥部发布疫情防控工作进展...

11-26 14:15:16

上海逾5万名筛查对象核酸检测阴性

  (抗击新冠肺炎)上海逾5万名筛查对象核酸检测阴性  中新社上海11月26日电 (记者 陈静)上海25日新...

11-26 14:15:16

“90后”波兰姑娘在中国:想做“小小平民外交官”

  中新网湖州11月26日电(记者 施紫楠)今年是波兰姑娘杰西卡在中国乡村生活的第9年。对于她来说,中国...

11-26 14:15:16

浙大不眠夜:罕见亮起“灿烂星辰”灯 守护师生前行

  中新网杭州11月26日电 题:浙大不眠夜:罕见亮起“灿烂星辰”灯 守护师生前行  作者 谢盼盼 ...

11-26 14:15:16

聚焦2021中国网络媒体论坛展示会 “宝鸡元素”备受追捧

  【聚焦2021中国网络媒体论坛展示会】 “宝鸡元素”备受追捧  11月24日—26日,2021中国网络媒体...

11-26 14:15:15

杭州两名无症状感染者的767名密切接触者核酸为阴性

  中新网杭州11月26日电(张煜欢)25日,杭州市新增两例无症状感染者。26日,杭州市新冠肺炎疫情防控指...

11-26 14:15:15

杭州通报2例无症状感染者处置工作:密接767人核酸均阴性

  中新网11月26日电 据“杭州发布”微信公众号消息,在通报杭州2例无症状感染者后,杭州市加快推进流...

11-26 14:15:14

兰州大学帮扶甘肃山区建“山泉水包”解旱季用水难

  中新网兰州11月26日电 (陈强)“终于有稳定的水源供应了。”看着水管里流出的清澈山泉水,甘肃省平...

11-26 14:15:14

妈妈患病不能自理 女孩休学一年伴其度过最后时光

  这两天,来自单亲家庭的山东青岛女孩刘郦微休学一年陪伴患病妈妈的视频感动无数网友。然而不幸的是...

11-26 14:15:13

辽宁大连新增1例本土确诊病例 系庄河市某小学学生

  中新网大连11月26日电 (记者 杨毅)大连市新冠肺炎疫情防控总指挥部26日发布通告,11月25日0时至24...

11-26 14:15:13

北京富力桃园C区调为低风险 目前全市均为低风险地区

  中新网11月26日电 据北京市卫健委微信公众号消息,截至2021年11月25日,北京市海淀区西三旗街道富...

11-26 14:15:13

山西吉县一在建乡村道路发生塌方 造成3人遇难1人受伤

  记者从山西省临汾市吉县相关部门了解到,11月25日,临汾市吉县一在建乡村道路发生塌方,造成3人遇难...

11-26 14:15:13

学生餐后集体呕吐腹泻 河南封丘:配餐公司停止供餐

  中新网11月26日电 据河南省封丘县政府网站消息,11月25日,有媒体报道封丘县《学生餐后集体呕吐腹...

11-26 14:15:12

杭州无症状感染者居住小区:连夜检测核酸 业主暖心助人

  中新网杭州11月26日电(王逸飞 钱晨菲)11月25日,杭州市通报两名来杭返杭人员诊断为新冠病毒无症...

11-26 14:15:12

苏州已累计筛查19959人

  中新网南京11月26日电 (记者 钟升)苏州市政府新闻办公室25日深夜公布,截至当日22时,苏州市已累...

11-26 14:15:11

为儿子代购救命药被认定贩毒?检方作出决定

  近日,“毒贩母亲”一事引发网友关注。河南郑州一名35岁的母亲李芳(化名)长期代购一款名为氯巴占的...

11-26 14:15:11

内蒙古本轮新冠肺炎疫情本土确诊病例全部治愈出院

  中新网11月26日电 据内蒙古自治区卫健委网站消息,11月25日0—24时,内蒙古自治区报告无新增确诊病...

11-26 14:15:10

江苏11月25日新增本土无症状感染者1例 为徐州市报告

  中新网11月26日电 据江苏省卫健委官方微博消息,11月25日0-24时,江苏无新增确诊病例,新增本土无...

11-26 14:15:10

北京疾控:上海确诊病例在京轨迹公布 涉4个就餐点位

  中新网11月26日电 据北京疾控中心微信公众号消息,11月25日18:00,上海市召开第107场新冠肺炎疫情...

11-26 14:15:10

上海今天六家医院暂停门急诊服务 互联网医院照常运行

  上海瑞金医院、中山医院、同济医院、闵行区中心医院25日均发布消息称,根据国家和上海疫情防控要求...

11-26 14:15:10

常润股份: 常熟通润汽车零部件股份有限公司关于使用部分暂时闲置募集资金进行现金管理到期赎回的公告|天天精选
中航光电(002179)12月19日主力资金净买入7098.17万元-全球速讯
环球简讯:还呗网贷逾期暂时还不起有起诉的风险吗
快消息!隧道股份: 上海隧道工程股份有限公司第十届监事会第六次会议决议公告
奕东电子:公司有空气净化消毒机产品 全球要闻
今日视点:鹿邑县:“三举措”积极推进乡镇管理体制机制改革
提钱花逾期5个月会不会上征信
【经纬晚班车】皮尔巴拉锂精矿拍卖价年内第二次下跌,全球锂价下行开始?
12月16日基金净值:汇添富价值领先混合最新净值0.8131,涨0.1% 今日快看
瑞松科技(688090.SH):厦门恒兴拟转让5%的股份予自然人赵伟_天天微速讯
惠企纾困“拼服务”加速经济回归常态运行
*ST紫晶: 独立董事提名人声明
浙江将确保医疗和防疫物资不低于3个月用量|全球快看
旭辉控股与中国建设银行上海市分行达成银企战略合作
每日动态!大悦城(000031.SZ):拟公开发行不超15亿元公司债券
偃师区人民检察院召开提升业务数据质量培训会 天天速看
盘前有料丨阿根廷率先晋级;北京恢复跨省团队游业务…重要消息还有这些
光洋股份: 董事会议事规则(修订稿) 当前速讯
三门峡集团犯罪律师怎么收费_环球百事通
【环球新要闻】中国一重: 公告2022-032(中国第一重型机械股份公司关于召开2022年第一次临时股东大会的公告)
怡达股份(300721)12月12日主力资金净买入159.92万元 天天观热点
热门看点:情感作
山东路桥董秘回复:公司在京津冀、长三角、粤港澳大湾区、成渝地区均有承接项目,并通过成立区域总部的方式
异动快报:南化股份(600301)12月8日9点32分触及涨停板_当前最新
12月6日基金净值:广发趋势优选灵活配置混合A最新净值1.6736,跌0.1%
适合家养几款植物推荐 好养轻松开出花海
发挥企业自治能动性 武进首个工业园自管会成立
一名本土确诊病例系厦门大学教职工 校方已排查93人均阴性
江西本轮疫情新冠肺炎住院确诊病例“清零”
江苏徐州:封控区隔离人员1304人核酸检测均为阴性
上海逾5万名筛查对象核酸检测阴性
“90后”波兰姑娘在中国:想做“小小平民外交官”
浙大不眠夜:罕见亮起“灿烂星辰”灯 守护师生前行
聚焦2021中国网络媒体论坛展示会 “宝鸡元素”备受追捧
杭州两名无症状感染者的767名密切接触者核酸为阴性
杭州通报2例无症状感染者处置工作:密接767人核酸均阴性
兰州大学帮扶甘肃山区建“山泉水包”解旱季用水难
妈妈患病不能自理 女孩休学一年伴其度过最后时光
辽宁大连新增1例本土确诊病例 系庄河市某小学学生
北京富力桃园C区调为低风险 目前全市均为低风险地区
山西吉县一在建乡村道路发生塌方 造成3人遇难1人受伤
学生餐后集体呕吐腹泻 河南封丘:配餐公司停止供餐
杭州无症状感染者居住小区:连夜检测核酸 业主暖心助人
苏州已累计筛查19959人
为儿子代购救命药被认定贩毒?检方作出决定
内蒙古本轮新冠肺炎疫情本土确诊病例全部治愈出院
江苏11月25日新增本土无症状感染者1例 为徐州市报告
北京疾控:上海确诊病例在京轨迹公布 涉4个就餐点位
上海今天六家医院暂停门急诊服务 互联网医院照常运行
走近年轻的视障工程师:优化上网体验 畅通“网络盲道”
X 广告
行业动态
X 广告

Copyright ©  2015-2022 人人植物网版权所有  备案号:粤ICP备18023326号-36   联系邮箱:8557298@qq.com