8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Typespecでnem / SymbolのAPI定義を構築している

8
Last updated at Posted at 2025-12-04

タイトル通りなのですが、TypespecというAPI仕様を記述する言語を用いて、nem / SymbolのWebAPI定義を書き直していました。

とりあえず先に成果物のリンクを貼っておきます。

これは、Typespecで書いた定義をOpenAPI形式にコンパイル(?)し、openapi-generate-htmlというツールでインタラクティブなWebUIとして出力したものを、Github Pagesへデプロイしたものです。

スクリーンショット 2025-11-20 11.29.43.png

このサイトからAPIの実行もできますし、実行サンプルコードもコピペできます。
ただし、nemに関してはGithub Pagesがhttpsプロトコルなのに対して、NIS APIがhttpプロトコルのものしかないため、セキュリティエラーによって実行ができません。
現状ではローカルからなどプロトコルを揃えて実行してあげる必要があります。

まぁ、同じようなものはまだ正式公開ではないものの、公式のドキュメントでも提供はされているのですが、個人的にちょっと使いにくかったので…。

リポジトリ

Catapult REST API Typespec

NEM NIS API Typespec

Typespec

SymbolコアチームからもOpenAPI定義ファイルが提供されていますが、定義多く(特にSymbol)、一枚のファイルとなっているため、閲覧や修正するためにエディタで開くのがシンドいです。(5701 lines!)
OpenAPI定義もファイル分割する手段があるようですが、やはり根がyamlであることの由来するシンドみがあります。

Typespecはその名の通り型を定義でき、Typescriptのようにインポート・エクスポートを利用して、より堅牢に分割されたコードとして表現できる言語です。

OpenAPI3 to TypeSpec

書き始めるに際しては、流石に0から全部書き始めるとシンドいので、OpenAPI形式からTypeSpecコードへ変換を掛けました。

変換をかけたコードからスタートし、まずはコンパイルされた結果が、オリジナルのOpenAPI定義と一致(または許容できる範囲での差分)することを目標に、ソースコードを修正・分割していきました。

openapi-generate-html

コマンド一発でWebUI画面を生成してくれる、とても便利なツールです。
最終出力がhtmlファイル一枚になるというところが、github pagesへシンプルにデプロイできるので気に入っています。
ローカルへダウンロードしても開くことができます。
シンプル イズ ベスト!

当該サイトでは--ui=stoplightを指定していますが、他にも色々なUIに対応しているので、お好みで試してみると面白いと思います。

スクリーンショット 2025-12-05 6.17.05.png

RapiDocとかもいいですよね。

SwaggerのUIはどうも野暮ったくて…

まとめ

リポジトリの内容は、一部が間違っていたり、移植ミスを修正してはforce pushしたりもするので、その点はご了承ください。

やっていることは車輪の再開発に過ぎず、自己満足的で、ブロックチェーン自体にはあまり貢献しませんが…。

ブラウザから気軽にAPIを叩けるツールが欲しかったので良ければ使ってみてください。

また、Typespecopenapi-generate-htmlもよいツールなので、試してみてはいかがでしょうか。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?