Как перейти с API на доменное имя в API Flask-restplus?

Я пытаюсь перенаправить 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'] или добавить subdomain в декоратор route. Но ничего не работает. (Я получаю ошибку 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) и добавил ссылку вперед. В этом случае mydomain.info переходит на страницу администрирования swagger, но mydomain.example/v1/server/ping также переходит на страницу администрирования swagger.

Но тем не менее, я получаю xx.xxx.xxx.xx:5005 в разделе URL запроса.

Как мне заставить его работать с именем субдомена?


person zeh    schedule 13.05.2018    source источник
comment
Вы указываете прямо на flask или используете веб-сервер, такой как nginx или apache?   -  person Tarun Lalwani    schedule 19.05.2018
comment
У вас включена конфигурация сервера для виртуальных хостов? Вы создали регистр A для поддомена api у своего хостинг-провайдера? (что позволит вам получить трансляцию DNS, как вы имеете в виду)   -  person Evhz    schedule 26.05.2018


Ответы (1)


Вам не нужно менять конфигурацию приложения. Что вам нужно сделать, так это запустить ваше приложение на сервере WSGI, который будет проксировать ваше приложение (например, на порту 80) через веб-серверы, такие как Apache и Nginx. Серверу WSGI нужна точка входа для связи с вашим приложением через указанный вами порт (5005 во фрагменте кода). Вот довольно простое руководство по этому поводу (для более подробной информации вы также можете обратиться к эту ссылку).

Кроме того, шлюзы API — ваши лучшие друзья, особенно если вы публикуете свои API в общедоступном Интернете. Вы можете просмотреть AWS API Gateway или Apigee для управления API с первоклассной поддержкой Swagger (есть много других, включая OSS).

person 0xack13    schedule 25.05.2018