当前位置: 首页 > 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的左上角点击“活动”按钮,然后在弹出的菜单中选择“设置”图标。 进入“区域和语言”设置。在设置菜单中,找到并点击“区域和语言”选项。 添加中…...

18年产品经理生涯精华:从交付到规划,项目管理、解决方案、业务理解深度解析!

本期访谈只有1位老师,大海老师,18年工作经验,从干交付,到项目管理,再到资深技术专家、解决方案专家,目前做的更多的是业务规划、产品规划,是从一线实战走到真正的专家层面,老师分享的…...

深入解析DolphinScheduler API调用:从文档到实战

1. DolphinScheduler API调用入门指南 第一次接触DolphinScheduler的API时,我也是一头雾水。官方文档虽然全面,但对于新手来说信息量太大,不知道从哪里入手。经过几个项目的实战,我总结出了一套快速上手的方法。 DolphinScheduler…...

微信小程序端集成实践:打造手机上的国风绘画工具

微信小程序端集成实践:打造手机上的国风绘画工具 想不想随时随地,掏出手机就能创作一幅充满诗意的国风画作?以前这可能需要多年的绘画功底,但现在,借助AI的力量,每个人都能成为自己手机里的国风画师。今天…...

Llama-3.2V-11B-cot实战教程:集成Whisper实现音视频+图像联合推理

Llama-3.2V-11B-cot实战教程:集成Whisper实现音视频图像联合推理 1. 项目概述与核心能力 Llama-3.2V-11B-cot是一个强大的视觉语言模型,它不仅能理解图像内容,还能进行系统性推理。这个模型基于LLaVA-CoT论文实现,特别适合需要结…...

cv_resnet18_ocr-detection保姆级教程:从安装到批量处理图片文字

cv_resnet18_ocr-detection保姆级教程:从安装到批量处理图片文字 1. 快速上手:5分钟搞定OCR文字检测 你是不是经常需要从图片里提取文字?比如整理扫描的文档、识别截图里的信息,或者处理一堆商品图片上的标签。手动打字太慢&…...

AgentCPM深度研报助手使用技巧:三个参数让报告更专业

AgentCPM深度研报助手使用技巧:三个参数让报告更专业 1. 为什么你的AI研报总像“流水账”?问题可能出在参数上 你用过AI写报告,结果是不是这样:内容看起来都对,但读起来总觉得“差点意思”?结构松散像拼凑…...

3 个高级思路,让你的 AI 绘画 / 视频从此充满想象力

前言 如今 AI 视频与绘画工具的画质越来越卷,清晰度、光影、细节几乎都已触达天花板。但真正能让人记住、能脱颖而出的作品,靠的从来不是画质,而是想象力。 当所有人都在追求 “大片感” 时,你只需要换一种思路 ——用创意打破平…...

杰理之关机DAC未进入高阻【篇】

memset(JL_ADDA, 0x0, sizeof(JL_ADDA_TypeDef)); SFR(JL_ADDA->DAA_CON2, 15, 1, 1); SFR(JL_ADDA->DAA_CON2, 5, 1, 1);...

思维重构:三月七小助手如何重新定义星穹铁道游戏体验

思维重构:三月七小助手如何重新定义星穹铁道游戏体验 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 在《崩坏:星穹铁道》的世界里&#xff0…...

SwartNinjaPIR:嵌入式高可靠PIR运动检测驱动库

1. SwartNinjaPIR 库概述:面向嵌入式系统的高可靠性 PIR 运动检测驱动设计SwartNinjaPIR 是一个专为 Arduino 及兼容平台(如 STM32、ESP32 等基于 Arduino Core 的 MCU)设计的轻量级、生产就绪型被动红外(Passive Infrared, PIR&a…...