DRF与GraphQL Mesh通过OpenAPI集成报错求助
解决GraphQL Mesh对接DRF OpenAPI报错的问题
1. 修正DRF的OpenAPI Schema生成配置
你的urls.py中drf_schema_view未定义,这会导致Mesh获取的Schema格式不符合标准。统一使用drf-yasg生成合规的OpenAPI 3.0 Schema:
修改project/urls.py:
from drf_yasg.views import get_schema_view from drf_yasg import openapi from rest_framework import permissions from graphene_django.views import GraphQLView # 生成标准OpenAPI 3.0 Schema schema_view = get_schema_view( openapi.Info( title="Project API", default_version='v1', description="Project OpenAPI Schema", ), public=True, permission_classes=(permissions.AllowAny,), patterns=urlpatterns, ) urlpatterns = [ path('admin/', admin.site.urls), path('category/', include('mobiledeveloper.urls')), # 暴露标准Swagger JSON接口 path('swagger.json', schema_view.without_ui(cache_timeout=0), name='schema-json'), path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), path('graphql/', csrf_exempt(GraphQLView.as_view(graphiql=True))), ]
2. 调整GraphQL Mesh的OpenAPI Handler配置
更新.meshrc.yml,添加兼容DRF的配置项:
sources: - name: DeveloperGround handler: openapi: source: http://localhost:8000/swagger.json baseurl: http://localhost:8000 # 指定解析为OpenAPI 3.0格式 schemaFormat: openapi3 # 关闭严格模式,忽略非致命Schema错误 strict: false # 若DRF要求CSRF,添加请求头(不需要可移除) operationHeaders: X-CSRFToken: '{context.headers["X-CSRFToken"]}'
3. 验证Schema有效性
把http://localhost:8000/swagger.json的内容复制到本地Swagger Editor工具中检查,确保没有语法错误。如果有问题,调整drf-yasg配置(比如排除无效接口、修正字段定义)。
4. 处理DRF的CSRF限制
如果Mesh请求时出现CSRF错误,给DRF的API视图添加csrf_exempt装饰器:
from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator @method_decorator(csrf_exempt, name='dispatch') class YourAPIView(APIView): # 视图逻辑
5. 更新GraphQL Mesh依赖
你的Mesh版本较旧,更新到最新稳定版可修复已知兼容问题:
npm update @graphql-mesh/cli @graphql-mesh/openapi
完成以上步骤后,重新运行npm run dev即可尝试对接。
内容的提问来源于stack exchange,提问作者Srijan113
相关产品推荐
相关产品推荐

