使用Python + Flask + MongoDB创建Web API,并部署到Azure VM + Nginx上(收集Hololive视频直播计划的第三部分)
首先
我們之前(https://qiita.com/kerobot/items/41f266dd52988f9bb68e)將Hololive的直播預定和影片信息收集系統部署到了Azure VM上的Ubuntu,並定期執行。
这次,我们将在Azure VM上的Ubuntu的MongoDB上创建一个Web API,用于获取Hololive直播计划和视频信息,并将其部署到Azure VM(Ubuntu)+ Nginx + gunicorn上进行测试。
首先,在本地环境中创建并确认 Web API 的操作,然后将其部署到 Azure 虚拟机 (Ubuntu) + Nginx + gunicorn。
-
- Nginx : Webサーバー(今回はリバースプロキシとして利用)
-
- gunicorn : WSGI アプリケーションを起動させる WSGI サーバー
- WSGI(ウィスギー) : Web サーバーとWeb アプリケーション(フレームワーク)を接続するためのインターフェース
最终想要做的事情
最近我经常浏览虚拟YouTuber制作公司「Hololive」等的视频发布计划,并希望利用Web API将这些信息定期存储到数据库中,再通过Android应用程序进行查看。
-
- 创建一个用于收集视频流程的程序(已完成)
-
- 创建数据库并自动收集已收集的视频流程(已完成)
-
- 创建用于参考已存储视频流程的Web API(本次)
- 创建用于浏览视频流程的Android应用程序,通过参考Web API(本次)
做过的事情 (zuò guò de shì
这次我们完成了“创建用于查看存储的视频发布计划的 Web API”的任务,任务编号为3。
我原本想要使用AppService来部署Web API,但因为一些问题(稍后会提到),最终选择在Azure虚拟机(Ubuntu)上安装Nginx + gunicorn来部署。
-
- Chinese paraphrase:
准备本地环境
确认可使用pyenv(pyenv-win)
确认可使用Poetry
确认与MongoDB的连接
项目准备
使用Poetry创建项目并安装包
使用pyenv设置Python版本
初始化git
创建.gitignore文件
创建.env文件
编写程序
从.env文件获取配置信息
保持来自holology的信息
创建使用Flask的Web API模块
在本地环境中运行
创建lounch.json
调试运行程序
使用Postman验证Web API的功能
创建Nginx配置文件
文件结构
使用Azure AppService
这次放弃
准备Azure VM环境
确认可使用pyenv
确认可使用Poetry
确认与MongoDB的连接
部署程序
部署和设置程序
创建.env文件
验证程序的运行
引入Nginx并发布Web API
引入Nginx
执行反向代理,使用配置文件指定
通过反向代理验证运行情况
从本地环境进行验证
准备本地环境
我們已經準備好下列組成的環境。
-
- Windows 10 Pro 1909 x64
-
- Python 3.8.5 x64
-
- PowerShell 7.1 x64
-
- Visual Studio Code 1.51.1 x64
-
- Git for Windows 2.27.0 x64
- MongoDB 4.4.1 x64
确认pyenv (pyenv-win)可用。
参考资料:在 Windows 10 上安装 Python、使用 Poetry 和 pyenv
> pyenv --version
pyenv 2.64.2
确认诗歌可用。
参考:在Windows 10上安装Python并使用Poetry和pyenv。
> poetry --version
Poetry version 1.1.0
确认连接到MongoDB数据库
参考来源:在Windows 10上安装MongoDB并从Python中使用
> mongo --version
MongoDB shell version v4.4.1
Build Info: {
"version": "4.4.1",
"gitVersion": "ad91a93a5a31e175f5cbf8c69561e788bbc55ce1",
"modules": [
"enterprise"
],
"allocator": "tcmalloc",
"environment": {
"distmod": "windows",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
确认连接到存储有Hololive直播时间表和视频信息的holoduledb。
参考资料:使用Python3进行网络爬虫、YouTube数据API和MongoDB(收集Hololive的视频直播计划 第2部分)
> mongo localhost:27017/holoduledb -u owner -p
MongoDB shell version v4.4.1
> show collections
holodules
> db.holodules.find().sort({"datetime":-1});
{ "_id" : ObjectId("5f85996f7fc0cba6f1309217"), "key" : "HL0204_20201014_193000", "video_id" : "LiItELTkkko", "datetime" : "20201014 193000", "name" : "癒月ちょこ", "title" : "【#カレーメシWEEK】ちょこ先生が味変えアレンジカレーメシ作ってみ たら【ホロライブ/癒月ちょこ】", "url" : "https://www.youtube.com/watch?v=LiItELTkkko", "description" : "サブ垢→https://www.youtube.com/channel/UCp3tgHXw_HI0QMk1K8qh3gQ◎2周年記念グッズ期間限定発売決定!ご購入はコチラ⇊https://hololi" }
...
> exit
项目的准备
使用Poetry和pyenv来创建项目并安装软件包。
使用诗歌来创作项目。
> poetry new holoapi
我要进入项目目录。
> cd holoapi
我们将目录和文件的结构设置如下。
holoapi
├ config
├ models
├ pyproject.toml
└ README.md
为了以防万一,我会更新pyenv。
> pyenv update
查看可安装的Python版本。
> pyenv install -l
检查已安装的 Python 版本。
> pyenv versions
如果尚未安装Python 3.8.5,则会进行安装。
> pyenv install 3.8.5
ローカル(プロジェクトディレクトリ内)で利用する Python をセットします。
> pyenv local 3.8.5
切り替わったかを確認します。
> python -V
Python 3.8.5
如果切換至設定的 Python 失敗,請通過重新哈希更新 shim 命令。
> pyenv rehash
これにより、$HOME/.pyenv/shims/ 配下のコマンドが更新され、セットした Python に切り替わります。
poetry を利用してパッケージを pyproject.toml に追加しインストールします。
由于gunicorn无法在Windows环境下运行,因此我们在这里添加了它作为后续在Azure VM的Ubuntu上使用的包。
> poetry add pylint
> poetry add python-dotenv
> poetry add pymongo
> poetry add Flask
> poetry add gunicorn
パッケージがインストールされるとともに、pyproject.toml が下記のように更新されました。
可以在pyproject.toml中写入包后执行poetry install。
[tool.poetry.dependencies]
python = "^3.8"
pylint = "^2.6.0"
python-dotenv = "^0.15.0"
pymongo = "^3.11.1"
Flask = "^1.1.2"
gunicorn = "^20.0.4"
我們將使用Python中的程式碼,利用poetry來確認版本。
> poetry run python -V
Python 3.8.5
初始化 Git。
Note: The above translation is in simplified Chinese. If you would prefer Traditional Chinese, please let me know.
我会初始化git。
> git init
创建.gitignore文件。
.gitignore ファイルを作成し、除外対象を設定しておきます。
> ni .gitignore
__pycache__/
*.egg-info/
*.egg
.env
.venv
env/
venv/
.python-version
.env の作成
MongoDB の接続情報などを設定しておくためのファイルを作成します。
> ni .env
MONGODB_USER = "<user>"
MONGODB_PASSWORD = "<password>"
MONGODB_HOST = "<localhost:27017>"
编写程序
保持存储从.env获取的配置信息的类。
创建config/settings.py文件。
这次我们没有使用Flask的配置相关功能,而是重复使用了以前使用过的类。
import os
from dotenv import load_dotenv
class Settings:
def __init__(self, envpath):
# .env ファイルを明示的に指定して環境変数として読み込む
self.__dotenv_path = envpath
load_dotenv(self.__dotenv_path)
# 環境変数から設定値を取得
self.__mongodb_user = os.environ.get("MONGODB_USER")
self.__mongodb_password = os.environ.get("MONGODB_PASSWORD")
self.__mongodb_host = os.environ.get("MONGODB_HOST")
# mongodb の ユーザー
@property
def mongodb_user(self):
return self.__mongodb_user
# mongodb の パスワード
@property
def mongodb_password(self):
return self.__mongodb_password
# mongodb の ホスト:ポート
@property
def mongodb_host(self):
return self.__mongodb_host
保留从Holodule获取的信息的类。
创建models/holodule.py文件。
在这个例子中,我们也没有使用Flask-MongoEngine或模型机制,而是重用了之前使用的类,并添加了一个方法来转换对象和字典。
import datetime
class Holodule:
codes = {
"ときのそら" : "HL0001",
"ロボ子さん" : "HL0002",
"さくらみこ" : "HL0003",
"星街すいせい" : "HL0004",
"夜空メル" : "HL0101",
"アキ・ローゼンタール" : "HL0102",
"赤井はあと" : "HL0103",
"白上フブキ" : "HL0104",
"夏色まつり" : "HL0105",
"湊あくあ" : "HL0201",
"紫咲シオン" : "HL0202",
"百鬼あやめ" : "HL0203",
"癒月ちょこ" : "HL0204",
"大空スバル" : "HL0205",
"大神ミオ" : "HL0G02",
"猫又おかゆ" : "HL0G03",
"戌神ころね" : "HL0G04",
"兎田ぺこら" : "HL0301",
"潤羽るしあ" : "HL0302",
"不知火フレア" : "HL0303",
"白銀ノエル" : "HL0304",
"宝鐘マリン" : "HL0305",
"天音かなた" : "HL0401",
"桐生ココ" : "HL0402",
"角巻わため" : "HL0403",
"常闇トワ" : "HL0404",
"姫森ルーナ" : "HL0405",
"獅白ぼたん" : "HL0501",
"雪花ラミィ" : "HL0502",
"尾丸ポルカ" : "HL0503",
"桃鈴ねね" : "HL0504",
"魔乃アロエ" : "HL0505"
}
def __init__(self, video_id="", datetime=None, name="", title="", url="", description=""):
self.__video_id = video_id
self.__datetime = datetime
self.__name = name
self.__title = title
self.__url = url
self.__description = description
# キー
@property
def key(self):
_code = Holodule.codes[self.name] if self.name in Holodule.codes else ""
_dttm = self.datetime.strftime("%Y%m%d_%H%M%S") if self.datetime is not None else ""
return _code + "_" + _dttm if ( len(_code) > 0 and len(_dttm) > 0 ) else ""
# video_id
@property
def video_id(self):
return self.__video_id
@video_id.setter
def video_id(self, video_id):
self.__video_id = video_id
# 日時
@property
def datetime(self):
return self.__datetime
@datetime.setter
def datetime(self, datetime):
self.__datetime = datetime
# 名前
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
# タイトル(Youtubeから取得)
@property
def title(self):
return self.__title
@title.setter
def title(self, title):
self.__title = title
# URL
@property
def url(self):
return self.__url
@url.setter
def url(self, url):
self.__url = url
# 説明(Youtubeから取得)
@property
def description(self):
return self.__description
@description.setter
def description(self, description):
self.__description = description
# ドキュメントから変換
@classmethod
def from_doc(cls, doc):
holodule = Holodule(doc['video_id'],
datetime.datetime.strptime(doc['datetime'], '%Y%m%d %H%M%S'),
doc['name'],
doc['title'],
doc['url'],
doc['description'])
return holodule
# ドキュメントへ変換
def to_doc(self):
doc = { 'key': str(self.key),
'video_id': str(self.video_id),
'datetime' : str(self.datetime.strftime("%Y%m%d %H%M%S")),
'name' : str(self.name),
'title' : str(self.title),
'url' : str(self.url),
'description' : str(self.description) }
return doc
使用Flask来创建Web API模块
创建app.py文件。
我們這次嘗試使用輕量級的 Flask 框架作為創建 Web API 的框架。這只是一個實現最基本功能的 Web API。
from flask import Flask, jsonify, request, abort, make_response
from pymongo import MongoClient
from os.path import join, dirname
import json
from urllib.parse import quote_plus
from config.settings import Settings
from models.holodule import Holodule
# Settings インスタンス
settings = Settings(join(dirname(__file__), '.env'))
# MongoDB 接続情報
mongodb_user = quote_plus(settings.mongodb_user)
mongodb_password = quote_plus(settings.mongodb_password)
mongodb_host = "mongodb://%s/" % (settings.mongodb_host)
# MongoDB 接続認証
client = MongoClient(mongodb_host)
db = client.holoduledb
db.authenticate(name=mongodb_user,password=mongodb_password)
# Flask
app = Flask(__name__)
# JSONのソートを抑止
app.config['JSON_SORT_KEYS'] = False
# 動作確認用
@app.route('/')
def index():
return 'holoapi'
# ホロジュール配信予定の取得
@app.route('/Holodules/<string:date>', methods=['GET'])
def get_Holodules(date):
if len(date) != 8:
abort(500)
# MongoDB から年月日を条件にホロジュール配信予定を取得してリストに格納
holodule_list = []
for doc in db.holodules.find({"datetime": {'$regex':'^'+date}}).sort("datetime", -1):
holodule = Holodule.from_doc(doc)
holodule_list.append(holodule)
if len(holodule_list) == 0:
abort(404)
# オブジェクトをもとに辞書を構築してJSONとして返却
data = {}
for holodule in holodule_list:
doc = holodule.to_doc()
data[doc['key']] = doc
result = {
"result":len(holodule_list),
"data":data
}
# UTF-8コード、Content-Type は application/json
return make_response(jsonify(result))
# UTF-8文字、Content-Type は text/html; charset=utf-8
# return make_response(json.dumps(result, ensure_ascii=False))
# エラーハンドラ:404
@app.errorhandler(404)
def not_found(error):
return make_response(jsonify({'error': 'Not found'}), 404)
# エラーハンドラ:500
@app.errorhandler(500)
def internal_server_error(error):
return make_response(jsonify({'error': 'Internal Server Error'}), 500)
if __name__ == "__main__":
app.run()
在本地环境下执行
创建lounch.json
在 Visual Studio Code 中创建 launch.json。
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
程序的调试执行
在Visual Studio Code中进行调试执行。
如果您要从命令行执行,请按照以下方法执行。
> poetry run python app.py
本地服务器将在默认端口5000上启动。
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
按下 Ctrl + C 可以退出。
使用 Postman 进行 Web API 的操作确认
我将使用 Postman 访问所创建的 Web API。
只指定 GET 请求的 URL,不带任何查询参数。
http://127.0.0.1:5000/Holodules/20201011
成功获取了JSON响应主体。
由于使用了jsonify,因此Content-Type为application/json。
这样的感觉。
{
"result": 26,
"data": {
"HL0501_20201011_230000": {
"key": "HL0501_20201011_230000",
"video_id": "NKFFXwZx8hw",
"datetime": "20201011 230000",
"name": "獅白ぼたん",
"title": "【アソビ大全】るしあ先輩と今日はアソビつくす大全!【ホロライブ/#るししし】",
"url": "https://www.youtube.com/watch?v=NKFFXwZx8hw",
"description": "るしあ先輩と遊びつくすよ!感想は #るししし でつぶやいてね!この動画およびライブは、任天堂著作物の利用許諾を受けて配信しています。?潤羽るしあhttps://twitter.com/uruharus"
},
"HL0002_20201011_223800": {
"key": "HL0002_20201011_223800",
"video_id": "XFO_4O-aBGM",
"datetime": "20201011 223800",
"name": "ロボ子さん",
"title": "【耐久SP 】35万人記念にみんなで出すぞ35万ダメージ!!APEX参加型#2【ホロライブ/ロボ子さん】",
"url": "https://www.youtube.com/watch?v=XFO_4O-aBGM",
"description": "#RBC350K耐久SP #APEX #ホロライブ34・35万人記念をまとめて耐久すぺしゃる!!カジュアルでみんなとの通算ダメージで35万を目指すよ!クロスプレイとPCのみで時間分けます!#RBC3"
},
...
}
}
到此为止,本地环境下的Web API创建已完成。
创建Nginx配置文件
Azure VM (Ubuntu) + Nginx + gunicorn の環境へ配置するため、事前に Nginx のコンフィグファイルを作成しておきました。
config/nginx.conf ファイルを作成し、ポート 8080 を http://127.0.0.1:8888 へ転送するためのリバースプロキシを設定しているだけです。
worker_processes 1;
events {
worker_connections 512;
}
http {
server {
listen 8080;
server_name HOLOAPI;
charset UTF-8;
proxy_set_header Host $host;
location / {
proxy_pass http://127.0.0.1:8888;
}
}
}
文件架构
holoapi
├ .venv
├ .vscode
| └ launch.json
├ config
| ├ __init__.py
| ├ nginx.conf
| └ settings.py
├ models
| ├ __init__.py
| └ holodule.py
├ .env
├ .gitignore
├ .python-version
├ app.py
├ poetry.lock
├ pyproject.toml
└ README.md
使用 Azure AppService
Azure AppService を利用して Flask アプリケーションを配置し、Azure VM (Ubuntu) の MongoDB にアクセスしようとしたのですが、Azure AppService と Azure VM をネットワーク接続するためには VNet統合 を利用する必要があり、VNet統合 は Azure AppService のスタンダードプラン以上でなければいけないため今回は断念しました。
- Azure App Service on Linux で Python アプリを作成する
とはいえ、Azure AppService と VNet統合 を利用するために、仮想ネットワークのサブネットを切り替えたり、実際に試してみたりもしたので、あらためて挑戦してみたいと思います。
- アプリを Azure 仮想ネットワークと統合する
准备Azure虚拟机环境
参考:使用 Azure VM 上的 Ubuntu 20.04(LTS)安装 Python3 和 MongoDB(继续收集 Hololive 视频直播计划的第二部分)。
我們為下面構成的環境做好了準備。
-
- Azure VM の Ubuntu 20.04(LTS)
-
- Python 3.8.6 x64
-
- Git 2.25.1 x64
- MongoDB 4.4.2 x64
我现在正在连接到Azure VM上的Ubuntu,使用SSH进行操作。
确认pyenv是否可用。
$ pyenv --version
pyenv 1.2.21
确认诗歌可使用
$ poetry --version
Poetry version 1.1.4
请确认MongoDB的连接。
$ mongo --version
MongoDB shell version v4.4.2
Build Info: {
"version": "4.4.2",
"gitVersion": "15e73dc5738d2278b688f8929aee605fe4279b0e",
"openSSLVersion": "OpenSSL 1.1.1f 31 Mar 2020",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "ubuntu2004",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
确认连接到 holoduledb,该数据库存储了 Hololive 直播时间表和视频信息。
> mongo localhost:27017/holoduledb -u owner -p
MongoDB server version: 4.4.2
> show collections
holodules
> db.holodules.find().sort({"datetime":-1});
{ "_id" : ObjectId("5fcee53448b99985d55d7346"), "key" : "HL0304_20201208_200000", "video_id" : "sjKsUZ8wM-8", "datetime" : "20201208 200000", "name" : "白銀ノエル", "title" : "【#白銀ノエル謎肉牛丼】新発売『カップヌードル謎肉牛丼』の食レポ 配信します!", "url" : "https://www.youtube.com/watch?v=sjKsUZ8wM-8", "description" : "▼カップヌードル 謎肉牛丼 商品情 報https://www.nissin.com/jp/products/items/10245▼カップヌードル 謎肉牛丼 オンラインストアhttps://store." }
...
> exit
程序的布置
从GitHub克隆程序并进行配置和设置。
程序布局与配置
$ cd ~
$ git clone https://github.com/kerobot/holoapi.git holoapi
$ cd holoapi
使用pyenv可以在本地环境中切换Python的版本。
$ pyenv local 3.8.6
使用Poetry来安装Python虚拟环境和软件包。
$ poetry install
我将更新Python虚拟环境中的pip。
$ /home/mcuser/holoapi/.venv/bin/python -m pip install --upgrade pip
Collecting pip
Downloading pip-20.2.4-py2.py3-none-any.whl (1.5 MB)
|████████████████████████████████| 1.5 MB 5.4 MB/s
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 20.2.2
Uninstalling pip-20.2.2:
Successfully uninstalled pip-20.2.2
Successfully installed pip-20.2.4
创建.env文件
创建一个文件来设置MongoDB的连接信息等。
$ cp .env.sample .env
MONGODB_USER = "<user>"
MONGODB_PASSWORD = "<password>"
MONGODB_HOST = "<localhost:27017>"
确认程序的运行
首先,使用 Flask 的开发服务器来运行程序。
$ poetry run flask run
开发服务器已经启动。
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
我将使用curl命令进行GET请求。
$ curl "http://127.0.0.1:5000/"
holoapi
网络 API 已响应。
我将使用 Ctrl + C 结束。
这种方法只是用于开发,所以我们将使用一个名为 gunicorn 的 WSGI 服务器来运行程序。
$ poetry run gunicorn -w 1 -b 0.0.0.0:8888 app:app
WSGI服务器已启动。
[2020-12-08 13:53:52 +0900] [35797] [INFO] Starting gunicorn 20.0.4
[2020-12-08 13:53:52 +0900] [35797] [INFO] Listening at: http://0.0.0.0:8888 (35797)
[2020-12-08 13:53:52 +0900] [35797] [INFO] Using worker: sync
[2020-12-08 13:53:52 +0900] [35833] [INFO] Booting worker with pid: 35833
我尝试使用curl命令进行GET请求。
$ curl "http://127.0.0.1:8888/"
holoapi
就算是用gunicorn,Web API也会响应回来。
Nginx 的安装与 Web API 的发布
我尝试了引入Nginx,并进行了反向代理的设置。
在中国本土的翻译选项:
引入 Nginx
安装Nginx。
$ sudo apt install nginx
我要确定 Nginx 的版本。
$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
确认服务器已经启动。
$curl 'http://localhost'
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
...
这个进程以守护程序的形式在此状态下运行。
$ ps ax | grep nginx
10278 ? Ss 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
11918 ? S 0:00 nginx: worker process
11919 ? S 0:00 nginx: worker process
要停止daemon等操作,可以按照以下的方式进行。
$ sudo nginx –s stop すぐに停止
$ sudo nginx -s quit リクエスト処理が完了した後に停止
$ sudo nginx -s reopen ログファイルの再オープン
$ sudo nginx -s reload 設定の再読み込み
指定配置文件并运行反向代理
保持现有的守护程序不变,同时运行用于Web API的反向代理。
首先,我们会检查Web API的配置文件目录中的设置文件。
$ sudo nginx -t -c ~/holoapi/config/nginx.conf
nginx: the configuration file /home/mcuser/holoapi/config/nginx.conf syntax is ok
nginx: configuration file /home/mcuser/holoapi/config/nginx.conf test is successful
设定文件似乎没有问题。
将Nginx作为反向代理执行。
$ sudo nginx -c ~/holoapi/config/nginx.conf
进程处于这种状态。
$ ps ax | grep nginx
10278 ? Ss 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
11918 ? S 0:00 nginx: worker process
11919 ? S 0:00 nginx: worker process
14863 ? Ss 0:00 nginx: master process nginx -c /home/mcuser/holoapi/config/nginx.conf
14864 ? S 0:00 nginx: worker process
指定 PID 的停止方法请参考。
$ cat /var/run/nginx.pid
14863
$ sudo kill -QUIT $( cat /var/run/nginx.pid )
确认通过反向代理的操作
在gunicorn下运行Web API,并启动Nginx的反向代理,以确保其正常运行。
$ curl 'http://10.1.1.4:8080/'
holoapi
通过反向代理,Web API 已经给出了响应。
从本地环境进行操作确认
我正在Azure的网络安全网关上添加入站安全规则。
使用本地环境的 Postman,尝试访问 Azure 虚拟机的 Web API。
仅指定 GET 的 URL,不指定查询参数。
http://test.example.co.jp:8080/Holodules/20201208
从Azure VM的Web API成功获取到了JSON响应体!
最后
计划使用Azure AppService,虽然改用了Nginx + gunicorn等工具,但还是成功地将Web API公开。由于还有许多问题,我们将继续努力解决。
-
- Flask アプリケーションとしてあるべき作り込みが甘いので作り直したい。
-
- Flask-JWT などを利用して、Web API のトークン認証を行いたい。
-
- SSL無しは早めにどうにかしたい。
- Azure AppService (Azure Functions とかも) をあらためてチャレンジしたい。