CORESERVERでFlaskを使ったWebAPIを作ってみる


概要

Androidアプリ開発で、Serverから情報を取得して表示するアプリを作った際、なるべく手軽で、安価で・・・
という考えから、CORESERVERでWebAPIを作ってみた。という記事です。

CORESERVERは、単なるHTMLやCGIをアップロードできる領域というものではなく、Python3やMySQLも使えるので、Flaskで簡易的に作っています。

基本的な話

CORESERVERとは

■ CORESERVER(https://www.coreserver.jp/

ざっくり言えば、コスパ最強の「レンタルサーバー」です。
V1プランで「CORE-Mini」を選択すれば、年払いで2,640円(1日 7円!)にて使えるという驚き。

→料金表(V1の方をみてね)
https://www.coreserver.jp/price/

しかも、月間の転送量MAXは「無制限」(当然、制限はしないけど、負荷上がったらそれまで。という方式)。
MySQLだろうが、Python3だろうが、かなりいろいろ使えるけど金額変わらず。
素晴らしい!
実験台としては、申し分ない・・・・

※なお、CRONも使えるので、自動実行なども可能!(ただし、制限はある)
※さらに、無料SSLも使える!(ひゃっほい)

Flaskとは

■ Flask(https://flask.palletsprojects.com/en/2.0.x/

簡単にいえば、WebAPIで「 https://hogehoge.com/ 」と「https://hogehoge.com/hello 」を下記コードで作れるということです。

なので、Python3の便利な機能をFlaskで思う存分使いまくれる。ということです。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'

実際にやってみる

前提としては、下記ぐらいを想定してます。

  • Windows10を利用
  • CORESERVERのアカウントは作成済
  • Python3はなんとなく知ってる
  • Linuxコマンドはなんとなく使える

【準備1】CORESERVERへの接続確認

CORESERVERへ接続する(WinSCP編)

■ WinSCP( https://ja.osdn.net/projects/winscp/

この辺を見ながら、ログインします。

・FTPソフトの設定情報の確認
https://help.coreserver.jp/manual/ftp-info/
・WinSCPの設定方法(FTPSプロトコル)
https://help.coreserver.jp/manual/winscp/

CORESERVERへ接続する(TeraTerm編)

■ TeraTerm ( https://ja.osdn.net/projects/ttssh2/

この辺を見ながら、ログインします。

・SSHの利用(Windows)
https://help.coreserver.jp/manual/v1/ssh-win/

【準備2】インストール済のパッケージを確認する(Python3)

TeraTermによるログイン状態から、インストール済みのパッケージを確認します。
(すでに、自分で色々入れているので多々増えてます)

[hoge@xx2 ~]$ python3 -m pip freeze
certifi==2021.10.8
・・・

注意
下記で確認すると、「Python2」のものが表示されてしまいます。

[hoge@xx2 ~]$ pip freeze

【準備3】Pythonファイルを作成する

  • 全部のアクセスをすべて「index.py」に向けちゃうぞ!というリダイレクト処理とCGIモードで動かします。の宣言
.htaccess
AddHandler cgi-script .py
 
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.py/$1 [QSA,L]
  • 各種設定と、CGIの「app」を実行してね。の処理
index.py
#!/usr/local/bin/python3
# coding: utf-8

from server import app
from wsgiref.handlers import CGIHandler

import os
 
# SSLしか認めないとき
# os.environ["SERVER_PORT"] = "443"
# POSTしか認めないとき
# os.environ["REQUEST_METHOD"] = "POST"

CGIHandler().run(app)
  • 「app」はFlaskだぜ。と、そのパスと分岐処理を記載
test.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'

【準備4】ファイルをpublic_htmlへアップロードする

前準備で作成した3つのファイルをWinSCP(Teratermでもいい)でpublic_htmlにアップロードする
アクセス権は、3ファイルとも「644」で良いと思う。

完成。
これで、自分用のURLを入力すれば「Index Page」とか「Hello, World」とブラウザに表示される、、、、はず。

表示されねぇ

必要なパッケージがインストールされていない

ブラウザからだと、内部のエラーが分からず、500 Internal Server Errorなどになったりしてモヤモヤします。
その場合、TeraTermで直接index.pyを実行してみます。

[hoge@xx2 ~]$ python3 index.py

そうすると、足りないパッケージが表示されるので、下記のように追加していきます。

[hoge@xx2 ~]$ python3 -m pip install <足りないパッケージ名>

pipのバージョンが古いのが気になる

アップグレードしたい場合は、下記コマンドで

[hoge@xx2 ~]$ python3 -m pip install --upgrade pip --user

巻末

需要があるようなら、CORESERVERでDBに接続したり、cron動かしたり、、、の記事も追加します。