REST API 和 GraphQL API 的联系与区别

REST API 和 GraphQL API 的联系与区别 API(Application Programming Interface,应用编程接口),通俗点说,就是不同软件之间的交流工具。它让我们可以从服务器获取数据或者把数据发送给服务器。目前常用的两种常见 API 是 REST API 和 GraphQL API。 REST API REST API (Representational Sta...

REST API 和 GraphQL API 的联系与区别

API(Application Programming Interface,应用编程接口),通俗点说,就是不同软件之间的交流工具。它让我们可以从服务器获取数据或者把数据发送给服务器。目前常用的两种常见 API 是 REST API 和 GraphQL API。

REST API

REST API (Representational State Transfer API)是目前用得最多的一种 API 类型,它的原理很简单:通过 URL 来获取资源。

REST API 怎么工作

我们可以把 REST API 想象成一个餐厅的菜单。你点什么菜(访问什么 URL),厨房(服务器)就会给你端上来对应的菜品(数据)。比如,你在浏览一个电商网站时,访问 `/products` 这个 URL,你可能就会看到所有的商品列表;访问 `/products/123`,你就会看到编号为 123 的商品详情。

REST API 的优缺点

**优点:**
  • **容易理解**:因为它是基于 HTTP 协议的,所以开发者几乎不需要额外学习就能上手。
  • **普遍使用**:大部分网站和应用都是用 REST API 来获取数据的,比如 Twitter、Facebook 等。
**缺点:**
  • **可能获取太多或太少数据**:举个例子,你只想知道某个商品的价格,但可能服务器会把这个商品的全部信息都给你,导致你获取了很多不需要的数据。反过来,有时候你想要多个商品的信息,但 REST API 可能让你得分几次请求才能拿到。

GraphQL API

GraphQL 是 Facebook 开发的一种新型 API,它解决了 REST API 的一些不足之处。与其说它是一种 API,不如说它是一个“点菜系统”,你可以告诉服务器你要什么样的数据,服务器就只会给你这些。

GraphQL API 怎么工作

想象一下,你去餐厅点菜,你告诉服务员:“我只要牛排,不要配菜。”服务员就只给你牛排。同样的,在 GraphQL 中,你可以向服务器请求:“我只要商品的名字和价格,不要其他信息。”服务器就只会返回这些数据。
**举个例子**: 假设你想知道某个基因的信息。在 REST API 中,你可能需要多次请求不同的 URL,来分别获取基因的基本信息、遗传信息和其他相关数据。而在 GraphQL 中,你只需要一个请求,服务器会根据你的要求,返回所有你需要的数据,既方便又高效。

GraphQL API 的优缺点

**优点:**
  • **精确获取数据**:你可以指定只要什么数据,避免不必要的流量消耗。
  • **减少请求次数**:你可以在一个请求中获取多个资源的数据,这对复杂的应用来说非常有用。
**缺点:**
  • **学习成本较高**:对于初学者来说,理解 GraphQL 的查询语言和概念可能有点挑战。
  • **实现复杂**:服务器端需要支持复杂的查询,这可能会增加开发和维护的难度。
非常抱歉误解了你的意思,下面我将以代码举例来介绍 REST API 和 GraphQL API 的不同。

REST API 与 GraphQL API 的代码示例比较

REST API 示例

假设我们有一个电商网站,需要获取商品的列表和商品的详细信息。我们可以使用 REST API 来实现这一需求。
**获取商品列表的 REST API 请求:**
**获取特定商品详情的 REST API 请求:**
在这个 REST API 的例子中,`/products` 用于获取所有商品的列表,而 `/products/123` 用于获取某个特定商品的详情。每次请求只能获取特定资源的数据。

GraphQL API 示例

同样的需求,我们使用 GraphQL API 来实现。我们可以在一个请求中获取商品列表和每个商品的详细信息,并且只获取我们感兴趣的字段。
**获取商品信息的 GraphQL API 请求:**
**查询特定商品的详细信息:**
在 GraphQL API 的例子中,`products` 查询可以获取商品的所有信息,并且只返回我们指定的字段(例如 `id`、`name`、`price` 和 `description`)。而在查询特定商品详情时,我们通过变量 `$id` 传递商品 ID,获取该商品的详细信息。

总结

**REST API**:
  • 每个资源(例如商品列表、商品详情)有自己独立的 URL。
  • 获取数据时可能会获取到不需要的字段(过度获取),或者需要多次请求才能获取所有需要的数据(不足获取)。
**GraphQL API**:
  • 只有一个端点,但可以通过灵活的查询语句获取不同的数据。
  • 可以精确获取所需的字段,避免过度获取或不足获取的情况。
  • 支持在一个请求中获取多个资源的数据。
上一篇
GraphQL API 使用介绍:以 Open Targets Platform 为例
下一篇
使用网络方法识别疾病模块
Loading...