【问题标题】:Send GraphQL Introspection Request on WSO2在 WSO2 上发送 GraphQL 内省请求
【发布时间】:2021-08-10 08:59:05
【问题描述】:

对于 WSO2 中的 GraphQL API,WSO2 是否支持 GraphQL 自省?我们如何尝试做 GraphQL 自省请求来绕过以下错误:

【问题讨论】:

    标签: graphql wso2 wso2-am introspection


    【解决方案1】:

    根据 WSO2 API 网关中的 GraphQL 实现,我们只允许通过网关进行查询/变异操作,因为网关为请求查询时可用的操作提供 QOS(操作级安全性、节流和分析)。上述错误返回是因为提供的查询尚未包含任何操作,但网关验证查询上的操作可用性

    在这里,应用程序开发人员/API 开发人员已经知道 GraphQL 后端中可用的类型,因为他们已经在 SDL 文件中拥有类型系统。如果他们不知道后端可用的 graphql 类型,则需要自省,因此 GraphQL 提供自省功能,可以通过查询 __schema 字段来检索它们。

    【讨论】:

    • 我们的前端团队希望将这个东西用于 graphql 代码生成。他们的问题是;有一个端点返回架构并具有固定令牌身份验证:https://<our-hostname>/api/am/store/v1/apis/<our-api-id>/graphql-schema 但它有错误的 Content-Type Header(它说它返回 json,但它没有)如果 Content-Type Header 将被修复(不确定哪个是正确的,也许是application/graphql?),我们应该能够在我们的前端构建过程中使用它
    • 您提到的 REST API (GET https:///api/am/store/v1/apis//graphql-schema) 是获取SDL 模式的内容。这次我们没有向 GraphQL 后端发送任何请求;它是您在创建 GraphQL API 时上传到 APIM Publisher 的内容。其余调用使用“application/json”从 APIM devportal 检索内容。
    • 用于网关请求;与您的 GraphQL 后端相关联;如果您直接传递查询,则必须使用“application/graphql”作为内容类型。您也可以使用“application/json”,将有效负载构造为 { "query": "...", "operationName": "...", "variables": { "myVariable": "someValue", . .. } }
    【解决方案2】:

    如果您的要求是检索类型系统,您可以使用 GET https:///api/am/store/v1/apis//graphql-schema REST API 来获取SDL 作为字符串。要从 FrontEnd 构建它,您可以尝试以下方法。

    const sdlSchema = `type Author {
        firstName: String
        lastName: String
      }
      type Query {
        author(id: Int!): Author
      }
    `;
    
    const graphqlSchemaObj = buildSchema(sdlSchema); 
    

    注意:此处使用 (GET https:///api/am/store/v1/apis//graphql-schema) 检索 SDL 架构

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-14
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多