杂谈|RestFul和http的区别

前言

        今天和我一组的小伙伴,在对接一个接口时,客户将DELETED请求设置了body参数,导致一个功能反复搞了半天,今天就来说下这两者的区别

1.HTTP概述

        HTTP(HyperText Transfer Protocol)是一种用于从WWW(万维网)服务器传输超文本到本地浏览器的传输协议。它使得浏览器可以更加高效地工作,同时减少网络传输量。HTTP采用了请求/响应模型,客户端向服务器发送一个请求,服务器返回相应的响应。这种通信过程包括以下几个关键环节:

  1. 请求消息(Request Message):由请求行、请求头、空行和消息体组成。请求行包括HTTP方法、URL和HTTP版本。
  2. 响应消息(Response Message):由状态行、响应头、空行和响应体组成。状态行包括HTTP版本、状态码和原因短语。

常见的HTTP方法包括:

  • GET:用于请求资源
  • POST:用于提交数据
  • PUT:用于更新资源
  • DELETE:用于删除资源

        HTTP是无状态的协议,即每个请求都是独立的,服务器不会保存任何请求的状态信息。

2. RESTful概述

        RESTful(Representational State Transfer)是一种软件架构风格,主要用于设计网络应用的API。它基于以下几个原则:

  1. 资源(Resources):RESTful以资源为中心,资源通过URI(统一资源标识符)进行标识。
  2. 统一接口(Uniform Interface):RESTful API通过一组标准的HTTP方法(GET、POST、PUT、DELETE)对资源进行操作。
  3. 无状态(Stateless):每个请求都包含了处理该请求所需的全部信息,服务器不会在请求之间保存任何状态。
  4. 缓存(Cacheable):响应应该明确标记为可缓存或不可缓存,以提高客户端的效率。

        RESTful设计风格使得API更具一致性和可维护性,同时利用HTTP协议的标准特性来简化网络应用的开发。

3.HTTP与RESTful的主要区别
  • URL表达形式不同

    • HTTP接口的URL表达形式可以不遵循任何标准格式。
    • RESTful调用的URL必须遵循REST架构风格的规范,通常包括资源路径。
  • 请求方法不同

    • HTTP接口调用可以使用GET、POST、PUT、DELETE等HTTP请求方法。
    • RESTful调用严格遵循标准的HTTP方法,并且这些方法具有特定的语义。
  • 数据传输格式不同

    • HTTP接口调用可以使用任意数据格式,如form、json、xml等。
    • RESTful调用通常使用JSON或XML数据格式进行数据传输,强调数据的自描述性。
  • 资源定义不同

    • HTTP接口调用不一定需要资源的具体定义。
    • RESTful调用要求在URL中明确定义资源,每个资源都有一个唯一的标识符URI。
4.详细对比分析
4.1请求方法

        HTTP接口调用可以使用各种HTTP方法,而RESTful严格限定了方法的使用场景。例如,GET方法仅用于获取资源,POST方法用于创建资源,PUT方法用于更新资源,DELETE方法用于删除资源。这种规范化的设计提高了API的清晰度和一致性。

        需要特别指出的是,在标准的请求中,GET和DELETE方法是不能往body里面传参数的。这是因为GET方法主要用于请求资源,而不是发送数据,DELETE方法用于删除资源,因此也不需要在body中传递参数。

4.2 数据传输格式

        HTTP接口调用的数据格式可以是form、json、xml等多种形式,而RESTful更倾向于使用JSON或XML。这种统一的数据格式使得客户端和服务器之间的数据交换更为一致和高效。

4.3 资源定义

        HTTP接口调用不依赖于具体的资源定义,而RESTful强调资源和API请求的对应关系。每个资源在RESTful API中都有一个唯一的URI,通过标准的HTTP方法对这些资源进行操作,使得API设计更加直观和结构化。

5. 其他特点
5.1 资源标准化

        RESTful是基于HTTP协议的,HTTP协议定义的URL必须符合URI(Uniform Resource Identifier)标准。URI由协议、主机、资源路径、查询字符串和片段组成。因此,RESTful要求每个资源都有一个唯一的标识符URI,这使得资源的管理更加标准化和系统化。

