3

我正在尝试将我的烧瓶 api 转发到mydomain.example终点api.mydomain.example

例如,我的方法ping会有一个端点api.mydomain.example/v1/server/ping。但是,我得到的是xx.xxx.xxx.xx:5005/v1/server/ping端点。

在 SO 中查看其他问题时,我发现了修改app.config['SERVER_NAME']或添加subdomainroute装饰器的建议。但没有任何效果。(当我进行任何这些修改时,我会收到 404 错误)。

这是一个最小的工作示例:

from flask import Flask, Blueprint
from flask_restplus import Resource, Api

app = Flask(__name__)
api = Api(app, version='1.0',
          title='My API',
          description='An API')

blueprint = Blueprint('api', __name__, url_prefix='/v1')
api.init_app(blueprint)
app.register_blueprint(blueprint)
#app.config['SERVER_NAME'] = 'mydomain.example:5005'
#app.url_map.default_subdomain = "test"

server = api.namespace("server",
                   description='Server API')


@server.route("/ping") #, subdomain="test")
class Ping(Resource):
    def get(self):
        """
        Check if Server is still alive
        """
        return {"reply":"PONG"}

if __name__ == '__main__':
    app.config["SWAGGER_UI_DOC_EXPANSION"] = "list"
    app.run(port=5005, host= '0.0.0.0', debug=True)

我去了我的域管理页面 ( name.com) 并添加了 url 转发。在这种情况下,mydomain.info转到 swagger 管理页面,但mydomain.example/v1/server/ping也转到 swagger 管理页面。

但是,我仍然在请求 URL 部分得到 xx.xxx.xxx.xx:5005。

如何使其与子域名一起使用?

4

1 回答 1

0

您不必更改应用配置。您需要做的是在 WSGI 服务器上运行您的应用程序,该服务器将通过 Apache 和 Nginx 等 Web 服务器代理您的应用程序(例如在端口 80 上)。WSGI 服务器需要一个入口点,以便在您指定的端口(代码片段中的 5005)上与您的应用程序通信。这是一个相当简单的教程(有关更多详细信息,您也可以参考链接)。

此外,API 网关是您最好的朋友,尤其是当您将 API 发布到公共互联网时。您可以查看AWS API GatewayApigee以进行 API 管理,并为 Swagger 提供一流的支持(还有许多其他支持 - 包括 OSS)。

于 2018-05-25T20:52:06.630 回答