HTTP 是一种协议,或者说是一组访问网络资源的明确规则。资源可以是任何东西,从 HTML 文件到数据库中的数据、照片、文本等等。
这些资源通过应用程序编程接口(API)向我们提供,并且我们通过 HTTP 协议对这些 API 发出请求。这是一种允许开发人员请求资源的机制。
在这里 了解更多关于 HTTP 方法、客户端-服务器架构以及为什么你需要 API。
注意:本节介绍了 GraphQL 在幕后的工作原理,但作为在 Fuel 上构建的开发人员,了解这一点并非必要。模式定义、解析器逻辑等都由 Fuel Labs 的贡献者编写和维护。
GraphQL 是一种查询语言和规范,描述了如何与 API 进行通信。GraphQL 不受编程语言、后端框架和数据库的限制。GraphQL 在幕后使用 HTTP 协议,因此你可以将 GraphQL 操作映射回简单的 GET
、POST
、PUT
或 DELETE
操作。你可以在这里查看 GraphQL 文档:https://graphql.org/。
GraphQL API 通过定义类型和这些类型上可用的属性(也称为模式),以及定义指定如何解析这些类型的函数来工作。解析器是一个负责为模式中的单个字段填充数据的函数。每当客户端查询特定字段时,该字段的解析器从适当的数据源中获取所请求的数据。
例如,作为 API 开发人员,你可以定义一个类型 Car
,并定义可在该类型上查询的属性,如下所示:
type Car {
id: ID
color: String
year: Int
isNew: Boolean
}
Fuel Labs 为 Fuel 网络创建了一个 GraphQL API 端点,允许开发人员对区块链上的数据进行复杂查询。你可以利用这些查询来为前端应用程序填充用户可能感兴趣的细节,例如其交易历史、特定代币的余额等。
GraphQL 中的查询允许你读取数据。GraphQL 允许你请求特定的数据,并精确返回你请求的内容。它还允许你在单个查询中请求多个资源,而不是像 REST API 那样为每个资源编写单独的“GET”请求。
GraphQL 还便于更复杂的查询和操作,例如分页、排序、过滤、全文搜索等。
示例查询:
query Actor {
actor {
name {
appearIn
}
}
}
上面的查询将返回演员的姓名以及他们出现在的电影名称。
GraphQL 中的变更是更新链状态的写操作。除了能够遍历对象及其字段外,GraphQL 还允许开发人员向字段传递参数以过滤响应。每个字段和嵌套对象都可以有自己的一组参数。
示例变更:
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}