.Net6 + GraphQL + MongoDb拦截器

介绍

拦截器方面因为我是用的也不是很多,没有特别好的例子能举例。

正文

我们将一些理论关于中间件和拦截器分别在什么情况下使用

GraphQL 中间件常见的使用场景:

身份验证:GraphQL 中间件可以用于身份验证,例如验证授权令牌或使用 OpenID Connect 对 GraphQL 请求进行身份验证。

请求转换:GraphQL 中间件可以用于将 GraphQL 请求转换为其他形式,例如将 GraphQL 请求转换为 SQL 查询语句或其他数据存储格式。

响应转换:GraphQL 中间件可以用于将 GraphQL 响应转换为其他形式,例如将响应转换为 JSON 或 XML 格式。

错误处理:GraphQL 中间件可以用于处理 GraphQL 请求和响应中的错误,例如记录错误、转换错误消息或重新抛出错误。

数据缓存:GraphQL 中间件可以用于数据缓存,例如使用 Redis 缓存 GraphQL 请求和响应数据以提高性能和响应速度。

数据加载:GraphQL 中间件可以用于数据加载,例如使用 Data Loaders 来处理 GraphQL 请求和响应之间的数据加载,以提高性能和响应速度。

限流:GraphQL 中间件可以用于限制每秒钟处理请求的数量,以防止应用程序过载。

GraphQL 拦截器常见的使用场景包括:

记录日志:使用拦截器来记录 GraphQL 请求和响应的详细信息,例如字段名称、类型名称、查询名称、查询参数和返回值,以便开发人员可以更好地了解系统运行情况并进行调试。

权限控制:使用拦截器来验证 GraphQL 请求的授权令牌或角色,并根据权限级别返回不同的结果或错误消息。

数据缓存:使用拦截器来缓存 GraphQL 请求的响应数据,以提高应用程序的性能和响应速度。

数据转换:使用拦截器来转换 GraphQL 请求和响应的数据格式,例如将日期字符串转换为日期对象,将 JSON 数据转换为实体对象等。

性能优化:使用拦截器来测量和优化 GraphQL 请求的性能,例如记录查询时间、缓存查询结果、提前加载相关数据等。

使用分析:

中间件是在 GraphQL 请求管道的早期执行的,用于执行与请求相关的前置操作,例如身份验证、数据加载、请求转换等。中间件可以通过管道传递修改请求,但它们不能拦截请求,即它们不能终止请求的执行。

拦截器是在 GraphQL 请求管道的后期执行的,用于执行与请求和响应相关的操作,例如日志记录、权限控制、数据缓存、错误处理等。拦截器可以拦截请求和响应,即它们可以决定请求是否被继续执行,并可以修改响应结果。拦截器可以通过管道传递修改响应结果,但它们不能修改请求。

一个简单的例子

 public class LoggingInterceptor : DefaultHttpRequestInterceptor
    {
        private readonly ILogger<LoggingInterceptor> _logger;
        public LoggingInterceptor(ILogger<LoggingInterceptor> logger)
        {
            _logger = logger;
        }
        public override ValueTask OnCreateAsync(
            HttpContext context,
            IRequestExecutor requestExecutor,
            IQueryRequestBuilder requestBuilder,
            CancellationToken cancellationToken)
        {

            var request = requestBuilder.Create();
            _logger.LogInformation("Executing GraphQL request {OperationName}: {Query}", request.OperationName, request.Query);

            requestBuilder.TryAddProperty("currentUserId", 69);

            return base.OnCreateAsync(context, requestExecutor, requestBuilder, cancellationToken);
        }
    }
.AddHttpRequestInterceptor<LoggingInterceptor>()

结语

本系列主要将GraphQL的使用,示例项目不能应用于生产,后续发一些GraphQL库出来讲解生产中的实际应用

联系作者:加群:867095512 @MrChuJiu

posted @ 2023-02-21 22:17  初久的私房菜  阅读(12106)  评论(0编辑  收藏  举报
作者:初久的私房菜
好好学习,天天向上
返回顶部小火箭
好友榜:
如果愿意,把你的博客地址放这里
张弛:https://blog.zhangchi.fun/