我阅读了 GraphQL 规范,但找不到避免 1 + N * number_of_nested 调用的方法,我错过了什么吗?
即查询有一个类型的客户端,它具有嵌套的订单和地址,如果有 10 个客户端,它将为 10 个客户端执行 1 次调用 + 每个 client.orders 的 10 个调用 + 每个 client.addresses 的 10 个调用。
有没有办法避免这种情况?并不是说它与缓存某个东西的 UUID 不同,这些都是不同的值,如果你 GraphQL 指向一个可以进行连接的数据库,那将是非常糟糕的,因为你可以对任意数量的客户端进行 3 次查询.
我问这个是因为我想将 GraphQL 与一个 API 集成,该 API 可以以一种有效的方式获取嵌套资源,如果有一种方法可以在解决之前解决整个图,那么尝试将一些嵌套的东西放在一次调用中会很好。
或者我弄错了,GraphQL 只能用于微服务?
为了理解流是如何工作的,我试图实现一个使用 random.org 的无限数生成器。我做的第一件事是实现一个版本,在该版本中我将调用一个名为 get_number 的异步函数,它将填充缓冲区并返回下一个可能的数字:
struct RandomGenerator {
buffer: Vec<u8>,
position: usize,
}
impl RandomGenerator {
pub fn new() -> RandomGenerator {
Self {
buffer: Vec::new(),
position: 0,
}
}
pub async fn get_number(&mut self) -> u8 {
self.fill_buffer().await;
let value = self.buffer[self.position];
self.position += 1;
value
}
async fn fill_buffer(&mut self) {
if self.buffer.is_empty() || self.is_buffer_depleted() {
let new_numbers = self.fetch_numbers().await;
drop(replace(&mut self.buffer, new_numbers));
self.position = 0;
}
}
fn is_buffer_depleted(&self) -> bool {
self.buffer.len() >= self.position
}
async …
Run Code Online (Sandbox Code Playgroud)