Python 仅限restful输出XML

Python 仅限restful输出XML,python,xml,flask,python-requests,flask-restful,Python,Xml,Flask,Python Requests,Flask Restful,我刚刚开始尝试创建API,我很有兴趣制作一个只在API post请求时以XML格式返回数据的应用程序 下面的flask restful代码只是如何进行示例查看的美化版本 from simplexml import dumps from flask import make_response, Flask from flask_restful import Api, Resource def output_xml(data, code, headers=None): ""

我刚刚开始尝试创建API,我很有兴趣制作一个只在API post请求时以XML格式返回数据的应用程序

下面的flask restful代码只是如何进行示例查看的美化版本

from simplexml import dumps
from flask import make_response, Flask
from flask_restful import Api, Resource

def output_xml(data, code, headers=None):
    """Makes a Flask response with a XML encoded body"""
    resp = make_response(dumps({'response' :data}), code)
    resp.headers.extend(headers or {})
    return resp


tou = [{
    "startTime": "2:00PM",
    "duration": "6 Hours",
    "numberOfIntervals" : 3,
    "intervalDuration" : "1 hour,4 hour,1 hour",
    "typicalIntervalValues" : "$0.50,$0.75,$0.50"
}]



app = Flask(__name__)
api = Api(app, default_mediatype='application/xml')
api.representations['application/xml'] = output_xml


class call(Resource):
    def post(self):
        callInfo = {"notification" : "True",
                "startTime" : "2:00PM",
                "duration" : "6 Hours",
                "randomization": "None",
                "rampUp" : "None",
                "recovery" : "None",
                "numberOfSignals" : "2",
                 "signalNameSimple" : [{
                    "signalType" : "level",
                    "units" : "None",
                    "numberOfIntervals" : "None",
                    "intervalDuration" : "None",
                    "typicalIntervalValues" : "1,2,1",
                    "signalTarget" : "None"}],
                 "signalNameElectricityPrice" : [{
                    "signalType" : "price",
                    "units" : "USD per kWh",
                    "numberOfIntervals" : "3",
                    "intervalDuration" : "1 hour,4 hour,1 hour",
                    "typicalIntervalValues" : "$0.50,$0.75,$0.50",
                    "signalTarget" : "None"}]
                        }
        return callInfo



api.add_resource(call, '/api/v1/cpp/scenario/three')


if __name__ == '__main__':
    app.run(debug=False)
我遇到的问题(也许这根本不是问题)是Flask restful应用程序只会返回一个XML响应,如果它在请求头中定义了,否则它将返回一个JSON响应。例如,在下面的代码中,如果我没有
标题={'Accept':'application/xml'}
这个脚本将出错,因为Flask restful应用程序响应是JSON格式的

import requests
import xml
from xml.etree import ElementTree


response = requests.post("http://127.0.0.1:5000/api/v1/cpp/scenario/three", headers={'Accept': 'application/xml'})
#response = requests.post("http://127.0.0.1:5000/api/v1/cpp/scenario/three")


root = ElementTree.fromstring(response.content)
for child in root.iter('*'):
    print(child.tag)

问题,我如何修改我的Flask应用程序,使其只返回XML?如果这似乎是一个愚蠢的问题,有人能详细说明为什么API需要JSON和XML吗?我希望了解如何实现这一点的现实世界场景仅使用XML,我担心有这个额外的
headers={'Accept':'application/XML'}
会产生问题,因为与API通信的设备只是“机器”,而不是具有自定义python编码能力的人。如果有人能帮助我了解API行业的典型情况,也许这也会有点帮助:)

嗨,亨利。你找到这个问题的答案了吗?我遇到了一个非常类似的情况,我想根据请求体输出xml或json,但不接受:application/xml数据。不,抱歉,我从来没有想到这一点哦,好吧!这个问题陈述没有很好的文档或例子。我想我们就到此为止吧。