#python #flask #swagger-ui #openapi
Вопрос:
Я работаю на сервере RESTful API flask, и мне нужно создать конечную точку для визуализации моего API с помощью статического файла (.yaml). Я пробовал flask_swagger_ui, но не смог понять, как указать путь к локальному файлу. Я совсем новичок в разработке RESTful API и серверов flask, поэтому был бы рад получить несколько советов, как правильно делать то, что я хочу.
Комментарии:
1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Предполагая, что у вас есть файл спецификации, называемый openapi.yaml
. Если вы хотите самостоятельно разместить документы API, вы можете выполнить следующие действия:
- Создайте файл с именем
app.py
, затем создайте два представления для представления файла спецификаций и страницы пользовательского интерфейса Swagger:
from flask import Flask, render_template, send_from_directory
app = Flask(__name__)
@app.route('/docs')
def swagger_ui():
return render_template('swagger_ui.html')
@app.route('/spec')
def get_spec():
return send_from_directory(app.root_path, 'openapi.yaml')
- Создайте шаблон, называемый
swagger_ui.html
вtemplates
папке со следующим содержимым:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Swagger UI</title>
<link rel="stylesheet" type="text/css" href="https://unpkg.com/swagger-ui-dist@3//swagger-ui.css" >
<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}
body
{
margin:0;
background: #fafafa;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
<script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-standalone-preset.js"></script>
<script>
window.onload = function() {
const ui = SwaggerUIBundle({
url: "{{ url_for('get_spec') }}",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "BaseLayout"
})
}
</script>
</body>
</html>
Окончательная структура файла будет выглядеть следующим образом:
- app.py
- templates
- swagger_ui.html
- openapi.yaml
- Теперь запустите приложение с:
$ flask run
- Затем перейдите к http://localhost:5000/docs.