说下 RESTful API 使用的几个方法

2023-09-21 04:46:41

在最近的面试中,有问到说是说一下 RESTful API 的几个方法。

2023-09-20_10-45-51

这次面试问的问题还是比较多的,但是很多问题都是开放性问题,说心里话很长时间没有遇到这样比较好的沟通式面试了。

不少公司,以上来就做题目,这个让人很反感。

不过现在做题目的过程中,很多公司也都强调,我们不需要有完整的方案,不能运行也没有关系,主要是看思路吧。

小结

这个问题是完全的开放式问题,如果你的公司不完全按照 RESTful 的设计来的话,可能大概率会用到 POST, 和 GET。

因为上面的这个 2 个方法是最常用的。

我的回答是:这个和项目有关,有些项目在设计的时候为了不对方法进行过多约束,会全部要求使用 POST,哪怕是请求资源也是要求 POST 的。

那么如果使用 POST 我们如何进行删除,这个通常会在请求的 JSON 数据块中添加一个 Action 的字段,在这个字段我们告诉后端程序这次调用我们是干什么用了。

后续问题 PUT

在聊了上面的问题后,又问了一个后续的问题,PUT 和 PATCH 的区别是什么呀

这个还真有点把我给问到了。

我们很多项目真正用到 PUT 和 PATH 的情况不多,大部分情况都是 POST 给代劳了。

既然问到了,那么就有必要脑补下相关 RESTful API 用的几个方法了。

RESTful 的 5 个方法

在 RESTful 中,我们定义了 5 个方法。

  • GET:读取(Read)
  • POST:新建(Create)
  • PUT:更新(Update)
  • PATCH:更新(Update),通常是部分更新
  • DELETE:删除(Delete)

对获取资源,我们通常是 Get,就好像和网页进行交互的时候,我们访问一个网站,其实对应的很多时候都是 GET 请求,把我们需要的资源请求过来。

POST 通常用于和服务器进行交互,包括数据的添加,查询,修改等等,其实都可以用 POST 来完成的。

DELETE 方法,这个方法用于从服务器上删除数据用的。很多人以为从服务器上删除数据后,服务器会把数据真实进行删除。在一般的数据量不是非常大的应用系统中,我们的设计大部分是打上一个删除标记,数据不显示,但是数据还是真实存在的。

因此删除的方法是可以用 POST 来解决的,DELETE,在 API 的设计中就没有 POST 和 GET 常见了。

PUT 方法:PUT 方法就是更新了。这个地方应该定义为全对象更新,比如说用户对象,我们有很多属性,如果你使用 PUT 对象的话,就会把用户对象中的所有属性全部更新掉。

PATCH 方法:这个是 PUT 更新方法的进阶版本。假设你还是要更新一个用户数据,这个时候你不需要把所有的用户数据全部上传上来。比如说只更新用户的地址这一条记录,你可以直接只在方法中上传用户地址信息,服务器就只更新地址。

PUT 方法的实体无结构的,它直接把实体部分的数据替换到服务器的资源上。

而 PATCH 提供的实体则需要根据程序或其它协议的定义,解析后在服务器上执行,以此来修改服务器上的数据。也就是说,PATCH请求是会执行某个程序的,如果重复提交,程序可能执行多次,对服务器上的资源就可能造成额外的影响,这就可以解释它为什么是不幂等的了。

假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段。可你的编辑功能因为需求,在某个特别的页面里只能修改userName,这时候的更新怎么做?

人们通常(为徒省事)把一个包含了修改后userName的完整userInfo对象传给后端,做完整更新。但仔细想想,这种做法感觉有点二,而且真心浪费带宽,从现在的技术角度来说,带宽的问题通常考虑得不是非常多了。

更主要的是安全相关吧,本来你只需要更新一个用户名的,结果用 PUT 把整个用户对象的数上传上去了,等于在网络上传递了一些没有用的信息,这可能会存在一定的泄露风险。

于是patch诞生,只传一个userName到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。

put虽然也是更新资源,但要求前端提供的一定是一个完整的资源对象,理论上说,如果你用了put,但却没有提供完整的UserInfo,那么缺了的那些字段应该被清空。

实际情况

在实际上,我们更新很多时候也会使用 POST 方法。

例如上面说的只更新地址信息,实际上服务器的操作还是根据你上传的用户 ID 到数据库中查询用户信息,然后返回用户对象。

下一步就是对你上传的数据进行校验,对提交的更新字段进行更新,对没有提交的更新字段进行忽略。

所以 PUT 和 PATCH 是可以通过 POST 方法来实现的,而且很多情况我们也会用 POST 方法来实现。

