[英]Swagger with Flask-Restplus, API and multiple Blueprints
我正在使用Flask和Flask-Restplus構建一個非常復雜的微服務。
它將有許多端點,因此我將每個端點組織到一個單獨的藍圖中。
以下示例代碼和目錄結構應向您提示我的想法:
.
├── endpoints
│ ├── endpointa.py
│ ├── endpointb.py
│ ├── endpointc.py
│ └── __init__.py
├── __init__.py
└── run.py
我的主要init .py如下所示:
from flask import Flask, Blueprint, logging, jsonify, request, Response
from flask_restplus import Resource, Api
# create app and api
app = Flask(__name__)
api_prefix = '/api/v1/'
# register Blueprints
from endpoints.endpointa import endpointa_api
app.register_blueprint(endpointa_api, url_prefix=api_prefix)
from endpoints.endpointb import endpointb_api
app.register_blueprint(endpointb_api, url_prefix=api_prefix)
from endpoints.endpointc import endpointc_api
app.register_blueprint(endpointc_api, url_prefix=api_prefix)
api = Api(app,
version='1',
title='Test Service REST-API',
description='A REST-API for the Test Service, implemented in python')
if __name__ == '__main__':
app.run(debug=True, host="0.0.0.0", port=5060)
具有相應藍圖的endpointa.py:
from os import environ
import json, ast, syslog
import requests
import gc
from flask import Flask, Blueprint, logging, jsonify, request, Response
from flask_restplus import Resource, Api
endpointa_api = Blueprint('endpointa_api', __name__)
@endpointa_api.route('testa', methods=['GET'])
def testa():
...
@endpointa_api.route('testa/<string:testa_id>', methods=['GET', 'POST'])
def testa_id():
...
再次:
我可以通過郵遞員訪問端點,但是swagger-UI沒有顯示任何內容:
通常我會使用類似的方法將端點添加到API
api.add_resource(TestClass, api_prefix + 'test')
但這似乎無法通過多個藍圖實現。
誰能告訴我如何使用Api添加/注冊這些藍圖(endpointa_api,endpointb_api和endpointc_api)?
使用Flask-Restplus有2種可能的解決方案:
Api
s 您可以在文檔中閱讀有關這兩個方面的信息: https : //flask-restplus.readthedocs.io/en/stable/scaling.html
命名空間
Flask-RESTPlus提供了一種使用與Flask藍圖幾乎相同的模式的方法。 主要思想是將您的應用拆分為可重用的名稱空間。
from flask_restplus import Api
from .namespace1 import api as ns1
from .namespace2 import api as ns2
# ...
from .namespaceX import api as nsX
api = Api(
title='My Title',
version='1.0',
description='A description',
# All API metadatas
)
api.add_namespace(ns1)
api.add_namespace(ns2)
# ...
api.add_namespace(nsX)
藍圖阿皮斯
這是一個如何將Api鏈接到藍圖的示例。
from flask import Blueprint
from flask_restplus import Api
blueprint = Blueprint('api', __name__)
api = Api(blueprint)
# ...
使用藍圖可讓您將API掛載在應用程序中的任何url前綴和/或子域上:
from flask import Flask
from apis import blueprint as api
app = Flask(__name__)
app.register_blueprint(api, url_prefix='/api/1')
app.run(debug=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.