杨中科 ASP.NETCore Rest

news2024/11/18 19:28:00

什么是Rest

RPC

1、Web API两种风格: 面向过程(RPC) 、面向REST (REST)

2、RPC:“控制器/操作方法“的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道,不关心HTTP谓词。通过QueryString请求报文体给服务器传递数据。状态码。比如/Persons/GetAll、/Persons/GetBvld?id=8./Persons/Update、/Persons/DeleteByld/8

REST

REST: 按照HTTP的语义来使用HTTP协议
1、URL用于资源的定位: /user/888、/user/888/orders)
2、HTTP谓词: GET、POST (新增) 、PUT (整体更新)DELETE、PATCH (局部更新) 等
3、什么是“幂等”,举例? DELETE(删除id=1的数据,多次删除都是一样的)、PUT、GET是幂等的POST不幂等(幂等:执行一次和执行多次的结果是一致的)
4、GET的响应可以被缓存
5、服务器端要通过状态码来反映资源获取的结果: 404、403(没有权限) 、201 (新增成功)

在这里插入图片描述
RPC:业务驱动,自然
REST: 要求开发人员对REST原则更了解、并且有更多的设计能力。

没有绝对的好与坏,根据业务需求选择适合自己的方式。

REST的优缺点

REST的优点

1、通过URL对资源定位,语义更清晰
2、通过HTTP谓词表示不同的操作,接口自描
3、可以对GET、PUT、DELETE请求进行重试
4、可以用GET请求做缓存
5、通过HTTP状态码反映服务器端的处理结果统一错误处理机制。
6、网关等可以分析请求处理结果

REST的缺点

1、真实系统中的资源非常复杂,很难清晰地进行资源的划分,对技术人员的业务和技术水平要求高。
2、不是所有的操作都能简单地对应到确定的HTTP谓词力
3、系统的进化可能会改变幂等性.
4、通过URL进行资源定位不符合中文用户的习惯
5、HTTP状态码个数有限。
6、有些环节会篡改非200响应码的响应报文
7、有的客户端不支持PUT、DELETE请求。

选择

1、REST是学术化的概念,仅供参考。为什么AWS、ES等比较RESTful。为什么阿里、腾讯等很多系统不RESTful?
2、根据公司情况,进行REST的选择和裁剪

Asp.NET Core Restful中如何传递参数

HTTP传递参数的三种方式

URL: 适合定位;长度限制
QueryString: 灵活,长度限制
请求报文体:灵活,长度不限制;不支持GET、Delete

三种方式的不同语义

URL: 资源定位
Querstring URL之外的额外数据
请求报文体: 供PUT、POST提供数据

实施指南

1、完全按照HTTP语义要求高
2、我的建议
1)对于保存、更新类的请求POST、PUT请求,把全部参数都放到请求报
文体中;
在这里插入图片描述

2) 对于DELETE请求,要传递的参数就是一个资源的id,因此把参数放到QueryString中即可

在这里插入图片描述

3) 对于GET请求,一般参数的内容都不会太长,因此统一通过QueryString传递参数就可以。对于极少数参数内容超过URL限制的请求由于GET、PUT请求都是幂等的,因此我们把请求改成通过PUT请求,然后通过报文体来传递参数。

Asp.NET Core如何返回错误码

状态码

1、REST:通过HTTP状态码返回服务器端的处理结果
2、问题

  1. HTTP状态码数量有限
  2. HTTP的状态码并不适合用来表示业务层面的错误码它是一个用来表示技术层面信息的状态码。新增用户的操作中,如果服务器端要求Json格式,客户端提交XML服务器返回400是没问题的。但是如果用户名格式错误或者用户名重复,存在200派和400派

400派观点

1、网关等可以监控HTTP状态码,如果接口频繁出现4xx1状态码,那么就说明客户端的代码不完善。
2、很多的系统都是按照HTTP状态码的不同含义进行设计的。如果失败了服务器端返回的状态码还是200的话这会违背软件设计的初衷。

200派观点

网络的问题归网络、业务的问题归业务。业务错误不应该和技术错误混在一起。把系统日志和业务日志区分开。

大企业也不统一
百度: 200派
谷歌: 400派
同一家公司企业微信和微信小程序: 200派
微信支付: 400派

个人观点:400派
1、对于数据库服务器连接失败、请求报文格式、服务器端异常等非业务错误,服务器端应该返回4xx、5xx等状态招
2、对于业务层面的错误,比如用户不存在,我们要使用4xx等HTTP状态码返回。同样在响应报文体中给出详细的错误信息,比如(“code”:3,message”:”用户不存在”}。
3、不仅要返回4xx的HTTP状态码,而且不要忘了通过响应报文体给出详细的错误信息。对于用户不存在,不仅要404,而且把响应报文体设置为(“code”:3,message”:”用户名已存在”],这样能区分出来是哪里的问题

