Автор оригинала: Ali Abdelaal.
Вступление
В этом уроке вы узнаете, как развернуть приложение Flask в Heroku. Приложение может быть таким же простым, как приложение “Hello World” для платформы мониторинга социальных сетей!
В настоящее время нет ни одного бизнеса, у которого не было бы веб-приложения, которое помогло бы ему охватить большую аудиторию или, возможно, предоставить свои услуги через онлайн-портал.
Сегодня вы узнаете, как создать API с помощью Flask в качестве примера развертывания вашего приложения на Heroku.
Создание REST API с помощью Flask
В вашем каталоге проекта давайте начнем с создания virtualenv:
$ python -m venv venv/
И давайте активируем его с помощью команды source
:
$ source venv/bin/activate
Затем давайте используем pip
для установки библиотек, которые мы собираемся использовать – flask
для создания приложения и gunicorn
в качестве нашего сервера:
$ pip install flask $ pip install gunicorn
Наше приложение будет представлять собой простой API, который получает имя и возвращает приветственное сообщение:
# app.py from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/getmsg/', methods=['GET']) def respond(): # Retrieve the name from url parameter name = request.args.get("name", None) # For debugging print(f"got name {name}") response = {} # Check if user sent a name at all if not name: response["ERROR"] = "no name found, please send a name." # Check if the user entered a number not a name elif str(name).isdigit(): response["ERROR"] = "name can't be numeric." # Now the user entered a valid name else: response["MESSAGE"] = f"Welcome {name} to our awesome platform!!" # Return the response in json format return jsonify(response) @app.route('/post/', methods=['POST']) def post_something(): param = request.form.get('name') print(param) # You can add the test cases you made in the previous function, but in our case here you are just testing the POST functionality if param: return jsonify({ "Message": f"Welcome {name} to our awesome platform!!", # Add this option to distinct the POST request "METHOD" : "POST" }) else: return jsonify({ "ERROR": "no name found, please send a name." }) # A welcome message to test our server @app.route('/') def index(): return "Welcome to our server !!
" if __name__ == '__main__': # Threaded option to enable multiple instances for multiple user access support app.run(threaded=True, port=5000)
Чтобы протестировать ваше приложение локально, давайте нажмем кнопку http://127.0.0.1:5000/ конечная точка. Если все в порядке, мы должны быть встречены приветственным сообщением:
Мы также можем отправить имя в качестве параметра, например http://localhost:5000/getmsg/?name=Mark
:
{"MESSAGE":"Welcome Mark to our awesome platform!!"}
Когда ваше приложение готово, давайте развернем его в Хероку .
Хероку
Heroku является одной из первых облачных платформ как сервис (PaaS) и поддерживает несколько языков – Ruby, Java, Node.js, Scala, Clojure, Python, PHP и Go.
Первое, что нам нужно сделать, это определить, какие библиотеки использует наше приложение. Таким образом, Heroku знает, какие из них предоставить нам, подобно тому, как мы устанавливаем их локально при разработке приложения.
Чтобы достичь этого, нам нужно создать requirements.txt
файл со всеми модулями:
$ pip freeze > requirements.txt
Таким образом, мы получаем requirements.txt
файл, содержащий библиотеки, которые мы используем, и их версии:
Click==7.0 Flask==1.1.1 gunicorn==19.9.0 itsdangerous==1.1.0 Jinja2==2.10.1 MarkupSafe==1.1.1 Werkzeug==0.15.6
Примечание: Одной из распространенных ошибок является неправильное написание требований, это настоящая боль, когда вы часами отлаживаете свой код и обнаруживаете, что приложение не запускается из-за того, что сервер не загрузил модули. Единственный способ для Heroku узнать модули, которые вы используете, – это добавить их в requirements.txt
файл, так что будьте осторожны!
Чтобы Heroku мог запускать наше приложение так, как оно должно, нам нужно заранее определить набор процессов/команд, которые оно должно запускать. Эти команды находятся в Профиле
:
web: gunicorn app:app
Команда web
указывает Heroku запустить веб-сервер для приложения, используя gunicorn
. Так как наше приложение называется app.py
, мы также установили имя app
как app
.
Счет Heroku
Теперь мы должны создать учетную запись Heroku .
Как только это будет сделано, на панели мониторинга выберите New -> Create new app :
Выберите имя для приложения и выберите регион, в котором вы хотите его разместить:
Как только приложение будет создано на Heroku, мы будем готовы развернуть его онлайн.
Мерзавец
Чтобы загрузить наш код, мы будем использовать Git . Во-первых, давайте сделаем репозиторий git:
$ git init .
А теперь давайте добавим наши файлы и зафиксируем
:
$ git add app.py Procfile requirements.txt $ git commit -m "first commit"
Развертывание приложения в Heroku
Чтобы окончательно развернуть приложение, нам нужно будет установить Heroku CLI , с помощью которого мы будем запускать команды, связанные с Heroku. Давайте войдем в вашу учетную запись, используя наши учетные данные, выполнив команду:
$ heroku login -i
Кроме того, мы можем войти в систему с помощью браузера, если запустим команду:
$ heroku login
На этом этапе, войдя в систему, мы должны добавить наш репозиторий в удаленный:
$ heroku git:remote -a {your-project-name}
Обязательно замените {your-project-name}
фактическим именем вашего проекта, выбранным на предыдущем шаге.
И когда это будет сделано, давайте загрузим проект, нажав его на Heroku:
$ git push heroku master
На вашем терминале должен появиться длинный журнал прогресса, заканчивающийся словами:
... remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 45.1M remote: -----> Launching... remote: Released v4 remote: https://{your-project-name}.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/{your-project-name}.git ae85864..4e63b46 master -> master
Поздравляем, вы успешно загрузили свое первое веб-приложение в Heroku! Теперь пришло время протестировать и проверить наш API.
Тестирование API
В журнале, который был показан в консоли, вы найдете ссылку для вашего приложения https://{your-project-name}.herokuapp.com/
, эту ссылку также можно найти на вкладке Настройки в разделе Домены и сертификаты :
Перейдя по ссылке, мы можем перейти к нашему приложению, которое теперь находится в сети и общедоступно:
В случае возникновения каких-либо ошибок вы можете получить доступ к журналам и устранить неполадки оттуда:
Вы можете вручную протестировать свое приложение в браузере, введя URL-адрес и добавив путь к маршруту /getmsg/|. Хотя, поскольку приложения, как правило, становятся все более и более сложными, рекомендуется использовать такие инструменты, как
Postman .
Теперь давайте протестируем запрос GET
к нашему приложению с параметром name
:
Теперь давайте протестируем URL-адрес, который не привязан ни к какой функции , например /new url
, с помощью запроса GET:
Как и ожидалось, наше приложение Flask вернуло ответ 404.
Примечание: Вы можете изменить вид вывода из Pretty , Raw и Preview , которые показывают вам , как будет выглядеть вывод в вашем браузере.
Теперь давайте протестируем POST
запрос:
Кроме того, давайте посмотрим, что произойдет, если мы полностью опустим параметр name
:
{"ERROR":"no name found, please send a name."}
Мы протестировали наше приложение и подтвердили, что все работает нормально. Чтобы увидеть историю вашего сервера и какие запросы были сделаны вы можете проверить журналы для вашего сайта через Heroku:
Вы можете увидеть здесь POST
запрос, который мы сделали на нашу страницу /post/|.
Кроме того, вы можете увидеть историю создания приложения. Более того, если во время сборки возникнут какие-либо проблемы, вы можете найти их на странице журнала.
Вывод
В этой статье мы показали простой пример построения нашего первого простого API на Heroku с использованием микро-фреймворка Flask. Процесс разработки остается таким же, как и при создании приложения.
Heroku предлагает бесплатный план и студенческие планы. Бесплатный план ограничен, но он довольно хорошо работает, например, для стартового приложения, POC или простого проекта. Однако если вы хотите масштабировать свое приложение, то вам следует рассмотреть один из планов, доступных на сайте по адресу here .
Для получения дополнительной информации о Heroku вы можете проверить само руководство Heroku .