arachansan's diary

誰にも左右されず、硬派なBlogを書きます。

RESTサーバー建立計画

社内にDBを見に行けるRESTサーバーを建立したい。

それをExcelLibreOffice Calcでデータを取得できるようにしたい。

RESTサーバーを建立したいくらい辛いことがありました。

クライアントにDBドライバーだらけ

弊社、Databaseサーバーがあります。

得意先、仕入先、商品、売上などのデータが入っています。

営業や事務の方がこういうんです。

  • 「得意先マスターから俺の担当の得意先の住所一覧取ってこれる?」
  • 「この仕入先の商品cd一覧が欲しいな。」

Excelで。

Excelでやるとなるとこうなります。

  1. クライアントPCにDB Driverをインストール
  2. Database 接続設定
  3. ExcelMicrosoft Queryで取得

図説するとこうなります。

f:id:arachansan:20191202061830p:plain
Get Data from Database

DB DriverとDB接続設定を多くのPCに入れてしまった。

何か悪いことが起こらなければいいが…。

ドキッ、PCだらけの再設定大会

基幹システム式年遷宮の時がやってまいりました。

データベースも新しいバージョンにします。

サーバーも新しくします。

IPアドレスも変わります。

!?

ドライバーを入れ替えて接続設定も書き換えないといけない。

f:id:arachansan:20191202061957p:plain
must_change_connectionSettings

実際、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で使えるのであれば、

Excel/LibreOffice

  • GetRest関数にRESTサーバーのurlを書く

だけで済みます。

REST サーバーの接続設定を変更するだけ

Databaseの接続先が変わったとしても、 下記の図のように RESTサーバーの接続設定を書き換えるだけ。

1つ変えれば全て変更済みになる。

f:id:arachansan:20191202064859p:plain
restserver

めちゃめちゃ便利。

実際に使えるのか

実際に使えるのか考えてみた。

社内で活用するためには4つのことを考える必要がある。

  • REST APIの扱える関数
  • 取得したJSONをParseする関数
  • RESTをデータソースとして扱う
  • RESTサーバー構築

一つずつ考えていきましょう。

REST API扱える関数

LibreOffice Calc

  • 俺が作る!
  • getrest

github.com

Excel

support.office.com

  • Excel 2013以降で使用可能
  • Parse(分解)はできない。

取得したJSONをParseする関数

Excel

  • 無い
  • VBAを駆使して作っている人がいる

qiita.com

LibreOffice Calc

  • 俺が作る!
  • jsonparse (未完成)

github.com

RESTをデータソースとして扱う

Excel

support.office.com

  • PowerBI で可能
  • [JSON ファイルに接続する ]

LibreOffice Calc

無いから誰か作って!

REST APIサーバー

僕が建立予定。

DBへの接続テストは成功。

柔軟性と構築速度を優先して下記の技術で作る予定。

  • Debian10
  • Informix Client CDK 4.50
  • Python3.7
  • ifxPy
  • Flask
  • Pandas

TableやColumn名が日本語で作られているためDjangoやSQLAlchemyには載らない。

ORM無しでどうやって作ったらいいかな…。