1 个稳定版本
1.0.0 | 2022年1月21日 |
---|
#15 在 #graphql-client 中
每月下载量 129 次
在 midpoint-ui 中使用
13KB
156 行
reqwest-graphql
为 Rust 提供的轻量级 GraphQL 客户端。由 arthurkhlghatyan/gql-client-rs 分支而来
- 简单 API,支持查询和变更
- 不需要模式文件进行内省
- 支持 WebAssembly
基本用法
- 使用 client.query_with_vars 进行带变量的查询
- 如果没有变量需要传递,可以使用包装器 client.query
use gql_client::Client;
use serde::{Deserialize, Serialize};
#[derive(Deserialize)]
pub struct Data {
user: User
}
#[derive(Deserialize)]
pub struct User {
id: String,
name: String
}
#[derive(Serialize)]
pub struct Vars {
id: u32
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let endpoint = "https://graphqlzero.almansi.me/api";
let query = r#"
query UserByIdQuery($id: ID!) {
user(id: $id) {
id
name
}
}
"#;
let client = Client::new(endpoint);
let vars = Vars { id: 1 };
let data = client.query_with_vars::<Data, Vars>(query, vars).await.unwrap();
println!("Id: {}, Name: {}", data.user.id, data.user.name);
Ok(())
}
传递 HTTP 头部信息
客户端暴露了 new_with_headers 函数,使用简单的 HashMap<&str, &str> 传递头部信息
use gql_client::Client;
use std::collections::HashMap;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let endpoint = "https://graphqlzero.almansi.me/api";
let mut headers = HashMap::new();
headers.insert("authorization", "Bearer <some_token>");
let client = Client::new_with_headers(endpoint, headers);
Ok(())
}
错误处理
可能出现的两种错误类型:与 HTTP 相关的错误(例如,认证问题)或 JSON 响应中的 GraphQL 查询错误。正确地实现 GraphQLError 结构的调试和显示可以正确显示这些错误消息。此外,您还可以通过调用 err.json() 来查看 JSON 内容以获取更详细的信息。
use gql_client::Client;
use serde::{Deserialize, Serialize};
#[derive(Deserialize)]
pub struct Data {
user: User
}
#[derive(Deserialize)]
pub struct User {
id: String,
name: String
}
#[derive(Serialize)]
pub struct Vars {
id: u32
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let endpoint = "https://graphqlzero.almansi.me/api";
// Send incorrect request
let query = r#"
query UserByIdQuery($id: ID!) {
user(id: $id) {
id1
name
}
}
"#;
let client = Client::new(endpoint);
let vars = Vars { id: 1 };
let error = client.query_with_vars::<Data, Vars>(query, vars).await.err();
println!("{:?}", error);
Ok(())
}
依赖项
~3–16MB
~235K SLoC