実は結構前に、ノード(RESTゲートウェイ)に自由なメッセージ領域をもたせられないか、という打診をしてみたところ、実装してくれていたのでした。
いままではfriendlyName
領域がユーザーとして比較的自由な文字列でカスタムできる領域でしたが、このnodeMetadata
によって、完全に自由な領域を設定することができます。
せっかく実装されたのに、RESTゲートウェイのDockerイメージがなかなか更新されなかったので、すっかり忘れていました。
今はもうリリースされているので、利用可能です。
どのRESTゲートウェイのバージョンから有効なのか、までは調べてませんが、
まぁノードを建てるような皆さんなら常に最新の状態にアップデートしてるから、大丈夫でしょう。
ちなみにこの記事ではRestのバージョンは2.4.2
でした。
最新でない場合は、一応安全のためにも、早めにアップデートをしてくださいね。
どんなの?
例えば、こんな感じの設定をすると…。
"nodeMetadata": {
"greeting": "こんにちは",
"message": "テストメッセージだよ",
"foo": {
"bar": "ばー",
"baz": {
"greeting": "Hello!",
"array": [
1,
2,
3
]
}
}
}
その値がそのまま反映されます。
なお、未設定の場合は何も返ってきません。
設定方法
symbol-bootstrap
によって、構成ファイルを用意している場合は、target/gateways/rest-gateway/rest.json
にファイルがあると思いますので、これを開きます。
(今後のバージョンアップや構成によっては異なる可能性があります。同じような内容または名前のファイルを探してください)
位置はどこでもいいので、"nodeMetadata"
というキーで、お好きにオブジェクトを書いてください。
書いたら、RESTサーバを再起動するだけです。
なお、JSONの形式ミスがあると、RESTサーバが立ち上がらなくなるので、気をつけてください。
ミスったら一旦止めて、記述を見直して、再起動すれば大丈夫です。
現状では、手動で設定する方法しか無いと思います。
Symbol-Bootstrap
を使用している場合、アップデートコマンドによって吹き飛ぶと思います。
そのあたりは環境整備に期待してください。
人柱
試しに設定してもらったノードを掲載させてもらいます。
*内容はノードの持ち主によって変更されている場合があります。
コード
ルーティングはここで設定されています。
なお、RESTサーバのルーティングはこのファイルに集約されていると思われるので、ココを覗くと、アンドキュメンテッドなパスが見つかるかも。
nodeMetadata
の設定サンプル。
"nodeMetadata": {
"_info": "replace the body of this object with custom fields and objects to personalize your node"
}
テストコードを覗いてみると、オブジェクトのネストも考慮していることがわかります。
expect(mockServer.send.firstCall.args[0]).to.deep.equal({
foo: 1234,
bar: 'lorem ipsum',
baz: { abc: 41, xyz: 82 }
});
用途
自由にjson
オブジェクトを公開できるので、使い方は自分たちで決めなければなりません。
例えば、第一階層でサービス名などの名前空間を区切り、第二階層で具体的な値を公開してみる、とか…。
"jp.sugoi-web-service": {
"name": "ノード太郎",
"twitter": "@node_tarou",
"message": "維持がんばるぞい!"
}
と書いておくと、すごいウェブサービスのシステムがこの値をみて、何らかに利用するとか。
まぁ、いろいろと考えてみて、何かに利用してください(ぶん投げ
ブロックチェーンの話ではありませんが、ノード運用を楽しく、ノードに関するサービスの可能性が広がる話でした。