なぜ作ったのか
下記記事を書いていて、保存機能さえあれば
AWSLambdaやAzureFunctionsのようなFaaS(Function as a Service)と
同じようなものが出来そうだと思ったからです
技術スタック
-
言語
python -
フレームワーク
django -
データベース
Firebase RealtimeDatabase
コード
使い方
コードを登録
Bodyにコード(Python)を書いて、下記URLにPOSTします
同URLのGETで登録した値を取得できます
実行してからの登録になるので
構文エラーが無ければ登録できます
また、上書きされないように現状UPDATEは実装していません
/v1 など付けてバージョンを管理したほうが良いかもしれません
※こういうのが出来ますよ!という紹介なので
機密なコードやパスワードなどは入力しないでくださいね!
https://pyfuncapi.herokuapp.com/admin/api/{一意のURL}
「exec_input」変数が外部からの値入力
「exec_result」変数がWebApi実行時の戻り値
となります
WebApiを実行
https://pyfuncapi.herokuapp.com/api/exec/{登録したURL}
サンプルコード/サンプルAPI
####フィボナッチ数列かどうかを判定するWebApi
bodyに数値を入力してPOSTします
https://pyfuncapi.herokuapp.com/api/exec/is-fibonacci
コード
def fib(n):
if n > 1:
return fib(n-1) + fib(n-2)
return n
def main(exec_input):
if exec_input == '':
return
num = int(exec_input)
i = 0
while True:
i +=1
fib_num = fib(i)
if fib_num == num:
return True
if fib_num > num:
return False
exec_result = main(exec_input)
####人口動態調査 / 人口動態統計 月報(概数)WebApi
政府が公開しているオープンデータ(CSVファイル)をjsonに変換して返すWebApiです
https://pyfuncapi.herokuapp.com/api/exec/vital-statistics-survey-monthly
コード
import csv
import json
import requests
import numpy
# https://www.e-stat.go.jp/stat-search/files?page=1&layout=dataset&toukei=00450011&cycle=1&stat_infid=000032115375&file_type=1&metadata=1&data=1
# 人口動態調査 / 人口動態統計 月報(概数)
#
def main():
datas = requests.get(
"https://www.e-stat.go.jp/stat-search/file-download?statInfId=000032115375&fileKind=1")
datas.encoding = "shift-jis"
text = ""
for line in numpy.array([s.split(',') for s in datas.text.splitlines()]).T:
text += ",".join(line) + "\n"
rows = []
lines = text.splitlines()
reader = csv.DictReader(lines[1:len(lines)], delimiter=',')
for row in reader:
rows.append(row)
return ''.join(json.dumps(rows, ensure_ascii=False).split())
exec_result = main()
この記事を書いていて思ったこと
Knativeという超強いものがあったのを知りました・・・。
課題
セキュリティーがガバガバです
URLさえ知っていればコードが取得できてしまいます
(認証作れば良いんでしょうけど、今回はそこまで作り込みません・・・。)
あと、HeaderやステータスコードなどResponse自体を戻り値設定できるようにしたほうが良いなぁと思いつつ
レスポンスの値を作るのがめんどくさくなるのでBodyのみ指定できるようにしてあります