ASP.NET Core中的Rest落地指南

实现建议

1、使用RPC风格: Users/AddNew、Users/GetAll、Users/DeleteByld。
2、对于可以缓存的操作,使用GET请求,对于幂等的更新操作,使用PUT请求,对于幂等的删除操作,使用DELETE请求,对于其他操作,统一使用POST请求。
3、参数: 保存、更新类的请求使用POST、PUT请求,把全部参数都放到请求报文体中;对于GET和DELETE请求,把参数放到QueryString中。推荐尽量使用URL做资源定位。
4、对于业务错误,服务器端返回合适的4XX状态码,不知道该选择哪个状态码就用400,同时,在报文体中通过code参数提供业务错误码以及错误消息。
5、如果请求的处理执行成功,服务器端返回值为200的Http状态码,如果有需要返回给客户端的数据,则服务器端把这些数据放到响应报文体

实现技术

1、控制器上[Route(“[controller]/[action]”)]
2、强制要求控制器中不同的操作用不同的方法名2
3、把[HttpGet]、[HttpPost]、[HttpDelete]、[HttpPut]等添加到对应的操作方法上。
注意: 如果控制器中存在一个没有添加[HttpGet].[HttpPost]等的public方法,Swagger就会报错,可以用ApiExplorerSettings(lgnoreApi = true)]

在这里插入图片描述
运行结果:
在这里插入图片描述
但是此时这个接口是可以直接调用的
在这里插入图片描述

将方法改为private
在这里插入图片描述
运行结果:
在这里插入图片描述
或者加上特性
在这里插入图片描述
运行结果:
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述
新建Person类
在这里插入图片描述
在这里插入图片描述
编写控制类
在这里插入图片描述
在这里插入图片描述
[HttpGet]
在这里插入图片描述
在这里插入图片描述
运行:
在这里插入图片描述
GetAll
在这里插入图片描述
getById
在这里插入图片描述

Post addNew在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1358956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Vulnhub靶机] DriftingBlues: 3

[Vulnhub靶机] DriftingBlues: 3靶机渗透思路及方法(个人分享) 靶机下载地址: https://download.vulnhub.com/driftingblues/driftingblues3.ova 靶机地址:192.168.67.19 攻击机地址:192.168.67.3 一、信息收集 1.…

离线Vscode 安装完成后 添加到右键菜单

