RESTサーバー建立計画
社内にDBを見に行けるRESTサーバーを建立したい。
それをExcelやLibreOffice Calcでデータを取得できるようにしたい。
RESTサーバーを建立したいくらい辛いことがありました。
クライアントにDBドライバーだらけ
弊社、Databaseサーバーがあります。
得意先、仕入先、商品、売上などのデータが入っています。
営業や事務の方がこういうんです。
- 「得意先マスターから俺の担当の得意先の住所一覧取ってこれる?」
- 「この仕入先の商品cd一覧が欲しいな。」
Excelで。
Excelでやるとなるとこうなります。
図説するとこうなります。
DB DriverとDB接続設定を多くのPCに入れてしまった。
何か悪いことが起こらなければいいが…。
ドキッ、PCだらけの再設定大会
基幹システム式年遷宮の時がやってまいりました。
データベースも新しいバージョンにします。
サーバーも新しくします。
IPアドレスも変わります。
!?
ドライバーを入れ替えて接続設定も書き換えないといけない。
実際、30台ぐらい接続設定を書き換えました。
辛(つら)い。
何とかならないだろうか?
RESTサーバー
下記のような夢のような仕組みはないだろうか?
- ドライバー無し
- 接続設定無し
- データを取得
あるんですよ。
奥さん。
Webでデータをやり取りしているものがあります。
RESTサーバーです。
RESTサーバー
- WebのGetメソッドで取得
- JSONでデータ取得
gRCPは?
アー、聞こえない。
どんな言語で扱える
RESTはWebの世界ではメジャーです。
様々な言語で処理できます。
ライブラリーもインストールせずに処理できる言語となると下記の3つじゃないでしょうか。
RESTでデータ取得をPythonで書くとこんな感じになります。
import urllib.request import json def GetRest(url:str) -> str: """ Get JSON Data from REST API :param:url REST API url :return:json_file """ data = urllib.request.urlopen(url) json_file = json.loads(data.read().decode('utf-8')) return str(json_file) if __name__=='__main__': print(GetRest("http://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060"))
{ "message": null, "results": [ { "address1": "高知県", "address2": "南国市", "address3": "蛍が丘", "kana1": "コウチケン", "kana2": "ナンコクシ", "kana3": "ホタルガオカ", "prefcode": "39", "zipcode": "7830060" } ], "status": 200 }
たった3行。
主要な処理はdateからreturnまでだけ。
これがExcelやCalcで使えるのであれば、
- GetRest関数にRESTサーバーのurlを書く
だけで済みます。
REST サーバーの接続設定を変更するだけ
Databaseの接続先が変わったとしても、 下記の図のように RESTサーバーの接続設定を書き換えるだけ。
1つ変えれば全て変更済みになる。
めちゃめちゃ便利。
実際に使えるのか
実際に使えるのか考えてみた。
社内で活用するためには4つのことを考える必要がある。
一つずつ考えていきましょう。
REST API扱える関数
LibreOffice Calc
- 俺が作る!
- getrest
Excel
- Excel 2013以降で使用可能
- Parse(分解)はできない。
取得したJSONをParseする関数
Excel
- 無い
- VBAを駆使して作っている人がいる
LibreOffice Calc
- 俺が作る!
- jsonparse (未完成)
RESTをデータソースとして扱う
Excel
- PowerBI で可能
- [JSON ファイルに接続する ]
LibreOffice Calc
無いから誰か作って!
REST APIサーバー
僕が建立予定。
DBへの接続テストは成功。
柔軟性と構築速度を優先して下記の技術で作る予定。
- Debian10
- Informix Client CDK 4.50
- Python3.7
- ifxPy
- Flask
- Pandas
TableやColumn名が日本語で作られているためDjangoやSQLAlchemyには載らない。
ORM無しでどうやって作ったらいいかな…。