5.2 无状态

        因为HTTP是一种无状态协议,所以RESTful也是无状态的。即服务器不会保存任何客户端请求的历史信息。每个请求都是独立的,服务器不会在请求之间保留会话状态。这种无状态性简化了服务器的设计,同时也增强了系统的可扩展性和可靠性。

5.3 缓存机制

        由于RESTful是基于HTTP标准定义的,因此具有HTTP缓存机制。客户端可以在收到数据后将其存储在本地缓存中,在下一次请求相同资源时可以减少网络传输,提高性能。这种缓存机制可以显著提高应用的响应速度和用户体验。

5.4 GET和DELETE请求的限制

        在标准的HTTP请求中,GET和DELETE方法是不能往body里面传参数的。GET方法主要用于请求资源,而不是发送数据,DELETE方法用于删除资源,因此这两种方法都不需要在body中传递参数。GET请求的参数通常附加在URL中,而DELETE请求通常只需要URI来标识需要删除的资源。那么有标准就有魔改,有些依赖包就会提供,但是这是一个不好的习惯,还是建议大家你不要这么玩

6. 总结

        RESTful是HTTP接口调用的一种特殊实现,遵循REST架构风格的规范,能够提供更加标准化、统一化、可读性和易用性的API设计。与传统的HTTP接口调用相比,RESTful调用具有更加清晰明了、易于理解和维护的API设计,扩展性和灵活性也更强。在现代Web应用开发中,理解和使用RESTful架构风格能够大大提高开发效率和应用的可维护性。

        通过本文的介绍,希望读者能够清楚地理解HTTP和RESTful的基本概念及其主要区别,为今后的Web应用开发提供有力的支持。

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

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

相关文章

操作系统5_虚拟存储器

操作系统5_虚拟存储器 文章目录 操作系统5_虚拟存储器1. 虚拟存储器1.1 虚拟存储器的引入1.2 虚拟存储器的概念1.3 虚拟存储器的特征1.4 虚拟存储器的实现方法2. 请求分页存储管理2.1 请求分页中的硬件支持2.2 内存分配策略和分配算法2.3 调页策略2.4 页面置换算法2.4.1 最佳置…

docker部署相关命令

docker部署相关操作 查看docker基本信息 docker info查看docker中所有镜像 docker images查看docker中所有容器 docker ps # 已启动的容器 docker ps -a # 所有容器 docker ps -a -s # 查看所有容器和大小从镜像创建容器并运行 docker run -it 镜像名 # 简单命令 dock…

c++——模板初始识

1.函数模板 我们经常用到Swap函数交换两个值。由于需要交换的数据的类型不同,我们就需要写不同参数类型的同名函数,也就是函数重载: 然而这三个函数的逻辑是一样的,写这么多有些多此一举,通过函数模版可以写一个通用…

LabVIEW机器视觉在自动化生产线中的应用是什么?

LabVIEW机器视觉技术在自动化生产线中有广泛的应用,主要包括以下几个方面: 质量控制与检测: 缺陷检测:使用机器视觉系统实时检测产品表面的缺陷,如划痕、裂纹、污渍等,确保产品质量。尺寸测量:通…

【量算分析工具-水平面积】GeoServer改造Springboot番外系列五

【量算分析工具-概述】GeoServer改造Springboot番外系列三-CSDN博客 【量算分析工具-水平距离】GeoServer改造Springboot番外系列四-CSDN博客 【量算分析工具-水平面积】GeoServer改造Springboot番外系列五-CSDN博客 【量算分析工具-方位角】GeoServer改造Springboot番外系列…

GoldenEye-v1(vulnhub)靶机练习实践报告

GoldenEye-v1****靶机练习实践报告 一、安装靶机 靶机是.ova文件,需要用VirtualBox打开,但我习惯于使用VMWare,因此修改靶机文件,使其适用于VMWare打开。 解压ova文件,得到.ovf文件和.vmdk文件。 用记事本打开.ovf文件并修改“…

Element Plus 快速入门

Element Plus 快速入门 Element Plus 是一个基于 Vue 3.0 的桌面端组件库,它包含了丰富的组件和实用的工具,可以帮助开发者快速构建 Vue 3.0 应用。 安装 首先,我们需要在项目中安装 Element Plus。在终端中运行以下命令: npm…

