REST API和GraphQL API的比较

news2024/11/24 0:52:45

REST API

REST API

REST(表述性状态传输)API 是一种应用程序接口 (API) 的架构风格,它使用 HTTP 请求来访问和使用数据。该数据可用于GET、PUT、POST和DELETE数据类型,指的是对资源的读取、更新、创建和删除操作。
RESTful API 使用 HTTP 方法在处理数据时执行 CRUD(创建、读取、更新和删除)过程。
为了促进缓存、AB 测试、身份验证和其他过程,标头向客户端和服务器提供信息。
主体包含客户端想要传输到服务器的数据,例如请求的有效负载。

GraphQL API

GraphQL API
GraphQL 是一种用于 API 的查询语言,也是使用现有数据完成这些查询的运行时。GraphQL 为您的 API 中的数据提供完整且易于理解的描述,使客户能够准确地询问他们需要什么,仅此而已,随着时间的推移更容易发展 API,并启用强大的开发人员工具。GraphQL 已被 Twitter、Expedia、Shopify 等知名组织广泛采用,主要由 GraphQL 基金会维护和开发。

GraphQL 与 REST:

差异
GraphQL 和 REST API 之间的主要区别在于 GraphQL 是一种查询语言,而 REST 是一种基于网络的软件的架构概念。
同样,将数据提供给客户端的方式是 GraphQL 和 REST 分歧最大的地方。在 REST 设计中,客户端提交 HTTP 请求,数据作为 HTTP 响应返回。在 GraphQL 架构中,客户端提交查询以获取数据。

典型场景

REST API

假设您有一个 API 来获取学生数据。在典型的 REST 场景中,请求/响应如下所示:

// HTTP REQUEST
GET api/students/1 || api/students?id=1

// HTTP RESPONSE
{
   "id": 1
  "name": "john doe",
   "class": 3,
   "age": 11
}

在上面的示例中,对发送到服务器的请求的响应将是关于 id 为 1 的学生的所有数据的对象。由于
过度获取的性质,这有时可能需要更长的时间,具体取决于数据的大小休息

GraphQL图形QL

在 GraphQL 中,如果通过严格列出所需字段的数量来获取数据。这限制了一次获取所有数据。考虑下面使用 graphQL 获取用户数据的 GIF。

动图动图1

)在 GraphQL 和 REST 之间进行选择时要考虑的事项

安全

REST API 使用 HTTP,允许使用传输层安全性进行加密,并提供多种 API 身份验证选项。TLS 确保两个系统之间的数据传输是私密且未更改的。支持 JavaScript 对象表示法 (JSON) 的 Web 令牌完成 HTTP 身份验证过程,以便从 Web 浏览器安全传输数据。

GraphQL 的安全控制不如 REST API 中的安全控制发达。为了利用 GraphQL 中的数据验证等当前功能,开发人员必须设计新的身份验证和授权技术。

可用性

REST API 使用 URI 和 HTTP 技术,这使得 API 很难预测在联系新端点时会发生什么。REST 中缺少指定的版本控制要求允许提供者采用他们自己的方法。

使用 GraphQL,您可以向您的 API 发送请求并接收准确的响应,而无需进一步添加。因此,来自 GraphQL 查询的极其可预测的响应提供了良好的可用性。GraphQL 采用了一种直接的方法并且不对 API 进行版本控制。

表现

开发人员只需一次 API 请求即可使用 GraphQL 获取数据。为了避免数据获取不足和过度获取,灵活的样式定义了信息请求的结构,并从服务器返回相同的结构。

与 GraphQL 相比,REST API 具有严格的数据结构,可能首先返回不相关的信息(过度获取)。由于请求需要时间才能到达正确的数据并提供相关信息,因此开发人员必须进行多次调用。

缓存

REST API 的所有 GET 端点都可以缓存在服务器上或通过 CDN。它们也可以由客户端存储以供经常使用,并由浏览器缓存。GraphQL 通过单个端点提供,通常是 (/graphql),并且与 HTTP 规范不同。因此,无法像 REST API 那样缓存查询。

