代码之家  ›  专栏  ›  技术社区  ›  xetra11

在端点/API为GraphQL服务的云运行服务器的Google API网关配置

  •  1
  • xetra11  · 技术社区  · 4 年前

    我有一个正在运行的后端服务器,在端点上为GraphQL提供服务 /api 。工作起来很有魅力,但我仍然对外开放,无需身份验证即可访问。

    enter image description here

    因此,我开始尝试刚刚发布的API网关测试版Google。除了我必须配置OpenAPI 2.0配置YAML的部分之外,这一切都很简单。

    swagger: "2.0"
    info:
      title: myapp-backend-graphql-api
      description: "API for GraphQL queries and mutations"
      version: "1.0.0"
    schemes:
      - "https"
    paths:
      "/api":
        post:
          description: "GraphQL Endpoint"
          operationId: "graphqlEndpoint"
          x-google-backend:
            address: https://myapp-backend-43Jasfasd-ew.a.run.app
          parameters:
            - in: body
              name: GraphQl
              schema:
                type: object
          responses:
            200:
              description: "Success."
              schema:
                type: object
    
    
    

    所以这是我的 openapi-config.yml 我有点挣扎


    它在这里定义了“REST”端点,因为我有一个GraphQL端点。但这只是一个POST请求,对吧?所以我认为OpenAPI 2.0没什么特别的。

    无论如何,API网关是根据GCP成功创建的 enter image description here

    但是-现在通过网关URL调用API https://mystuff-api-9kytelt5.ew.gateway.dev 以及终点 /api 失败。

    xetra11@pop-os:~$ curl https://mystuff-api-9kytelt5.ew.gateway.dev/api/schema.json 
    {"message":"Path does not match any requirement URI template.","code":404}
    

    我对这个错误消息有些困惑,不知道在哪里需要调整。

    0 回复  |  直到 4 年前
        1
  •  1
  •   MaryM    4 年前

    在openapi-config.yml文件中,如示例所示 here ,您需要在方案条目的正上方添加主机。主机是Cloud Run创建的URL的主机名部分。此外,你的路径和方案有双引号,这是不需要的。我对你的例子做了一些修改,看看这是否有帮助。

    例子:

    swagger: "2.0"
    info:
      title: myapp-backend-graphql-api
      description: "API for GraphQL queries and mutations"
      version: "1.0.0"
    host: myapp-backend-43Jasfasd-ew.a.run.app
    schemes:
      - https
    paths:
      /api:
        post:
          description: "GraphQL Endpoint"
          operationId: "graphqlEndpoint"
          x-google-backend:
            address: https://myapp-backend-43Jasfasd-ew.a.run.app
          parameters:
            - in: body
              name: GraphQl
              schema:
                type: object
          responses:
            '200':
              description: Success
              schema:
                type: object
    
        2
  •  0
  •   guillaume blaquiere    4 年前

    您只在openAPI规范中定义了POST动词 -X POST 到curl命令中,将默认GET动词更改为POST