gmssl vs2010编译

1、虚拟机win10 x64,离线安装vs2010和2010sp1补丁; 2、安装ActivePerl_v5.28.1.0000和nasm-2.16.03-installer-x64均是默认完整安装; nasm官网下载: Index of /pub/nasm/releasebuilds/2.16.03/win64https://www.nasm.us/pub/nas…

Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装

Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装 目录 Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装 一、简单介绍 二、获取设备的序列号 (Serial Number) 实现原理 1、Android 2、 Unity 三、注意…

九型人格介绍

协调型人格 作为“好好先生”的何炅是典型的协调型人格者,他总是将大家的利益放在第一位,很少顾及自己的感受;当他周围的人产生冲突时,他总是力图找到一个有利于双方的解决方案;本着息事宁人的态度,他对利益的追逐和向往很低&…

gem5模拟器入门(一)——环境配置

什么是gem5? gem5是一个模块化的离散事件驱动的计算机系统模拟器平台。这意味着: GEM5 的组件可以轻松重新排列、参数化、扩展或更换,以满足您的需求。它将时间的流逝模拟为一系列离散事件。它的预期用途是以各种方式模拟一个或多个计算机系…

掌握并发控制的“急刹车”艺术!

当一个线程运行时,另外一个线程可以直接通过interrupt方法对其设置中断标志位。 判断线程是否中断的2个方法: // 判断目标线程是否被中断,不会清除中断标记。 Thread.currentThread().isInterrupted() // 判断目标线程是否被中断,…

【职业教育培训机构小程序】教培机构“招生+教学”有效解决方案

教培机构“招生教学”有效解决方案在数字化转型的浪潮中,职业教育培训机构面临着提升教学效率、拓宽招生渠道、增强学员互动等多重挑战。小程序作为一种新兴的移动应用平台,为解决这些痛点提供了有效途径。 一、职业教育培训机构小程序的核心功能 &…

Laravel 图片添加水印

和这个配合使用 Laravel ThinkPhP 海报生成_laravel 制作海报-CSDN博客 代码 //水印 $x_length $imageInfo[0]; $y_length $imageInfo[1];$color imagecolorallocatealpha($posterImage, 255, 255, 255, 70); // 增加透明度参数alpha$font_size 40; //字体大小 $angle …

HTML静态网页成品作业(HTML+CSS)——家乡沅陵介绍网页(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

条款9:利用destructors避免泄露资源

对指针说拜拜。承认吧,你从未真正喜欢过它,对不? 好,你不需要对所有指针说拜拜,但是你真的得对那些用来操控局部性资源(local resources)的指针说莎唷娜拉了。 举个例子,你正在为“小动物收养…

Flutter 中的 CircularProgressIndicator 小部件:全面指南

Flutter 中的 CircularProgressIndicator 小部件:全面指南 在 Flutter 应用开发中,加载指示器是提供用户反馈的重要组成部分,特别是在需要等待数据加载的场景中。CircularProgressIndicator 是 Flutter 提供的一个表现圆形加载动画的小部件。…

Python进阶:探索Python标准库和第三方库

在前两篇文章中,我们介绍了Python的基本语法和面向对象编程。在这篇文章中,我们将深入探索Python的标准库以及一些常用的第三方库。Python的强大之处不仅在于其简洁的语法,还在于丰富的库生态系统。通过使用这些库,你可以更高效地完成各种任务,从文件操作到数据分析、网络…

godot4.2 + GDextension c++在 vs code 中断点调试配置

游戏开发中如果做不到自己编写的代码做断点调试,无不是瞎子摸象,特别是C这么底层的语言。这2天开始在VS studio中折腾,一直折腾不出结果,几次想要放弃GODOT。最终今天在VS code中搞定了这断点调试C代码。 在上一篇文章我已经做好了…

React hooks - useContext

useContext 用法使用以非侵入的方式使用 Context使用 useContext 重构 useReducer 案例 用法 实现多层组件的数据传递 在全局创建 Context 对象在父组件中使用 Context.Provider 提供数据在子组件中使用 useContext 使用数据 import React, { useContext } from react // 全局…