但是,由于可用的工具,客户端缓存优于 REST。一些使用缓存层的客户端(Apollo Client,URQL)使用 GraphQL 的模式和类型系统,允许它们在客户端保留缓存。

错误处理

每个 GraphQL 请求、成功或错误都会返回 200 状态代码。与 REST API 相比,这是一个明显的区别,在 REST API 中,每个
状态代码都指向某种类型的响应。

Status CodeRESTGraphQL
200OkOk
400Bad Request-
401Unauthorized-

REST API 的错误可以有 200 以外的任何代码,处理错误的客户端应该知道所有可能的代码。

GraphQL 中的任何合法答案都应该是 200,包括数据和错误响应。客户端工具将有助于更有效地管理错误。错误作为特定错误对象下的响应主体的一部分进行处理

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

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

相关文章

智能马达保护器在有色冶金行业中的应用

关注acrelzxz 摘要:简要介绍了热继电器、电子式电动机保护器和智能电动机保护器的优缺点,并阐述了智能电动机保护器如何正确的选型,重点比较了智能电动机保护器保护模式、端子控制模式、全通信模式、半通信模式等几种常见工作模式&#xff0…

Java基础(9)——从匿名内部类 到 函数式编程

引出 从匿名内部类到函数式编程的进化 什么是匿名内部类 没有类名----匿名内部类 List的匿名内部类 FunctionalInterface 注解 Collections.sort(list, new Comparator<Emp>() {Overridepublic int compare(Emp o1, Emp o2) {return (int) (o1.getAge()-o2.getAge())…

问题解决:npm修改路径后获取vue信息出错,npm info vue 出错。

问题&#xff1a; 在cmd中修改了npm缓存文件及全局模块文件路径后&#xff0c;通过获取vue信息出错。 C:\Users\SueMagic>npm info vue npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path b:\nodejs\node_cache\_cacache npm ERR! errno -4048 npm ERR! Error: E…

基于django的物流管理系统

摘要 随着全球经济的蓬勃发展&#xff0c;WTO的成立也给全球的商业活动带来了新的挑战&#xff0c;因此&#xff0c;企业需要充分发挥自身的优势&#xff0c;运用最新的科学技术&#xff0c;在互联网、信息科学的指导下&#xff0c;完善现有的管理体系&#xff0c;实现全面的创…

chatgpt赋能python:Python为什么出现多个语句?

Python为什么出现多个语句&#xff1f; 在Python中&#xff0c;同一行代码可以包含多个语句&#xff0c;这是Python与其他编程语言不同之处之一。那么&#xff0c;为什么Python出现了多个语句呢&#xff1f; 1. 简洁性 Python是一种高级编程语言&#xff0c;可以通过更少的代…

NoSql数据库及使用Python连接MongoDB

NoSQL 数据库 NoSQL 数据库是非关系数据库&#xff0c;不使用结构化查询语言 (SQL) 进行数据操作。相反&#xff0c;他们使用其他数据模型进行访问和数据存储。SQL 数据库通常用于处理结构化数据&#xff0c;但它们可能不是处理非结构化或半结构化数据的最佳选择。 NoSQL 数据…

环境感知算法——1.简介与GPU驱动、CUDA和cudnn配置

1. 环境感知算法概述 在自动驾驶领域&#xff0c;环境感知算法主要负责处理周围环境中障碍物和道路的信息&#xff0c;为车辆的决策与执行提供车辆与环境的数据。包括检测移动和静止的障碍物、确定车辆在环境中所处的位置&#xff0c;涉及的传感器有摄像头、激光雷达和毫米波雷…

软件工程的问题

我长期以来一直是这个应用程序的用户&#xff0c;它一直快速、响应迅速且易于使用。 然而&#xff0c;在上周的一次更新之后&#xff0c;启动时间从不到一秒钟大幅增加到超过 15 秒。唯一明显的变化是添加了一个新的启动界面和更新了用户界面。 我经常发现自己在质疑为什么工程…

qt+mysl的制作软件的整体思路

环境配置 conda env list 创建环境conda create -n qt python=3.8 激活环境conda activate qt

软考A计划-电子商务设计师-计算机系统基础知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

年内落地BEV,大算力芯片准备好了吗?

讲述&#xff5c;余轶南 编辑 | Amy 编者注&#xff1a; 本文是HiEV出品的系列直播「硬核拆解BEV」第二期&#xff0c;地平线副总裁兼软件平台产品线总裁余轶南博士分享的内容梳理。 第三期商汤绝影量产行车智能驾驶研发负责人蒋沁宏分享的《BEV三大关键&#xff1a;数据、迁移…

TSNE 参数超级详细设置 from sklearn.manifold import TSNE

文章目录 一、TSNE是什么&#xff1f;二、使用步骤1.引入库 from sklearn.manifold import TSNE2.参数详细说明 一、TSNE是什么&#xff1f; TSNE&#xff08;t-Distributed Stochastic Neighbor Embedding&#xff09;是一种非线性降维技术&#xff0c;主要用于高维数据的可视…

什么是lamp架构

LAMP架构介绍 LAMP动态网站架构 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。 1、LAMP分别代表什么&#xff1f; L代表服务器操作系统使用LinuxA代表网站服务使用的是Apache软件基金会中的httpd软件M代表网站后台使用的数据库是MySQL数据库…

代码审计笔记之未授权审计(缺失功能级别访问控制)

主题 1、未授权漏洞以及危害介绍 2、未授权漏洞的审计思路与方法简介 大多数网络应用程序在用户使用功能之前&#xff0c;应用程序需要验证该用户是否有功能级的访问权限。如果请求未经应用程序的验证。攻击者讲通过伪造请求参数的手段&#xff0c;获取应用的业务响应。 危害…

更轻更快更耐用,重量79g,支持4KHz回报率的雷柏VT9上手

喜欢用键鼠玩游戏的朋友&#xff0c;都会选择专业游戏鼠标和键盘&#xff0c;特别是游戏鼠标&#xff0c;往往会有着更高的精度&#xff0c;以及更丰富的自定义空间&#xff0c;在游戏中可以实现更加精准的点击。最近我看到雷柏出了一款支持4K回报率的VT9鼠标套装&#xff0c;这…

查看Oracle中指定用户下包含的包、函数、存储过程及其对应内容语句——查看当前数据库的连接内容

一、需求分析 在项目运维的时候&#xff0c;公司出于数据安全的考虑&#xff0c;对数据库的权限进行了控制&#xff0c;限制运维人员只能够通过堡垒机查看Oracle数据库内容&#xff0c;并且堡垒机只是设定了一个只读的账号查看数据库&#xff1b;这就导致了运维时在查看数据库的…

【量化交易笔记】7.基于随机森林预测股票价格

前言 机器学习在量化交易主要有两方面的应用&#xff0c;第一就是用时间序列的日频数据来预测未来的股价&#xff0c;第二 用截面数据来预测收益&#xff0c;现在量化基因的因子都基于这个模型。 接下来&#xff0c;我分别来说明&#xff0c;机器学习分成预测结果分成分类和回…

MyBatis——MyBatis配置信息

1.MyBatis的日志配置 log4j1和log4j2的使用 在项目中添加依赖 log4j2 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.12.1</version> </dependency>log4j1 <…

基恩士IV3工业相机的使用

注意&#xff1a;此教程仅为IV3相机分类模型教程&#xff0c;IV3还具有工件缺陷检测模型&#xff0c;即将工件分为NG/OK,为二分类 IV3相机注册分类程序 一、传感器设定 拍摄条件&#xff1a;调节亮度与焦点&#xff0c;一般选择自动调节&#xff0c;调节完成后可手动微调。触发…

Hudi(四)集成Flink(2)

6、读取方式 6.1、流读&#xff08;Streaming Query&#xff09; 当前表默认是快照读取&#xff0c;即读取最新的全量快照数据并一次性返回。通过参数 read.streaming.enabled 参数开启流读模式&#xff0c;通过 read.start-commit 参数指定起始消费位置&#xff0c;支持指定 …