# #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, в этом есть смысл. Это сбивало с толку, так как служба работала на моем локальном компьютере.