GraphQL 简介
介绍
我们一直在使用 REST 架构来构建 API。这种架构至今仍被广泛使用,但它也存在一些问题。REST 存在一些问题,例如:必须使用多个 URL 以及过度获取数据。我们需要一个解决方案来获取所需的精确数据,而不是获取一堆我们无法触及的庞大对象。这正是 GraphQL 发挥作用的地方。
什么是 GraphQL
GraphQL 是由 Facebook 开发的一种开源查询语言。GraphQL
凭借其强大的查询语法,将数据以图的形式组织起来。由于数据的结构类似于图,我们可以像图一样对数据进行排序:遍历、检索和修改数据。它为我们提供了一种更高效的方式来设计、创建和使用 API。在后端,GraphQL 本质上是创建一个中间人服务来过滤我们从 API 中获取的内容。通过这种方式,它避免了数据过度获取和使用多个 URL。
GraphQL 入门
要工作,GraphQL 需要一个服务器和一个客户端。我们来谈谈服务器。我们可以将 graphQL 连接到 Node 服务器或任何其他类型的服务器。连接后,我们实际上会创建一个 Node/GraphQL 服务器或 Express/GraphQL 服务器。现在让我们使用 Express 来实现这一点。首先要做的是创建一个基本的 Express 服务器。接下来,我们需要创建一个 Express GraphQL 服务器。这
需要一个名为 express-graphql 的插件来创建一个 /graphql 端点。
设置服务器
const express = require('express')
const app = express()
const { graphqlHTTP } = require('express-graphql')
var schema = buildSchema(`
type Query {
welcome: String
}
`);
// root gives us a resolver
var root = {
welcome: () => {
return 'Welcome to the GraphQL World!';
},
};
app.use('/graphql', graphqlHTTP( req => {
return {
schema: schema,
rootValue: root,
graphiql: true,
}
}))
app.listen(3000)
console.log('Listening')
使获取数据更加高效
向 API 发送请求可能会返回超出我们实际需要的数据。GraphQL 允许我们向 API 发送查询来获取所需的数据。它限制了应该从服务器获取的数据。让我们来看一个查询数据的示例。
获取数据示例
// basic query
{
students {
id
firstName
}
}
// Result of the query
{
"data": {
"students": [
{
"id": "1",
"firstName": "Paula"
},
{
"id": "2",
"firstName": "Greg"
},
{
"id": "3",
"firstName": "Stephanie"
}
]
}
}
避免使用多个 URL
GraphQL 可以在单个请求中查询多个关系数据。这减少了对多个 URL/端点的需求。GraphQL 正是通过这种方式利用了选择性端点。
我们来看一个例子
谁需要多个 URL?示例
// multiple url query
{
student(id: "10"){
firstName
lastName
college{
name
location
}
}
}
/// result
{
"data": {
"students": [
{
"firstName": "Max",
"lastName": "Kelly",
"college": {
"name": " University",
"location": "Alabama"
}
},
}
}
通常我们需要向多个 URL 发送请求,但使用 GraphQL 我们只需一个请求即可完成此操作。
架构示例
type Query {
Students[Students!]!
}
type Mutation {
createStudent(collegeId:ID,firstName:String,lastName:String):String
updateStudent(collegeId:ID,firstName:String,lastName:String): Student!
deleteStudent(collegeId: ID!): Student!
}
type Student {
id:ID!
firstName:String!
lastName:String!
college:College
}
type College {
id:ID!
name:String!
location:String
students:[Student]
}
在这个模式中,我们设置了请求数据时的数据外观。我们还设置了一个可选的变更,以便我们实现对数据的修改。
突变
查询中的变更是可选的。它们相当于 REST 中的 CRUD 应用程序。变更是指我们修改服务器上的数据并获取更新后的数据的方式。通过这些变更,我们可以:创建、更新和删除数据条目。
结论
总而言之,GraphQL 使我们能够更轻松地选择从外部 API 接收的数据。GraphQL 与语言无关,因此可以轻松地与任何类型的语言集成。GraphQL 可以使用其中一些相同的技术和模式与数据库进行交互。尽管它的类型似乎更适合文档数据库,但它与文档数据库和关系数据库都能很好地兼容。
鏂囩珷鏉ユ簮锛�https://dev.to/neisha1618/an-introduction-to-graphql-462p