了解 HTTP 请求的五个关键要素

一个成功的 HTTP 请求不仅仅意味着简单地发送一个请求并接收到响应。事实上,每个 HTTP 请求都需要具备五大要点,这些要点确保了请求的正确性、可靠性和用户体验。在本文中,我们将探讨这五大要点,即发送适当的请求、显示加载状态、处理错误、请求可取消以及验证接收到的数据。通过深入了解这些要点,我们可以更好地理解 HTTP 请求的本质,并构建出更健壮、高效的网络项目。

一、请求(Request

请求,或者说是 HTTP 请求,是向服务器发送的一个动作,目的是获取某些信息或者发送一些信息。这包括服务器的 URL、请求头和请求体。大部分将要解释的内容都是在请求某些信息时很重要的,但也可以在发送信息时应用。

二、加载(Loading

为用户显示加载信息是请求的一个重要步骤,因为我们永远不知道网络会发生什么,也许连接很慢,也许服务器因为众多请求而变慢。

显示一个加载器或者一个文本指示请求仍在进行中是一个额外的步骤,可以使你的项目看起来更专业,更用户友好,而不是认为每个人都有快速的互联网连接。

你可以在你最喜欢的浏览器中,如 Firefox 或 Google Chrome 的开发者控制台中模拟减慢(3G网络、2G网络等)的请求。

三、错误(Error

网络中会发生各种各样的事情,我们无法控制除了我们代码内部发生的事情之外的一切。

网络可能会暂时关闭,或者用户已经激活了飞行模式,或者服务器已经停止了一段时间。我们永远不知道可能会出现什么样的问题,或者什么时候会发生,但我们知道可能会出现一些问题,我们必须考虑到这一点。

在代码中考虑到这些问题是一个好的实践,特别是在 JavaScript 中,因为发送请求通常涉及使用 Promise,而 Promise 可能处于被拒绝的状态。

你也可以在你的浏览器中模拟离线连接,在开发者控制台中进行。

四、可取消(Cancelable

如果你计划从远程 API 为用户提供数据,则至少提供一种取消这些请求的方法。

这是任何项目中的良好实践和附加用户体验,因为从远程服务器获取大量负载可能对使用数据计划的用户来说是昂贵的,并且选择是向你的用户展示你正在考虑每个人,即使是那些无法承担大量数据传输的人的好方法。

使用 JavaScript 和 Web API Fetch,你可以使用信号以及 Abort Controller 来提供取消请求的方法。

五、验证(Validation

最后,你已发送请求,一切都按计划进行,并收到成功的响应。或者有可能失败?

你如何确保服务器不会在一天、一周或一年内更改其响应?你的项目可能会运行一段时间,但如果有人决定发送一个带有属性而不是常见的数组的对象,你可能会遇到麻烦,因为你将尝试迭代一个对象而不是一个数组,这在 JavaScript 中是不可能的。

数据验证是一个重要的步骤,在某些情况下可能是强制性的,因为即使你今天知道自己在做什么,并且是前端和后端项目的唯一开发人员,但你在一年内可能不是一个人在开发这个项目,可能会有其它同事加入项目的开发。

如果你从长假回来,API 已更改,至少通过数据验证,你知道这是你考虑过的情况,你的项目不会突然崩溃(你甚至可能会获得更好的错误,这将使你更快地解决此错误而不需要数据验证)。

此外,通过数据验证,你可以依赖强类型的语言(如 TypeScript)来确保一旦解析和验证了此数据,你可以百分之百地确定可以迭代它,而不是担心它可能在不久的将来发生变化。

这是一个在 React 中的初学者项目示例:

可以看到,没有加载状态、可取消的请求、错误处理或数据验证。下面是添加了这些功能后的代码:

当然,没有应用样式,所以看起来不是很方便,但至少你有了一个想法。

我们添加了一种取消请求的方式,一个加载指示来向用户保证,一个显示任何错误的机制,以及一个基本的数据验证机制,以确保我们获得的数据没有被损坏或更改。

要点总结

我们看到,为了构建可靠的项目,每当我们向服务器发出请求时,必须遵循 5 大要点:

  • 发送适当的请求
  • 显示加载状态
  • 如果有任何错误,则显示错误
  • 使请求可取消
  • 验证我们收到的数据如果你能够遵循这些步骤,你将构建高度可靠的项目,这些概念不仅适用于 JavaScript 和 React,而且可以应用于几乎任何语言或任何框架和库,只要你遵循这些步骤。

使用工具进行接口管理

在项目开发或者测试的过程中,API 的校验是必要的。项目中具备的功能如果只是用手去“点测”是不实际的,因为一个项目几百上千条接口,花费的时间过于庞大。 那么,如何简化这个过程,使得工作效率更高呢?可以试试 Apifox,一个强大而易于使用的 API 管理平台。

Apifox 提供简洁直观的界面,帮助你发送适当的请求,并显示加载状态。同时,当出现错误时,Apifox 能够快速捕捉并显示错误信息,让你更快地定位和解决问题。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

明日周刊-第2期

三月份的第3周,第2期如期而至。大家希望看到什么内容也可以在评论区互动。 第2期-明日周刊 1. 一周热点1.1 国内新闻1.2 国际新闻1.3 科技新闻1.4 社会新闻 2. 资源分享3. 言论4. 歌曲推荐 1. 一周热点 1.1 国内新闻 中国成功发射遥感三十五号05组卫星 本周&#…

微信小程序-微信支付

微信支付介绍 梳理一下流程: 1、用户点击下单,小程序向商户系统(我们的服务器)发起请求,服务器生成一个唯一订单号给小程序。 2、小程序向服务器发起微信支付请求,服务器调用微信下单接口,微信…

从排序算法的艺术看C语言qsort函数的魅力:一场数据的时空穿越

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 目录 一 、回调函数 二、qsort函数 1.qsort函数排序整型数据 2.qsort函数排序结构数据 一 、回调函数 何为回调函数&#xff1…

STL容器之list类

文章目录 STL容器之list类1、list的介绍2、list的使用2.1、list的常见构造2.2、list的iterator的使用2.3、list空间增长问题2.4、list的增删查改2.5、list迭代器失效问题 3、list的模拟实现(含反向迭代器) STL容器之list类 1、list的介绍 list是序列容器…

五、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(1)

For instance - lets say youre a writer.You have a bunch of tasks on your plate for the day, but all of a sudden you get a really good idea for an essay. You should probably start writing now or youll lose your train of thought.What should you do? 举例来说…

rust引用本地crate

我们可以动态引用crate,build时从crate.io下载,但可能因无法下载导致build失败。首次正常引用三方crate,build时自动下载的crate源码,我们将其拷贝到固定目录中; build后可在RustRover中按住Ctrl键,在crat…

【Linux】环境基础开发工具使用

目录 Linux软件管理器 yum 1.什么是软件包 2.查看软件包 3安装与卸载 vim-Linux编辑器 1.vim基础概念 2.vim的基础操作 命令模式基本操作 底层模式基本操作 3、其它模式 Linux编译器 gcc/g 1.如何进行编译 2.编译的四个过程 预处理(-E) 编译(-S) 汇编(-c) 链接…

代码算法训练营day10 | 232.用栈实现队列、225. 用队列实现栈

day10: 232.用栈实现队列225. 用队列实现栈 232.用栈实现队列 题目链接 状态: 文档:programmercarl.com 思路: 用栈实现队列。要先明白两者的区别。 栈:单开门,先进后出,只有一端能进出。 队列:…

【论文笔记合集】LSTNet之循环跳跃连接

本文作者: slience_me LSTNet 循环跳跃连接 文章仅作为个人笔记 论文链接 文章原文 LSTNet [25] introduces convolutional neural networks (CNNs) with recurrent-skip connections to capture the short-term and long-term temporal patterns. LSTNet [25]引入…

1、鸿蒙学习-为应用/服务进行签名

针对应用/服务的签名,DevEco Studio为开发者提供了自动签名方案,帮助开发者高效进行调试。也可选择手动方式对应用/服务进行签名,如果使用了需要ACL的权限,需采用手动方式进行签名。 自动签名 说明 使用自动签名前,请…

简单!实用!易懂!:Java如何批量导出微信收藏夹链接-->转换成Markdown/txt

文章目录 前言参考方案方案1:Python方案2:Python 我的方案手动前置操作代码处理 前言 不知道是否有很多小伙伴跟我一样,有个问题非常愁,对于收藏党来说,收藏了学会了!然后导致微信收藏夹的东西越来越多了&…

2024年5家香港服务器推荐,性价比top5

​​香港服务器是中小企业建站、外贸建站、个人博客建站等领域非常受欢迎的服务器,2024年有哪些云厂商的香港服务器是比较有性价比的?这里根据小编在IT领域多年服务器使用经验,给大家罗列5家心目中最具性价比的香港服务器厂商。 这五家香港服…

Wireshark抓包工具的使用

提示:本文为学习记录,若有错误,请联系作者,谦虚受教 文章目录 前言一、下载二、首页三、使用1.读入数据2.分析数据3.筛选IP4.保存数据 四、过滤器表达式五、TCP总结 前言 低头做事,抬头看路。 一、下载 下载路径wire…

Java面试题总结200道(三)

51、什么是 Spring IOC 容器 Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它 们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的 组件。容器通过读取提供的配置元数据来接收对象进行实例化&#xff0…

【vue video.js】The element or ID supplied is not valid. (videojs) element Ui

问题:使用video.js做了一个弹窗显示视频,效果如下 但是发现弹窗再次打开,视频播放失败,报错The element or ID supplied is not valid 原因是videojs找不到需要初始化的视频id,在关闭弹窗的时候需要重置video.js&…

小迪安全42WEB攻防-通用漏洞文件包含LFIRFI伪协议

#知识点: 1、解释什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识: 1、本地包含LFI&远程包含RF1-区别 一个只能包含本地,一个可以远程加载 具体形成原因由代码和环境配置文件决定…

便利店小程序有哪些功能

​便利店小程序为附近的住户提供小程序在线购物的服务。用户只需要打开小程序,就可以购买需要的商品,可以选择自取或者配送。整个过程非常简单快速。下面具体介绍便利店小程序的功能。 1. **商品展示**:展示便利店的商品信息,包括…

芯片顶级盛会HotChip历年-未来芯片论坛及资料全集下载

提示:下载链接在文章最后。 Hotchips是全球芯片行业影响力最大的会议。 Hot Chips是一个技术会议,聚焦于半导体和微处理器的设计与创新。以下是一些关于Hot Chips的信息和相关链接: Hot Chips会议官方网站:https://www.hotchips…

Prometheus 基于 Consul 实现服务自动发现注册

文章目录 一、概述二、docker-compose 部署 Prometheus1)部署 docker2)部署 docker-compose3)配置 prometheus.yml4)配置 rules.yml5)配置 alertmanager.yml6)编排 docker-compose yaml 文件7)开…

【Windows Defender 排除指定 文件夹、文件夹以提升性能】

使用webStorm时候提醒排出程序和目录提升性能, 于是我就把我的代码目录和常用程序全部排出, 不过不知道能不能提升多少性能, 先加上再说 一.使用UI配置排出项 隐私与安全性安全中心 病毒与威胁防护 添加或删除排出项 配置 二.使用命令配置 使用 PowerShell开启自动排除列表…