Шлюз API GCP: не удается использовать параметры пути

#google-cloud-platform #yaml #openapi #google-cloud-api-gateway

#google-cloud-platform #yaml #openapi #google-cloud-api-gateway

Вопрос:

Я изо всех сил пытаюсь передать параметры пути от моего шлюза к фактическим конечным точкам.

Вот мой открытый API yaml:

 swagger: '2.0'
info:
  description: |
    Blah blah
  version: 0.0.1
  title: SSAuth
  contact:
    email: blah@gmail.com
schemes:
  - https
produces:
  - application/json
paths:
  /v0/auth/users/echo:
    get:
      summary: check the health of api
      operationId: healthCheck
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        200:
          description: OK
      x-google-backend:
        address: https://path-to-my-cloud-run-service/v0/auth/users/echo
      security:
        - api_key: []

  /v0/auth/users/type/{type}:
    post:
      summary: Add a new user to the user
      operationId: addUser
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: type
          in: path
          description: provider type of the user
          required: true
          type: string
      responses:
        400:
          description: Invalid input
        200:
          description: OK
      x-google-backend:
        address: https://path-to-my-cloud-run-service/v0/auth/users/type/`type`
      security:
        - api_key: []

securityDefinitions:
  api_key:
    type: apiKey
    name: X-API-Key
    in: header

  

Когда я ПОЛУЧАЮ первый путь, он работает. Но во втором пути есть параметр path, который я не могу найти способ передать в params на мой URL-адрес для запуска в облаке. В журнале я вижу это https://path-to-my-cloud-run-service/v0/auth/users/type/`type`?type=email вместо https://path-to-my-cloud-run-service/v0/auth/users/type/email , и это приводит к отклонению моей службы из-за недопустимого типа.

Что мне нужно изменить в моем yaml, чтобы это заработало?

Другая проблема, с которой я сталкиваюсь, заключается в том, что запрос GET получает 400 неверных запросов, если я помещаю json в тело, даже если я указываю, что он использует application / json.

Ответ №1:

Нашел решение после поиска здесь.

Это path_transaltion, вот рабочий yaml:

 swagger: '2.0'
info:
  description: |
    Blahblah
  version: 0.0.1
  title: Title
  contact:
    email: blah@gmail.com
schemes:
  - https
produces:
  - application/json
paths:
  /v0/auth/users/echo:
    get:
      summary: check the health of api
      operationId: healthCheck
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        200:
          description: OK
      x-google-backend:
        address: https://path-to-my-service
        path_translation: APPEND_PATH_TO_ADDRESS
      security:
        - api_key: []

  /v0/auth/users/type/{type}:
    post:
      summary: Add a new user to the user
      operationId: addUser
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: type
          in: path
          description: provider type of the user
          required: true
          type: string
      responses:
        400:
          description: Invalid input
        200:
          description: OK
      x-google-backend:
        address: https://path-to-my-service
        path_translation: APPEND_PATH_TO_ADDRESS
      security:
        - api_key: []

securityDefinitions:
  api_key:
    type: apiKey
    name: X-API-Key
    in: header
  

Комментарии:

1. вы пробовали использовать метод PUT и DELETE? Я всегда получаю Cannot PUT /users/{user-id} ошибку

2. Да, мое удаление работает, и я объявил его так же, как GET

3. Именно то, что я ищу. Это работает и для меня. Спасибо.