Google Cloud Запускает незарегистрированные 502 ответа на запросы DEL

# #python #gunicorn #flask-restful #google-cloud-run #http-delete

Вопрос:

Я создал очень простой облачный сервис Google на Python, чтобы поэкспериментировать с API Restful:

 import os
from flask import Flask

app = Flask(__name__)

@app.route('/user/<user_name>', methods=['PUT'])
def create_user(user_name):
    return 'created!', 200

@app.route('/user/<user_name>', methods=['DEL'])
def delete_user(user_name):
    return 'deleted!', 200

if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
 

Мне удалось успешно развернуть эту службу в облачном режиме, используя этот файл Dockerfile.

Чтобы протестировать службу, я использую curl для доступа к развернутой конечной точке:

 $curl -X PUT https://testapi.xxxxxxxx.a.run.app/user/prl900
created!
 

Однако запрос DEL вызывает ошибку 502, и, как ни странно, это не регистрируется в платформе ведения журнала Cloud Run.

 $curl -X DEL https://testapi.xxxxxxxx.a.run.app/user/prl900
...
...
<p><b>502.</b> <ins>That’s an error.</ins>
  <p>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.  <ins>That’s all we know.</ins>
 

Все остальные методы отклоняются и правильно регистрируются в бэкэнде, как и ожидалось:

 $curl -X PATCH https://testapi.xxxxxxxx.a.run.app/user/prl900
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>
 

Может ли кто — нибудь понять причину того, что Cloud Run не обрабатывает запросы DEL и не регистрирует их? Есть ли что-то особенное в том, чтобы выполнять запросы DEL в облаке? Служба отлично работает на моем локальном компьютере.

Спасибо за вашу помощь

Ответ №1:

Правильный глагол HTTP-это DELETE не DEL так . Вам нужно изменить маршрут вашей колбы, чтобы:

 @app.route('/user/<user_name>', methods=['DELETE'])
 

и тогда правильная команда curl будет:

 curl -X DELETE https://testapi.xxxxxxxx.a.run.app/user/prl900
 

Использование нестандартного глагола приводит к тому, что какой-либо прокси в gcloud infra, который находится перед вашим сервисом, отказывается направлять запрос. Это объясняет 502 (плохой шлюз) и то, почему журналы не отображаются (они никогда не достигают вашей службы).

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

1. Спасибо @Matthew, в этом есть смысл. Это сбивало с толку, так как служба работала на моем локальном компьютере.