当前位置: 首页 > news >正文

杂谈|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应用开发提供有力的支持。

相关文章:

杂谈|RestFul和http的区别

前言 今天和我一组的小伙伴,在对接一个接口时,客户将DELETED请求设置了body参数,导致一个功能反复搞了半天,今天就来说下这两者的区别 1.HTTP概述 HTTP(HyperText Transfer Protocol)是一种用于从WWW&…...

Nginx的Sub模块

Nginx 是一款高性能的 Web 服务器和反向代理服务器,其灵活的模块化设计使其成为许多开发者和运维人员的首选。其中,Sub 模块作为 Nginx 的一部分,提供了强大的字符串替换和正则匹配功能,本文将深入探讨 Sub 模块的用途、示例以及使用中需要注意的事项。 1. Sub 模块的用途…...

使用大模型做应用的一些问题

使用了一段时间的大模型应用,遇到一些问题,分享给大家。 使用大模型的基本情况 使用了下面三种大模型: 百度 ERNIE-3 kimi 大模型 chatGPT3.5 使用的大模型应用架构: langchainlangchain RAGlangchain Agentvector 数据…...

2024 前端面试每日1小时

三日 1. 如何理解Vue的模板编译原理 Vue的模板编译实际就是将模板字符串通过解析、优化和代码生成等步骤转换为渲染函数的过程。这个过程中,AST扮演了非常重要的角色,它用树形结构描述了模板的内容和结构,是编译过程的核心数据结构&#xff…...

2024.05.22学习记录

1、面经复习: Vue组件通讯、vuex、js严格模式、options请求、vue3 Setup 语法糖、React hook 2、代码随想录刷题:动态规划 3、rosebush组件库 完成Alert和Alert测试 Menu组件初步开发...

Redis与数据库同步指南:订阅Binlog实现数据一致性

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是29岁的小米,一名积极活泼、热爱分享技术的开发者。今天,我们来聊聊分布式系统中的一个重要话题——分布式一致性,特别是数据库和R…...

Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC

个人博客:Spring MVCmybatis 项目入门:旅游网(二)dispatcher与controller与Spring MVC | iwtss blog 先看这个! 这是18年的文章,回收站里恢复的,现阶段看基本是没有参考意义的,技术老旧脱离时代…...

深入了解数据库与Java数据类型映射

在数据库开发和Java编程中,理解不同数据类型之间的映射关系对于开发高效且可靠的应用程序至关重要。数据库和Java都有各自的一套数据类型系统,能够正确地映射这些数据类型有助于避免数据丢失、性能问题以及其他潜在的错误。本文将详细探讨常见的数据库数…...

深刻解析 volatile 关键字和线程本地存储ThreadLocal

1.volatile关键字在Java多线程编程中的重要性 在多线程编程中,volatile关键字扮演着至关重要的角色,它确保了变量在多个线程间的可见性,并且能防止指令重排序,从而达到线程安全的目的。 1.1 保证多线程环境下变量的可见性 在Ja…...

羧甲基纤维素钠(CMC-Na)市场规模不断增长 我国生产企业众多

羧甲基纤维素钠(CMC-Na)市场规模不断增长 我国生产企业众多 羧甲基纤维素钠(CMC-Na)又称CMC-钠,化学式为[C6H7O2(OH)2OCH2COONa]n,是一种离子型纤维素醚。CMC-Na外观呈白色颗粒状或纤…...

网红郭有才是怎么火起来的

网红郭有才的爆火主要归因于以下几个因素: 独特的个人魅力与风格:郭有才以其地道的乡土气息和个人的朴实无华赢得了观众的喜爱。他的视频内容展现了真实且接地气的生活场景,给人以亲切感。同时,他的幽默感也是吸引观众的一个重要因…...

小米8SE刷root(面具)

首先准备好一根数据线,一部小米8SE手机,和一台电脑 接下来需要的软件我会给出链接和使用方法,以及分享我遇到的困难和解决方案 下面操作不会的,可以参考这个博主的教程,我也是跟着这个教程刷好的 第一步解锁BL 开启开…...

如果创办Google

本文是一篇演讲稿,来自于《黑客与画家》一书的作者保罗*格雷厄姆,被称为硅谷创业之父。这是他为14至15岁的孩子们做的一次演讲,内容是关于如果他们将来想创立一家创业公司,现在应该做些什么。很多学校认为应该向学生们传授一些有关…...

邦芒职场:揭秘影响你职场收入的九大细节

在职场这个大舞台上,微小的细节往往能决定你收入的多少。以下九大细节,是你职场成功的关键,不容忽视。 1. 形象塑造 在这个注重第一印象的时代,良好的形象是你的第一张名片。精致的妆容、得体的着装,不仅能为你加分&a…...

Petalinux 制作ZYNQ镜像文件流程

1概述 在Zynq-7000 SoC中搭建运行Linux,嵌入式软件栈。 处理器系统引导是一个分两个阶段的过程。第一个阶段是一个内部 BootROM,它存储 stage-0 的引导代码。BootROM 在 CPU 0 上执行,CPU 1 执行等待事件(WFE)指令。…...

99%的人都不知道,微信才是真正的学习神器

微信,作为一款全球最受欢迎的社交应用之一,除了聊天、朋友圈、小程序等功能外,还有许多隐藏的学习功能,今天小编就给大家分享10个微信隐藏的学习功能,助您轻松成为学霸。 1、微信笔记 用过代办清单软件的朋友都知道&…...

加速模型训练 GPU cudnn

GPU的使用 在定义模型时,如果没有特定的GPU设置,会使用 torch.nn.DataParallel 将模型并行化,充分利用多GPU的性能,这在加速训练上有显著影响。 model torch.nn.DataParallel(model).cuda() cudnn 的配置: cudnn.…...

《python编程从入门到实践》day40

# 昨日知识点回顾 编辑条目及创建用户账户 暂没能解决bug: The view learning_logs.views.edit_entry didnt return an HttpResponse object. It returned None instead.# 今日知识点学习 19.2.5 注销 提供让用户注销的途径 1.在base.html中添加注销链接 …...

IO多路复用学习笔记

参考资料: 视频1 视频2(本人B站也有发布) 视频3 参考笔记 参考博客...

Ubuntu设置中文输入法教程

在Ubuntu中设置中文输入法非常简单,只需按照以下步骤操作即可。 打开“设置”菜单。在Ubuntu的左上角点击“活动”按钮,然后在弹出的菜单中选择“设置”图标。 进入“区域和语言”设置。在设置菜单中,找到并点击“区域和语言”选项。 添加中…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...