Я пытаюсь создать REST API с помощью Python Flask, который получает XML-файлы через POST.
Я хотел бы, чтобы API считывал содержимое XML и искал один параметр / ключ («Каталог»), чтобы решить, куда его отправлять, например, как коммутатор для других веб-приложений.
Основная проблема заключается в том, что я продолжаю получать 500 ошибок при использовании Flask request.data или request.form - один из этих методов должен работать с XML, согласно другим аналогичным постам.
Распространенная ошибка 500: «TypeError: Функция представления не вернула правильный ответ. Функция либо вернула None, либо завершилась без оператора return.»
Я пробовал запросы cURL из командной строки, основанные на других потоках StackOverflow, посылать по одному XML за раз, но нет никакой разницы по сравнению с клиентской программой на python, которую я написал для отправки XML (используя библиотеку запросов).
XML-формат, который я использовал для вызова API
<?xml version="1.0" encoding="UTF-8" ?>
<xml>
<Directory>Directory 2</Directory>
<ID>2</ID>
<Name>Jane</Name>
</xml>
Код API Python Flask:
from flask import Flask, request
import xmltodict
import requests
app = Flask(__name__)
@app.route("/XMLhandling", methods=["POST"])
def handleXML():
#for debugging..
if True:
print("HEADERS", request.headers)
print("REQ_path", request.path)
print("ARGS", request.args)
print("DATA", request.data)
print("FORM",request.form)
#parse the XML
datacache = xmltodict.parse(request.form)
print(datacache)
print(datacache['xml']['Directory'])
if datacache['xml']['Directory'] == "Directory 1":
requests.post("http://localhost:25565/XML",data = xml)
elif datacache['xml']['Directory'] == "Directory 2":
requests.post("http://localhost:50001/XML",data = xml)
else:
return 400
if __name__ == '__main__':
app.run(debug = True, port = 5000)
Рад предоставить дополнительную информацию, если это необходимо.