RESTful的优点
优点
1.通过url对资源定位,语义清晰;
2.通过HTTP谓词表示不同的操作,接口自描述;
3.可以对GET、PUT、DELETE请求重试(幂等的);
4.可以对GET请求做缓存;
5.通过HTTP状态码反映服务器端的处理结果,统一错误处理机制;
6.网关等可以分析请求处理结果。
请求重试-是幂等的,失败之后可以多次发起请求
做缓存-降低服务器的压力,响应速度更快
关键不同的状态码处理不同的请求返回
网关-可以检测发起的请求,若500太多的时候就会报错
Q点:
有些浏览器与运营商会在你的响应报文里面加广告
示例restful使用
URL:适合定位,用于资源定位的
QuerySting:灵活,长度限制,通常为URL以外的数据
请求报文体:灵活,长度不限制,不支持GET与DELETE,供PUT、POST提供数据
/Student/火属性/Type/2/ON/6
/Student?Status=火属性&Type=2&ON=6
参考实施指南
1.对于保存、更新类的请求POST、PUT(幂等的)请求,把全部参数都放到请求报文体中;2.对于DELETE请求,要传递的参数就一个资源id,因此把参数放到QueryString中即可;
3.对于GET请求,一般参数的内容都不会太长,因此统一通过QueryString传递参数即可。对于极少数的参数内容超过URL限制的请求,由于GET、PUT请求都是幂等的,因此改查PUT请求把参数通过报文体传参。
/User/5 PATCH //符合rustful风格,但具体使用那个看自己
{"email":"@ab.com","age":"5"}
/User PATCH
{"id":"5","email":"@ab.com","age":"5"}/User/5 DELETE
/User?id=5 QueryString
如何返回错误码
REST:通过HTTP状态码返回服务器端的处理结果
HTTP状态码不适合用于表示业务层面的错误码,它是一个用于表示技术层面的状态码。新增用户的操作中,如果服务器端要求JSON格式,客户端提交XML服务器返回400是没问题的。
但是如果用户名格式错误或者用户名重复,存在2xx与4xx。
400 BadRequest
用户请求的数据格式有问题时:无论成功与失败都返回请求在返回的{"code":"201"}展示具体的错误原因。
400派观点:若前端都没做好校验就返回400,不能通过网关将请求发送到服务器。(google、微信支付)
1.网关等可以监控HTTP状态码,如果接口频繁出现4xx状态码,说明客户端代码不完善。
2.很多系统不同的状态码有不同的含义,如果失败的服务的返回值200违背设计的初衷。
3.有些网关会将返回304的请求重定向到登录页面,若直接返回200将无法跳转
200派观点:网络的问题归网络、业务的问题归业务。(百度、微信小程序)
业务日志:返回200的看code的错误记录在此
技术日志:返回400、500记录在此
技术一个为业务服务
作者的个人观点
1.对于数据库服务器连接失败、请求报文格式、服务器端异常等业务错误,服务器端应返回4xx、5xx。
2.对于业务层面的错误,比如用户不存在,使用4xx等状态码返回。在报文中返回详细错误,{”code“:3,"message":"用户不存在"}。
3.不仅要返回400的HTTP状态码,不要忘了通过响应报文返回详细信息,指出问题出在哪里。
实现建议
使用总结:
[Route("api/[controller]/[action]")]
User/DeleteUser(int id)
出现这个说明该接口不符合swagger的使用规则
接口中调用自定义的方法不能使用public定义只能使用private方法
了解:加上这段就可以使用public的方法了,一般不这么干了解
安照分层的原则, Controller层中一般是调用其他层定义的、所有上面的的代码只作了解。
ControllerBase与Controller
Controller是继承自ControllerBase,在其基础上创建一些与视图有关的类以供使用MVC
也可以不继承任何类,可以方便后面做单元测试。 但不推荐,继承类的需要配置环境。
读取本地文件
[HttpGet]
public async Task<string> Add2()
{string s=await.ReadAllTextAsync("d:/log.log");return s.Substring(0,20);
}
Action方法的同步与异步
1.异步也可以同步
2.异步一般不需要async结尾
3.返回值为普通类型时,值默认序列号为JSON格式
4.IActionResult类型,不包含类型信息,因为swagger无法推断类型,推荐使用ActionResult<T>它支持类型转换。好处可以返回NotFind()
总结:要么使用普通的数据类型要么使用ActionResult<T>
[HttpGet]
public string Add()
{return "yes";
}
//...
[HttpGet]
public ActionResult<IEnumerable<User>> GetUser()
{if(xxx)
{ return NotFound()
}
return OK();
}
请求样式(更新)
//更新
[HttpPost("{id}")]
public async Task<ActionResult<IEnumerable<User>>> GetMag([fromRoute] int id, User m)
{//....
}/updateuser/8
`/updateuser/${id}`
{
"name":"lyy",
"age":18
}
JSON报文体
1.webapi开发模式下、json格式的请求体是主流。
2.只要声明一个模型类和Json请求格式一致即可。
3.可以混用
4.一定要设置请求头中的Content-Type:application/json,而且数据必须是合法的json格式。
util->index
// 引入axios
import axios from 'axios';
import {ElMessage} from "element-plus";// 创建axios实例
const httpService = axios.create({// url前缀-'http:xxx.xxx'// baseURL: process.env.BASE_API, // 需自定义baseURL:'http://localhost:7137/',// 请求超时时间timeout: 3000 // 需自定义
});//添加请求和响应拦截器
// 添加请求拦截器
httpService.interceptors.request.use(function (config) {// 在发送请求之前做些什么config.headers.token=window.sessionStorage.getItem('token');return config;
}, function (error) {// 对请求错误做些什么return Promise.reject(error);
});// 添加响应拦截器
httpService.interceptors.response.use( response=> {// 对响应数据做点什么return response;
},function (error) {// 对响应错误做点什么return Promise.reject(error);
});/*网络请求部分*//** get请求* url:请求地址* params:参数* */
export function get(url, params = {}) {return new Promise((resolve, reject) => {httpService({url: url,method: 'get',params: params}).then(response => {resolve(response);}).catch(error => {reject(error);});});
}/** post请求* url:请求地址* params:参数* */
export function post(url, params = {}) {return new Promise((resolve, reject) => {httpService({url: url,method: 'post',data: params}).then(response => {console.log(response)resolve(response);}).catch(error => {console.log(error)reject(error);});});
}/** 文件上传* url:请求地址* params:参数* */
export function fileUpload(url, params = {}) {return new Promise((resolve, reject) => {httpService({url: url,method: 'post',data: params,headers: { 'Content-Type': 'multipart/form-data' }}).then(response => {resolve(response);}).catch(error => {reject(error);});});
}export default {get,post,fileUpload
}
mvc的表单请求,需要请求头中获取数据
前后端分离开发
软件架构的一大主题就是分离,减少耦合
前后端分离技术为了利SEO,去启动”服务器渲染SSR“技术(前端知识)
示例
//用户登录接口[HttpPost]public ActionResult<LoginResult> Login(LoginResult loginReq){if (loginReq.UserName == 'admin' && loginReq.Pwd = "12345"){//数据库获取加载信息 var data=return new LoginResult(true, data);}else return new LoginResult(false, null);}
record的作用?
登录示例
登录成功则返回当前服务器的进程信息
后端页面
//public record LoginRequest(string UserName, string Pwd);
//public record ProcessInfo(long Id,string UserName,long WorkSet);
//public record LoginResponse(bool Ok,string UserName,long WorkSet);
前端页面
相关文章:
RESTful的优点
优点 1.通过url对资源定位,语义清晰; 2.通过HTTP谓词表示不同的操作,接口自描述; 3.可以对GET、PUT、DELETE请求重试(幂等的); 4.可以对GET请求做缓存; 5.通过HTTP状态码反映服务器端…...
网络检测与监控
1.IP sla 服务等级质量检测,思科私有,提供商与用户之间的协议 可以对带宽、延迟、丢包率、网络抖动进行检测 (1)针对icmp进行检测: r1(config)#ip sla 1 r1(config-ip-sla)#icmp-echo 12.12.12.2 source-ip 12.12…...
基于架构的软件开发方法_1.概述和相关概念及术语
1.体系结构的设计方法概述 基于体系结构的软件设计(Architecture-Based Software Design,ABSD)方法。ABSD方法是由体系结构驱动的,即指由构成体系结构的商业、质量和功能需求的组合驱动的。 使用ABSD方法,设计活动可以…...
读所罗门的密码笔记07_共生思想(中)
1. 在人工智能系统中建立信任 1.1. 人类的大脑容易被个人倾向、干扰因素和确认偏误所影响 1.2. 古莱说,然而,从不同的角度去思考事实、花更长时间来做决策的能力,可能会让人类拥有“密探”一般的智慧 1.3. 我们可以对决策进行批判性思考&a…...
目标检测——工业安全生产环境违规使用手机的识别
一、重要性及意义 首先,工业安全生产环境涉及到许多复杂的工艺和设备,这些设备和工艺往往需要高精度的操作和严格的监管。如果员工在生产过程中违规使用手机,不仅可能分散其注意力,降低工作效率,更可能因操作失误导致…...
Linux/Ubuntu/Debian 终端命令:设置文件/目录权限和组
更改文件权限: chmod filename:根据指定的权限更改文件的权限。 例如: chmod ux filename # 为文件所有者添加执行权限 递归更改目录权限: chmod -R <说明> 目录名称:递归更改目录及其内容的权限。 例如…...
QA测试开发工程师面试题满分问答3: python的深拷贝和浅拷贝问题
在 Python 中,深拷贝(deep copy)和浅拷贝(shallow copy)是用于创建对象副本的两种不同方式。 浅拷贝是创建一个新的对象,该对象与原始对象的内容相同(包括内部嵌套对象的引用)&…...
Spire.PDF for .NET【文档操作】演示:合并 PDF 文件并添加页码
搜索了这么多有关 PDF 合并的信息后,很容易发现,无论您在线合并 PDF 文件还是使用 C#/VB.NET 来实现此任务,您都无法逃避对 PDF 文件安全等一些重要问题的担忧,因此需要花费多少时间或者合并后的文件是否支持打印页码等等。不过&a…...
VMware使用PowerCLI 修改分布式虚拟交换机的默认上联接口为LAG
简介 创建VMware 分布式交换机vDS 并配置 LACP接口时,然后创建新的默认分布式端口组不会默认使用LACP的上联接口。这意味着当创建新的端口组时,不可避免地会导致没手动修改上联端口的问题,导致网络不通,因为它们无可用的上联端口…...
什么是EDM邮件推广营销?
电子邮件作为最古老的互联网沟通工具之一,凭借其无可比拟的直达性、个性化潜力与高投资回报率,始终占据着企业营销策略的核心地位。随着人工智能技术的革新应用,云衔科技以其前瞻视野与深厚技术底蕴,倾力打造了一站式智能EDM邮件营…...
NoSQL之 Redis配置
目录 关系数据库与非关系型数据库 关系型数据库: ●非关系型数据库 关系型数据库和非关系型数据库区别: (1)数据存储方式不同 (2)扩展方式不同 对事务性的支持不同 非关系型数据库产生背景 Redis简介…...
Android U user+root实现方案
背景 由于项目(MTK平台)上要实现userroot的版本,供特殊用户使用。Android T上的方案无效,经历了各种搜索查看资料,和bsp大佬一起通宵奋战,整出了方案。梳理记录下,有需要的同学可以参考。 Root…...
CSS3 Transform变形理解与应用
Transform:对元素进行变形; Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画。但只有两个关键贞。开始,结束。 Animation:对元素某个属…...
语音克隆技术浪潮:探索OpenAI Voice Engine的奇妙之旅
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
将Python程序打包为Windows安装包
本文使用创作助手。 如果你想将Python程序打包为Windows安装包,你可以使用NSIS(Nullsoft Scriptable Install System)工具。NSIS是一个免费的Windows安装包创建工具。 以下是使用NSIS将Python程序打包为Windows安装包的步骤: 首…...
一个基于大数据的派单管理系统
通常需要处理大量的订单数据,并确保这些数据能够在各个相关部门之间高效、准确地传递。这样的系统不仅有助于提高派单效率,还能优化资源配置,减少不必要的浪费。以下是一个包含所需元素的系统设计方案概述: 数据结构 订单号&…...
【单片机 5.3开关检测】
文章目录 前言一、5.3开关检测1.1没按键按下的1.2有按键按下的 二、改进1.改进 三、独立键盘3.1为什么要取反3.2 实用的按键 总结 前言 提示:这里可以添加本文要记录的大概内容: 课程需要: 提示:以下是本篇文章正文内容…...
每天五分钟计算机视觉:如何基于滑动窗口技术完成目标的检测?
汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…...
wpf ContextMenu
ContextMenu上下文菜单 ContextMenu 在 WPF 中是一个非常有用的控件,它提供了一个在用户执行特定操作(如右键点击)时显示的菜单。ContextMenu 可以附加到几乎所有的 WPF 控件上,使得当用户与这些控件互动时,能够提供一…...
增加网站搜索引擎排名的6个准则
怎样提高网站排名首页 在竞争激烈的网络世界中,网站的排名对于吸引流量和提升曝光至关重要。登上搜索引擎结果页面的首页,意味着更多的曝光和点击率。以下是一些方法,可以帮助您提高网站在搜索引擎中的排名,让其跻身首页…...
【数据库索引】【面试题】【SQL】什么时候不需要用索引?
在数据库查询优化中,索引是一种重要的工具,可以提高查询性能。然而,并不是所有的情况下都适合使用索引。 以下是一些情况下(收集整理)不建议使用索引: 更新频繁的列:索引会占用数据库资源,当列经常被更新时,索引可能会变得过时,导致查询性能下降。 小数值类型:对于…...
RISC-V/ARM mcu OpenOCD 调试架构解析
Risc-v/ARM mcu OpenOCD 调试架构解析 最近有使用到risc-v的单片机,所以了解了下risc-v单片机的编译与调试环境的搭建,面试时问到risc-v的调试可参看以下内容。 risc-v根据官方的推荐,调试器服务是选择OpenOCD,DopenOCD(开放片上…...
HackTheBox-Mist
整体思路 端口扫描->Pluck CMS组件文件读取漏洞->文件上传获取shell->创建指向exe的快捷方式来提权-> 信息收集&端口利用 namp -sSVC 10.10.11.17目标只开放了80端口,将mist.htb加入到hosts文件后,访问mist.htb Pluck CMS文件读取 在…...
游戏引擎中的声音系统
一、声音基础 1.1 音量 声音振幅的大小 压强p:由声音引起的与环境大气压的局部偏差 1.2 音调 1.3 音色 1.4 降噪 1.5 人的听觉范围 1.6 电子音乐 将自然界中连续的音乐转换成离散的信号记录到内存中 采样 - 量化 - 编码 香农定理:采样频率是信…...
【WPF应用29】WPF中的ComboBox控件详解与应用示例
在Windows Presentation Foundation(WPF)应用程序开发中,ComboBox控件是一个非常重要的基础控件,它提供了一个下拉列表,允许用户从预定义的选项中选择一个值。ComboBox控件结合了文本框和列表框的功能,既能…...
Unity UGUI之Text组件基础认识
Text组件用于在游戏中显示文本。 下面来细看下它的基本信息。 一、基本属性: 如上图所示,即为Text组件的一些基本属性,其中, Text:要显示的文本内容。Font:文本所使用的字体。Font Style(字体…...
LeetCode 2810.故障键盘:双端队列模拟
【LetMeFly】2810.故障键盘:双端队列模拟 力扣题目链接:https://leetcode.cn/problems/faulty-keyboard/ 你的笔记本键盘存在故障,每当你在上面输入字符 i 时,它会反转你所写的字符串。而输入其他字符则可以正常工作。 给你一个…...
ssm015基于java的健身房管理系统的设计与实现+vue
健身房管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本健身房管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间…...
【解决方案】荣耀系统Android8.0 system目录Read-only file system
本来以为直接把Charles证书改成系统证书格式,然后通过mt管理器root之后移动到系统证书目录就行了,结果访问baidu仍然显示网络错误,折腾一晚上。安装为用户证书,又与系统证书冲突。 手机型号:荣耀v10 EMUI:…...
【Web】记录Polar靶场<简单>难度题一遍过(全)
目录 swp 简单rce 蜜雪冰城吉警店 召唤神龙 seek flag jwt login iphone 浮生日记 $$ 爆破 XFF rce1 GET-POST 被黑掉的站 签到题 签到 session文件包含 Dont touch me robots php very nice ezupload cookie欺骗 upload 干正则 co…...
新乡手机网站建设哪家专业/google搜索引擎下载
也许没有相当于RDB的条件只存在于条件中.我怎样才能实现不存在或者存在等效于不存在?解决方法:这里是一个PHP实现public function getRecordsByInExpression($tableName, $providerCode, $fieldName, $values, $logicalOp self::IN_EXP){$queryExp [TableName >…...
贵阳建设工程招投标网站/太原seo网络优化招聘网
python据说功能强大,触角伸到各个领域,网上搜了一下其科学计算和工程计算能力也相当强,具备各种第三方包,除了性能软肋外,其他无可指摘,甚至可以同matlab等专业工具一较高下。 从网上找了一个使用遗传算法实…...
网址推荐你会感谢我的/网站关键词怎么优化排名
滑动窗口 无重复字符的最长字串:leetcode-3串联所有单词的字串:leetcode-30最大子序和:leetcode-53最小覆盖字串:leetcode-76加油站:leetcode-134重复的DNA序列:leetcode-187长度最小的子数组:l…...
湖南英文网站建设/seo推广排名重要吗
undefined:声明了变量,但是没有赋值undeclared:没有声明变量就直接使用 如上图,num 就是undefined,arr 则是 undeclared。...
网站建设网站制作价格/今日热点事件
我们再登录账号密码的时候,账号可以回显在屏幕上,但是对于比较隐私的项目例如密码最好是不要再屏幕上回显。就像我们再终端登录linux服务器的时候,输入信息的时候只显示用户名,而不显示登录密码。以下是Python代码对比:…...
遵义网站建设优化公司/互联网行业都有哪些工作
获得微秒级的时间 收藏 Win 下建议如下方式: http://www.vckbase.com/document/viewdoc/?id1301 VC中基于 Windows 的精确定时 中国科学院光电技术研究所 游志宇 在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间&#x…...