Не работает Flask swagger api (POST-запрос)
Вот код на Python:
from flask import Flask, jsonify, send_from_directory, request
from flask_swagger_ui import get_swaggerui_blueprint
app = Flask(__name__)
information = {
"percentformula": {"formula": "b = a * p/100", "a": "number", "p": "percent", "b": "p percents from a"},
}
@app.route('/percent/<formula>', methods=['GET'])
def get_formula(formula):
f = information.get(formula)
if f:
return jsonify(f), 200
else:
return jsonify(message="Formula not found"), 404
@app.route('/percent', methods=['POST'])
def evaluate_percent():
data = request.json()
try:
a, p = data["number"], data["percent"]
except ValueError:
return jsonify(message="Not enough values to count"), 201
try:
a = int(a)
p = int(p)
except ValueError:
return jsonify(message="not all arguments are integer"), 202
if p > 100:
return jsonify(message="Percent cannot be more than 100"), 203
b = a * p /100
response = {"result": b, "message": "result was obtained successfully"},
if b:
return jsonify(response), 200
else:
return jsonify(message="Error"), 404
# Swagger UI конфигурация
SWAGGER_URL = '/docs' # URL для Swagger UI
API_URL = '/swagger.json' # URL для JSON документации
swaggerui_blueprint = get_swaggerui_blueprint(
SWAGGER_URL,
API_URL,
config={
'app_name': "Percent evaluating API"
}
)
app.register_blueprint(swaggerui_blueprint, url_prefix=SWAGGER_URL)
# Маршрут для swagger.json
@app.route('/swagger.json')
def swagger_json():
return send_from_directory('.', 'swagger.json')
# Запуск сервера
if __name__ == '__main__':
app.run(debug=True, port=5001)
Вот файл swagger.json:
{
"swagger": "2.0",
"info": {
"title": "Percent evaluating API",
"description": "API для рассчёта процента от числа",
"version": "1.0.0"
},
"basePath": "/",
"paths": {
"/percent/{formula}": {
"get": {
"summary": "Получить формулу для полсчёта процента от числа",
"parameters": [
{
"name": "formula",
"in": "path",
"required": true,
"type": "string",
"description": "Формула для рассчёта процента от числа"
}
],
"responses": {
"200": {
"description": "Успешный ответ",
"schema": {
"type": "object",
"properties": {
"formula": {
"type": "string"
},
"a": {
"type": "string"
},
"p": {
"type": "string"
},
"b": {
"type": "string"
}
}
}
},
"404": {
"description": "Формула не найдена"
}
}
}
},
"/percent": {
"post": {
"summary": "Рассчёт процента от числа",
"parameters": [
{
"name": "number",
"in": "query",
"required": true,
"type": "integer",
"description": "Число, от которого необходимо рассчитать процент"
},
{
"name": "percent",
"in": "query",
"required": true,
"type": "integer",
"description": "Процент числа"
}
],
"responses": {
"200": {
"description": "Успешный ответ",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"result": {
"type": "number"
}
}
}
},
"201": {
"description": "Введено недостаточно аргументов"
},
"202": {
"description": "Не все аргументы - целые числа"
},
"203": {
"description": "Процент не может быть больше 100"
},
"404": {
"description": "Формула не найдена"
}
}
}
}
}
}
Swagger выдаёт вот такую ошибку на POST запрос: Unsupported Media Type Did not attempt to load JSON data because the request Content-Type was not 'application/json'.
GET запрос работает нормально. Как можно установить этот media type? Помогите, совсем не понимаю, в чём проблема...
я пробовала вставлять media type в json, однако это выдаёт ошибку.