REST vs GraphQL

1*eO6lOZ-zd_Xf4sFQS_U3ag.png

简介

RESTful 和 GraphQL API 是构建 Web API 的两种流行选择,各有其优势和劣势。让我们更近距离地了解一下 RESTful 和 GraphQL API,它们的区别,以及在何时选择其中一种。

RESTful API 已经存在了一段时间,并且通常被广泛使用,而 GraphQL 是近年来变得流行的较新技术。

第一部分:什么是 RESTful API?

RESTful API 遵循一组规则和约束,规定了 API 应该如何设计。

使用标准的 HTTP 方法

它们使用标准的 HTTP 方法,例如 GET、POST、PUT、PATCH 和 DELETE,对资源执行操作,数据通常以 JSON 格式 返回。

REST vs GraphQL
1*tz_Wi9u1bM5cZPoiHi1PNg.png

是无状态的

RESTful API 是无状态的,这意味着服务器不会在请求之间存储任何客户端上下文。相反,每个请求都包含服务器处理所需的所有信息。这使得 RESTful Web 服务高度可伸缩,因为它们可以处理大量请求而无需为会话管理负担。

REST vs GraphQL
1*Xhm3pGT0JIJQxsxLo511vw.png

具有 URL 约定

RESTful URL 命名约定 的主要原则之一是在 URL 路径中使用名词而不是动词。例如,不适合使用 /get-user-profile 这样的 URL,更适合使用 /users/{user_id}/profile。该 URL 使用名词 users 表示用户资源的集合,并使用路径参数 user_id 来标识要访问的特定用户资源。

REST vs GraphQL
1*cXg3uOBj6mkN9UsrUMNwkw.png

第二部分:什么是 GraphQL?

GraphQL 是一个用于 API 的 查询语言,允许客户端定义其需要的数据的形状和结构。使用 GraphQL,客户端可以向服务器发出单个请求,并准确获取它们要求的数据,而没有其他多余的数据。

提供单个端点

与 RESTful API 不同,GraphQL 提供一个 单个端点,通常是 /graphql,它始终接受 POST 请求。客户端向此端点发送单个请求,服务器将根据通过请求体发送的查询或变更响应请求的数据。

REST vs GraphQL
1*yPmp5cFGJiW1eA0jV514tw.png

这种方法使得管理和版本化 API 变得容易,因为所有更改都可以在一个地方进行。

是无状态的

GraphQL API 也是无状态的,服务器不存储任何客户端数据,每个请求都包含请求查询中的所有信息

REST vs GraphQL
1*lEBai-bu3keWjkpXiS8Qrw.png

第三部分:比较 RESTful 和 GraphQL API

RESTful 和 GraphQL API 在设计和查询 API 方面采用不同的方法。让我们根据一些关键因素进行比较:

数据获取

RESTful API 遵循严格的请求-响应循环,其中来自客户端的每个请求都导致服务器的单个响应。这意味着客户端通常需要进行多个请求,从服务器获取相关数据,从而导致过度获取不足获取数据。

GraphQL 相反,允许客户端仅请求他们需要的数据,而不是其他多余的数据。客户端可以指定他们需要的数据的结构,服务器会准确返回该数据,减少 过度获取 和 不足获取 数据。

REST vs GraphQL
1*w9LanxUpYnUettVTo4rJJg.png

模式定义

在 RESTful APIs 中,服务器定义数据模式客户端需要解析返回的数据以理解模式。这可能导致客户端和服务器之间的耦合,因为服务器上的模式更改需要在客户端上进行相应的更改。

GraphQL 相反,具有强类型模式,定义了 API 中可用的数据。客户端可以使用此模式验证其查询并理解它们接收到的数据,减少客户端和服务器之间的耦合

REST vs GraphQL
1*QHyEh-S0UPlnZP3VwFYmAQ.png

缓存

RESTful API 使用 HTTP 缓存头 具有 内建的缓存机制。这允许客户端缓存响应并避免向服务器发出不必要的请求。

GraphQL 没有内建的缓存机制,但 客户端可以使用第三方库实现缓存策略

1*ZEyOJBHttjNVqsdJrVbe6w.png

性能

RESTful API 在客户端需要多次请求相关数据时可能遇到性能问题。这可能导致增加的延迟和网络流量。

GraphQL 通过**在单个

请求中仅获取所需数据**,可以提高性能并减少网络流量。但是,如果不小心,优化不良的查询可能会导致更多性能问题,并严重影响服务器。从这个角度来看,GraphQL 的最大优势也可能是它的最大劣势。

1*UVK7oerfFVu6V3Psppe1IA.png

第四部分:你应该选择哪个?

在 RESTful 和 GraphQL API 之间的选择取决于您的具体用例。RESTful API 适用于需要高可伸缩性的简单应用程序,而 GraphQL 则适用于具有不同数据需求的复杂应用程序

RESTful 和 GraphQL API 都有各自的优势和劣势。请记住,在两者之间进行选择并不总是二选一的情况,有时混合使用可能是最佳选择。

资源

GraphQL 文档:https://graphql.org/

什么是 RESTful API:https://aws.amazon.com/what-is/restful-api/

原创文章,作者:小技术君,如若转载,请注明出处:https://www.sudun.com/ask/34012.html

Like (0)
小技术君的头像小技术君
Previous 2024年4月6日
Next 2024年4月6日

相关推荐

  • 什么是DNS枚举?

      DNS(Domain Name System,域名系统)是互联网中用于将域名映射到 IP 地址的系统。DNS枚举是一种特定的DNS查询,它用于获取与特定主机名相关联的…

    CDN资讯 2024年4月16日
    0
  • CDN多元化应用场景

    多元化应用场景,挖掘商业潜力 1. 在线视频与直播行业:在这个“内容为王”的时代,流畅不卡顿的观看体验是留住用户的前提。CDN能有效应对突发流量高峰,保证直播活动或热门剧集的平稳播…

    CDN资讯 2024年5月20日
    0
  • 那到底什么是CDN呢?

    最近大家一定经常听到CDN这个词,对于之前没接触过这个行业的人,可能会听的云里雾里,不明所以。 那到底什么是CDN呢? 简单理解:CDN=数据快递前置仓? CDN全称Content…

    CDN资讯 2024年5月28日
    0
  • 为什么不要用stop方法停止线程?

    线程启动完毕后,在运行时可能需要终止,Java提供的终止方法只有一个stop,但是我不建议使用这个方法,因为它有以下三个问题:(1)stop方法是过时的从Java编码规则来说,已经…

    CDN资讯 2024年4月3日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注