说下 RESTful API 使用的几个方法 - 求职路上 - iSharkFly

更多推荐

成绩查询解决方案

老师如果想要使用PHP代码创建一个查询系统,可以按照以下步骤进行操作:建立数据库连接:首先,你需要使用PHP的数据库扩展(如MySQLi或PDO)来建立与数据库的连接。提供数据库的主机名、用户名、密码和数据库名称。创建数据库表:使用SQL语句创建用于存储查询数据的表。表中应该包含用于查询的字段,如ID、名称、描述等。创

ELK 企业级日志分析系统

----------------------ELK概述----------------------------------------1、ELK简介ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求

2023-09-18 monetdb-GDK和BAT-分析与思考

摘要:GDK作为moentdb的最核心的内核,可以看作是物理计划的执行,以及与磁盘IO直接进行交互.而物理列的数据结构,就是BAT.所以GDK也可以看作是对BAT的操作的模块,BAT是GDK操作的对象,是GDK的一部分.GDK和BAT的名字其实无关紧要,重要的是这些模块所承载的功能.GDK:monetdb的最核心的内核

数据结构——二叉搜索树

二叉搜索树是二叉树的一种特殊形式。二叉搜索树具有以下性质:1.每个节点中的值必须大于(或等于)其左侧子树中的任何值2.每个节点中的值必须小于(或等于)其右侧子树中的任何值。像普通的二叉树一样,我们可以按照前序、中序和后序来遍历一个二叉搜索树。但是值得注意的是,对于二叉搜索树,我们可以通过中序遍历得到一个递增的有序序列。

Arm发布 Neoverse V2 和 E2:下一代 Arm 服务器 CPU 内核

9月14日,Arm发布了新的处理器内核:V2和E2,在官网已经可以看到相关的TRM手册了。。四年前,Arm发布了Neoverse系列的CPU设计。Arm决定加大力度进军服务器和边缘计算市场,专门为这些市场设计ArmCPU内核,而不仅仅是回收以消费者为中心的Cortex-A设计。因此,Arm开始以更积极的方式进军基础设施

《C++ primer plus》精炼(OOP部分)——对象和类(5)

“学习是照亮心灵的火炬,它永不熄灭,永不止息。”文章目录类的自动和强制类型转换原始类型转换为自定义类型将自定义类型转换为原始类型类的自动和强制类型转换原始类型转换为自定义类型可以用一个参数的构造函数来实现,例如:classStudent{strings;intgrade;Student(inti);}intmain(v

用php&&redis发布订阅模式实现批量发送短信

使用Redis的发布订阅模式来实现批量发送短信是一种有效的方式,可以将短信任务发布到一个频道,然后多个订阅者(短信发送程序)从该频道获取任务并执行发送。以下是几个示例,演示如何使用Redis的发布订阅模式来实现批量发送短信:注意:以下示例为演示代码,实际应用中可能需要更多的错误处理、性能优化和安全措施。发布者-将短信任

直播流⻚⾯内存优化⽅案

本文字数:6628字预计阅读时间:39分钟01项目背景介绍项目中直播流每场直播由一张直播图片作为展示入口,用于提示用户此直播的概要。如下图:然而直播图片和容器的宽高比例出现不一致的情况。针对此情况,采取背景图contentmode展示为aspectFill且高斯模糊,上层高清图为aspectfit,给用户一种图片填满且

(2023 最新版)IntelliJ IDEA 下载安装及配置教程

IntelliJIDEA下载安装教程(图解)IntelliJIDEA简称IDEA,由JetBrains公司开发,是Java编程语言开发的集成环境,具有美观,高效等众多特点。在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(Git、SVN等)、JUnit、CVS整合、代码分析、创新的GUI设计等方面都有很好

Qt中表格属性相关操作,调整表格宽度高度自适应内容等

1表格列宽设置利用Qtdesigner设计,可以通过改变表头的列宽从而保证内容不会被遮盖,输入空格的方式增加表头的长度,比如表头为"Value",则改成"Value",可以扩展列默认的宽度,保证后面添加的数据不会遮盖了。2表头颜色在样式表中设置,双击编辑表头内容时,属性可设置字体颜色,但是无法设置背景色,QTableW

APP推荐:安卓系统的开屏广告自动跳过助手

今天给大家推荐一款安卓系统的开屏广告自动跳过助手,感兴趣的朋友可以下载试试看!一、软件简介安卓系统的开屏广告自动跳过助手自动跳过软件的实现,一般都是基于安卓的Accessibility“无障碍服务”实现。开启了无障碍服务的软件,可以获取屏幕上的任何内容,从而可以检测广告,帮助用户自动跳过。因此,使用广告跳过程序,最大的

热文推荐