复制下面代码,修改文件后缀名为:reg Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\VSCode] "Open with Code" "Icon""D:\\_Porgram_IT\\VsCode\\Code.exe"[HKEY_CLASSES_ROOT\*\shell\VSCode\comman…

GB∕T 33171-2016 城市交通运行状况评价规范

免登陆免积分下载地址 标准号:GB/T 33171-2016 中文标准名称:城市交通运行状况评价规范 英文标准名称:Specification for urban traffic performance evaluation 中国标准分类号(CCS)R85 国际标准分类号(…

告别复杂排版:Markdown语法指南

导语:Markdown作为一种轻量级的标记语言,以其简洁、易学的语法和强大的兼容性赢得了广泛的应用。本文将为您详细介绍Markdown的起源、基本语法及其在写作、博客、项目管理等场景的应用,带您领略这一简洁高效的文本编写工具的无穷魅力。 Mark…

打工人的2.0时代,只需要一副AR眼镜!

在数字化时代,工业行业中的生产效率如何得到提升?工业AR眼镜或许是一个不错的选择。不过工业AR眼镜真的可以协助员工处理工作中所遇到的各种问题吗?我们以制造业、医疗行业、船舶业的不同从业者为例: 假如你是一名制造业从业者&am…

Linux操作系统——进程控制(一) 进程创建和进程终止

进程创建 fork函数 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff…

数据分析-25-电商用户行为可视化分析

文章目录 0. 数据代码获取1. 项目介绍1.1 分析背景1.2 分析目的1.3 分析思路 2. 数据清洗2.1 加载必要的库2.2 读取数据2.3 统计缺失值2.4 处理数据a. 删除重复值b. 转换时间格式c. 提取日期和时间d. 转换数据类型 3. 分析内容3.1 用户活跃规律a. 日均pv与uvb. 日新增pv、uv趋势…

使用echarts制作柱状图并且下方带表格

实现效果: 调试地址: Examples - Apache ECharts 源码: option { title: { left: center, top: 0, text: 2022-05月 制造产量 达成情况(单位: 吨) (图1)\n\n集团目标产量: 106,675吨 集团实际产量: 2,636吨, textStyle:{ fontSize:20, colo…

React 入门 - 01

本章内容 目录 1. 简介1.1 初始 React1.2 React 相关技术点1.3 React.js vs Vue.js 2. React 开发环境准备2.1 关于脚手架工具2.2 create-react-app 构建一个 React 项目工程 1. 简介 1.1 初始 React React JS 是 Facebook 在 2013年5月开源的一款前端框架&#xff0c;其带来…

【UML建模】部署图(Deployment Diagram)

1.概述 部署图是一种结构图&#xff0c;用于描述软件系统在不同计算机硬件或设备上的部署和配置情况&#xff0c;以图形化的方式展示系统中组件、节点和连接之间的物理部署关系。 通过部署图&#xff0c;可以清晰地了解系统的物理结构和部署方式&#xff0c;包括系统组件和节…

小程序购物商城搭建开发分析

小程序商城作为现代商业模式的重要组成部分&#xff0c;具有巨大的发展潜力和商业价值。通过搭建一个功能完善、用户友好的小程序商城&#xff0c;您将能够提供便捷的购物体验&#xff0c;吸引更多的用户并实现商业增长。在进行小程序商城开发搭建之前&#xff0c;我们需要对项…

期末成绩这样发 老师省心 家长舒心

从很久以前开始就不能公布学生的分数了&#xff0c;很多学校都是只公布等级或者是大概的范围&#xff0c;那么如何合理告知家长成绩呢&#xff1f; 在家长群内发布公告&#xff0c;告知考试成绩已经出炉&#xff0c;如果家长需要了解具体分数&#xff0c;可以私信联系你。这样既…

网络割接为什么经常是半夜进行?

你们好&#xff0c;我的网工朋友。 假设你最近遇到了一个客户&#xff0c;客户有个新的园区刚刚建成&#xff0c;园区内包括建筑物若干&#xff0c;地理覆盖面也较广&#xff0c;园区建成后&#xff0c;肯定是需要一个专用网络的&#xff0c;用于承载公司的业务流量。 这时候&…

C语言编译器(C语言编程软件)完全攻略(第五部分:VS2015使用教程(使用VS2015编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 五、VS2015使用教程&#xff08;使用VS2015编写C语言程序&#xff09; 前面我们给出了一段完整的C语言代码&#xff0c;就是在显示器上输出“C语言中文网”&#xff0c;如下所示&#xff1a; #include <stdio.h> int main() {…

网页爬虫在数据分析中的作用,代理IP知识科普

在当今信息爆炸的时代&#xff0c;数据分析成为洞察信息和制定决策的不可或缺的工具。而网页爬虫&#xff0c;作为数据收集的得力助手&#xff0c;在数据分析中扮演着举足轻重的角色。今天&#xff0c;我们将一同探讨网页爬虫在数据分析中的作用。 1. 数据收集的先锋 网页爬虫…

【AWS系列】巧用 G5g 畅游Android流媒体游戏

序言 Amazon EC2 G5g 实例由 AWS Graviton2 处理器提供支持&#xff0c;并配备 NVIDIA T4G Tensor Core GPU&#xff0c;可为 Android 游戏流媒体等图形工作负载提供 Amazon EC2 中最佳的性价比。它们是第一个具有 GPU 加速功能的基于 Arm 的实例。 借助 G5g 实例&#xff0c;游…

OAI openair3代码结构整理

openair3代码框架结构 OAI&#xff08;OpenAirInterface&#xff09;是一个开源的5G网络软件平台&#xff0c;用于研究和开发5G网络技术。OpenAir3是OAI项目中的一个子项目&#xff0c;专注于5G核心网络的功能实现。 一、OpenAir3的代码主要包括以下几个部分&#xff1a; NAS…

如何使用loki查询日志中大于某一数字的值的日志

简介 loki是一款轻量级的日志收集中间件&#xff0c;比elk体系占用的内存更小&#xff0c;采用go语言开发&#xff0c;可以利用grafana来查询loki中存储的日志&#xff0c;loki存储日志只对提前预设的标签做索引&#xff0c;所以日志存储空间占用比elk小很多。 方法 loki只对…

Springboot整合RocketMQ 基本消息处理

目录 1. 同步消息 2. 异步消息 3. 单向消息 4. 延迟消息 5. 批量消息 6. 顺序消息 7. Tag过滤 导入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId></dependency> …

如何使用可视化管理工具DockerUI远程管理docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…