Реализация API в вебсервере для возврата разных типов данных на примере flask

Для примера пусть сервер возвращает IP клиента

Сделал возврат как , как сделать возврат в и ?

import logging
from flask import Flask, request


app = Flask(__name__)
logging.basicConfig(level=logging.DEBUG)


@app.route('/')
def index():
    return request.remote_addr


if __name__ == '__main__':
    app.run(
        host='0.0.0.0',
        port=5000
    )

Ответы (1 шт):

Автор решения: gil9red

Чтобы flask вернул данные в json достаточно, например, вернуть словарь, пусть это будет {'ip': request.remote_addr}

А чтобы flask вернул как xml нужно вернуть как строку/байты и указать тип, например, text/xml, чтобы клиент имел представление о типе данных от сервера. Для этого нужно вернуть объект Response. Строку xml можно и самостоятельно сгенерировать (типа <ip>127.0.0.1</ip>), но я предпочту сделать через библиотеку, например, xml.etree.ElementTree

Пример:

import logging
import xml.etree.ElementTree as ET

from flask import Flask, request, Response


app = Flask(__name__)
logging.basicConfig(level=logging.DEBUG)


@app.route('/')
def index():
    return request.remote_addr


@app.route('/json')
def get_json():
    return {
        'ip': request.remote_addr,
    }


@app.route('/xml')
def get_xml():
    root = ET.Element('ip')
    root.text = request.remote_addr
    xml_bytes = ET.tostring(root, encoding="utf-8", xml_declaration=True)
    return Response(xml_bytes, mimetype='text/xml')


if __name__ == '__main__':
    app.run(
        host='0.0.0.0',
        port=5000
    )

Результат

Пусть, ip будет 10.10.10.10), обратите внимание на заголовок ответа Content-Type:

→ Ссылка