見出し画像

TWSNMPのWeb API

TWSNMPで管理しているマップの情報を他のパソコンで動作しているTWSNMPから取得するためのWeb APIを作った時の話です。
今朝、猫に2時半に起こされたので書いています。猫は横から真面目に書いているか見張っています。

TWSNMP間の連携

最初の目的はTWSNMPのマップの情報を別のパソコンで動作しているTWSNMPから取得できればよいと考えていました。取得した情報でマップ上のアイコンの色を変えれば別のパソコンで動作しているマップの状態を階層的に把握できて大規模なネットワークでもTWSNMPで管理できると考えたからです。TWSNMP間の通知のイメージは、

画像1

のような感じです。

プロトコルを考える

別々のパソコンで動作するプログラム間の通信にはプロトコルが必要です。プロトコルは通信の決まりのようなものです。「元気ですか?」と言えば「元気です!」と答える。
大昔だとTCP/IPで独自のプロトコルを作ることがありました。TWSNMP専用のプロトコルを設計するということです。でも、今は、HTTPプロトコルの上のREST APIが主流です。

なので、TWSNMPもREST APIで通信することにしました。

REST APIのパッケージ

GO言語の標準パッケージにはHTTPサーバーの機能があります。

これを使えば実現はできますが、もう少し楽に作りたいと考えました。そこで、Googleに聞いてみました。"golang rest api json"
手軽なのが見つかりました。

使い方は簡単で

package main

import (
	"github.com/ant0ine/go-json-rest/rest"
	"log"
	"net/http"
)

func main() {
	api := rest.NewApi()
	api.Use(rest.DefaultDevStack...)
	api.SetApp(rest.AppSimple(func(w rest.ResponseWriter, r *rest.Request) {
		w.WriteJson(map[string]string{"Body": "Hello World!"})
	}))
	log.Fatal(http.ListenAndServe(":8080", api.MakeHandler()))
}

のぐらいでREST APIサーバーが実現できます。

ここで夢が膨らむ

このパッケージのドキュメントを読んでいると

API and static files
Combine Go-Json-Rest with other handlers.

という説明を見つけました。なるほどHTML、画像、CSS、JavaScriptも使えるということです。ここで夢が膨らみました。TWSNMPのマップは、

のようにHTMLなどWebの技術で表示しています。ならば、Webブラウザーでマップも表示できるはずだと思った瞬間からアドレナリンがでて作り始めていました。結果

のようにブラウザーからマップを表示できるようにしました。

作ったREST API

マップも表示するようにしたので沢山APIが必要なように思われますが、作ったAPIは2つだけです。

% curl -k --basic -u a:a https://127.0.0.1:8192/api/mapstatus
{
 "High": 0,
 "Low": 2,
 "Warn": 5,
 "Normal": 12,
 "Repair": 3,
 "Unkown": 0,
 "DBSize": 780550144,
 "DBSizeStr": "781 MB",
 "State": "low"
}
 curl -k --basic -u a:a https://127.0.0.1:8192/api/mapdata"LastTime": 1596138925,
 "MapName": "test1",
 "BackImg": false,
 "Nodes": {
   "15cae6260cc1a068": {
     "ID": "15cae6260cc1a068",
     "Name": "NTT Router",
     "Descr": "Discovered at 2019-10-06T09:07:51+09:00",
     "Icon": "sync",
     "State": "normal",
     "X": 414,
     "Y": 146,
     "IP": "192.168.1.1",
     "MAC": "00:25:36:AB:77:53(Oki Electric Industry Co., Ltd.)"
   },

設定を作る

Webサーバー機能を有効にする設定は、拡張設定のダイアログに追加しました。​

画像2

設定できるのは、ポート番号とユーザーID、パスワードです。

ゼロトラストに対応する

セキュリティが大事というご時世なので暗号なしで通信するのはちょっと心配です。なので、TWSNMP間の通信は暗号にしました。REST APIのHTTPサーバー機能は標準のパッケージを使っているので秘密鍵と証明書を作成すれば比較的簡単にTLS(昔でいうSSL)に対応できます。秘密鍵と証明書の作成はTWSNNMPの中で行うようにしました。この話は長くなるので別の機会に書きます。

この記事を書き終わったところで、猫が「ご苦労」と鳴きました。






この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
有難き幸せ!
7
私は、TWSNMP Managerの開発者です。 20年以上前に作ったソフトを、いまだに多くの人に使っていただけて、幸せに思っています。 最近、新しい技術でTWSNMP Managerの復刻版の開発を行っています。 開発日誌やマニュアルをnoteに書いています。

こちらでもピックアップされています

TWSNMPの作り方
TWSNMPの作り方
  • 42本

TWSNMPを開発する時に調べたこと、試してみたこと、見つけた便利ツールについて書いているマガジンです。これからプログラマーを目指す人に、まったく、何もないところからTWSNMPのようなソフトウェアを作る時に、私がどのように考えて、何を調べて、どう判断したかをお知らせできればと思っています。

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。