在端点/ api

问题描述

我有一个正在运行的后端服务器,该服务器在端点/api上提供GraphQL。像魔术一样工作,但我仍然可以从外部打开它,并且无需身份验证即可访问。

enter image description here

因此,我开始尝试Google刚刚发布的API Gateway beta。除了必须配置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。我有点挣扎了b


它在这里定义了“ REST”端点,因为我有一个GraphQL端点。但这只是一个POST请求,对不对?因此,我认为对于OpenAPI 2.0而言,这没什么常事。

无论如何,根据GCP成功创建了API网关

enter image description here

但是-现在通过网关URL https://mystuff-api-9kytelt5.ew.gateway.dev和端点/api调用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}

该错误消息让我有些失落,不知道该在哪里调整。

解决方法

在openapi-config.yml文件中,例如示例here,您需要将主机添加在schemes条目上方。主机是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
,

您仅在openAPI规范中定义了POST动词。在您的curl命令中添加一个-X POST,以将默认的GET动词更改为POST

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...