GraphQL 新手教程 - 简介
我是GraphQL Editor的 Robert 。每隔几天我会发布一篇面向新手的 GraphQL 教程。这篇文章是对 GraphQL 的介绍。关注我获取更多内容!
GraphQL 从何而来?
GraphQL 于 2015 年由 Facebook 推出,作为 REST 的替代方案。当时,它并非只是一个实验——早在 2012 年,它就已在 Facebook 移动应用程序中投入生产。公开发布后,它便迅速流行起来,当时许多公司都在研究类似的解决方案。这项技术之所以开始受到关注,是因为它可以与许多其他语言兼容,并且有许多现成的库支持大多数流行的样式。根据 Stackshare 的数据,目前已有近 2000 家公司在使用它。早期采用者包括 Coursera、Github、ProductHunt、Yelp 和 Twitter。
什么是 GraphQL?
为了介绍 GraphQL,我将使用一个数据示例,并将其功能与 REST 进行比较。这个示例将向您展示为什么新技术更高效、更易于使用,以及创建它的动机是什么。
假设我们正在为一个有两个版本(网页版和移动版)的应用程序创建一个后端。系统的核心将包含足球运动员、他们效力的球队以及其他一些细节信息。移动版应用程序应该显示较少的信息。
网络 | 移动的 |
---|---|
姓名 简历 团队(描述,年份) 团队(描述,年份) |
姓名 球队(年份) 球队(年份) - |
因此,如果我们要基于 REST 创建 API,我们需要编写两个请求:
GET /player/{id}
{
"id": „101”
"name": „David Beckham”
"bio": „…”
„age”: „43”
}
GET /player/{id}/teams
{
„Teams”: [{
„id": „201”,
„name”: „Real Madrid”,
„description": „…”,
„goals”: „…”,
„matches”: „…”,
„years”: „2003-2007”
},
...
]
}
通过查看响应,您可以发现在两种情况下我们获取的数据都超出了实际需要。由于移动数据和加载速度的限制,这在移动应用中至关重要。当然,我们可以通过编写不同的端点来解决这个问题,这些端点只获取我们需要的数据。另一种方法是实现 API,让我们可以自行选择需要的数据,例如 GET /player/{id}/teams?only=name。但在敏捷软件开发中,由于需求每周都在变化,这种解决方案很难维护。
与此相反,我们可以引入 GraphQL。
使用 GraphQL 的后端更加灵活,因为它只有一个端点。客户只需编写查询并指定具体需求,即可获取 JSON 格式的数据。在我们的足球示例中,我们可以为每个平台(Web 和移动)创建查询。
Web 应用程序:
query {
player(id: "101") {
name
bio
teams {
title
description
}
}
}
回复:
{
"data": {
"player": {
"name": "David Beckham",
"bio": "...",
"teams": [{
"title": "Real Madrid",
"description": "..."
}, ...]
}
}
}
移动应用程序
query {
player(id: "101") {
name
teams {
title
}
}
}
回复:
{
"data": {
"player": {
"name": "David Beckham",
"teams": [{
"title": "Real Madrid"
}, ...]
}
}
}
正如您所见,每次查询都只返回我们想要的结果。这就是 GraphQL 的强大之处——灵活性。您无需为不同的屏幕创建端点。不同的客户端可以根据需要使用同一个定义好的 schema。
请求更少。
传统的 REST 方法通常需要多次 GET 请求才能在一个屏幕上显示数据。这对于移动应用来说效率不高——它会降低应用速度,并且需要更多的互联网数据传输。GraphQL 允许用户只创建一个端点。得益于 Facebook 工程师引入的技术,客户端和服务器之间的通信得到了更好的优化。
查询语言
GraphQL 最重要的特性在于它与语言无关。它并非为与特定技术兼容而创建。它是一种查询语言,拥有自己的规则,适用于大多数流行的编程语言。互联网上有许多支持库,包括:C#/.NET、PHP、JavaScript、Java、Python、Ruby 等等。
概括
GraphQL 是一种查询语言和运行时,我们可以使用它来构建和公开 API,使其以强类型模式呈现,而无需数百个 REST 端点。客户端可以看到该模式,然后编写查询语句,发送查询请求,最终返回的正是他们请求的数据,仅此而已。GrapqhQL 的优势:
- 减少移动应用程序的数据和请求,
- 简单且可见的 API 结构
- 可以与多种技术一起使用
- 被 Twitter、Facebook、Github 等多家公司使用
如果您正在寻找最好的 graphql 教程,请查看这篇文章。
文章来源:https://dev.to/iamrobert/graphql-tutorial-for-newbies---introduction-44d3