我正在使用Flask和Flask-Restplus构建一个非常复杂的微服务。
它将有许多endpoint,因此我将每个endpoint组织到一个单独的蓝图中。
下面的示例代码和目录结构应该给你一个提示,让你了解我的想法:
.
├── 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():
...
再一次:
我可以通过邮递员访问我的endpoint,但swagger-UI没有显示任何内容:
通常情况下,我会使用类似于
api.add_resource(TestClass, api_prefix + 'test')
但这似乎无法通过多个蓝图来实现。
有人能给我演示一下如何用api添加/注册这些蓝图(endpointa_api,endpointb_api和endpointc_api)吗?
使用Flask-Restplus有两种可能的解决方案:
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)
蓝图Apis
下面是如何将 API 链接到蓝图的示例。
from flask import Blueprint
from flask_restplus import Api
blueprint = Blueprint('api', __name__)
api = Api(blueprint)
# ...
使用蓝图将允许您在应用程序中的任何url前缀和/或子域上安装API:
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)
我试图得到一个代理工作与蓝图在OSGi(正在通过Karaf)正确,并通过Gradle构建。 我的蓝图文件(名字已经改变,以保护无辜): 我对此感到非常困惑,因为它在抱怨Camel上下文中的标记。我在其他地方使用了完全相同的语法(只是一个不同的包),没有问题。 最后一个“错误”是: RuntimeException:放弃等待服务(ObjectClass=org.apache.camel.CamelC
什么是蓝图? 一个蓝图定义了视图,模板,静态文件以及可以用于应用程序的其它元素的集合。例如,让我们假设下我们有一个管理面板的蓝图。这个蓝图会定义一些包含像 /admin/login 和 /admin/dashboard 路由的视图。它也可能包含服务于这些路由的模板以及静态文件。接着我们可以使用这个蓝图添加一个管理面板到我们的应用程序中,不论我们的应用程序是什么类型的。 为什么要使用蓝图? 蓝图“杀
当我要求MediaWiki API为每个标题提供图像时,它只返回第一个指定标题的图像。例如,查询: http://en.wikipedia.org/w/api.php?format=jsonfm 返回每个页面的信息,但只返回第一页的图像。为什么啊?
我正在开发一个Android应用程序,它可以管理多个蓝牙LE设备,如扬声器、照明设备和各种传感器。 为了方便用户,这些设备必须“分组”在一起,并且只能通过单个蓝牙连接访问。 在这种情况下,是编程某种定制中介硬件来作为所需的接口,还是有更好的解决方案?
问题内容: 我想知道是否可以使用以不同输入参数开头的相同脚本创建服务。如: 可能吗?那么它将启动为串行模式吗?还是分成两个不同的过程?最好的祝福 问题答案: 如果在你的单位的文件,你只能指定一个ExecStart,但您可以添加尽可能多的,但这些都不是适合长期运行的命令,因为它们是串行执行,一切都开始一个开始下一个杀害前。 如果可以指定多个ExecStart,则它们将以串行方式而不是并行运行。 如果