##概要
NEM APIを使って、
なんか開発してみたいけど、
何から始めれば良いか分からない
という方向けに、
NEM APIの使い方を書いてみます。
追記)NEMAPIを提供するのはスーパーノードだと書きましたが、スーパーノードでないノードもapi提供してるかもしれないです。すみません確認します。
###参考
こちらの記事を参考にしました。
###APIとは
APIは提供されているサービスの機能を
インターネットを通じて、
皆と共有(シェア)する時に用いられます。
###NEMのAPI
NEMのAPIでは、
NEMブロックチェーンでできる多くの機能を
誰でも利用することができます。
##とりあえず使ってみる
NEM APIについて、
手っ取り早く理解するには、
実際に使ってみるのが一番早いです。
###リクエスト
ブラウザで以下のURLをリクエストしてみると、
http://alice2.nem.ninja:7890/account/get?address=NDBWWVBH4AK76CYZ6MICVOGVXOGNVIH2KINSVLFU
###レスポンス
謎の文字列が返ってきます。
{"meta":{"cosignatories":[],"cosignatoryOf":[],"status":"LOCKED","remoteStatus":"INACTIVE"},"account":{"address":"NDBWWVBH4AK76CYZ6MICVOGVXOGNVIH2KINSVLFU","harvestedBlocks":0,"balance":39000000,"importance":0.0,"vestedBalance":36958947,"publicKey":null,"label":null,"multisigInfo":{}}}
これがNEM APIです。
~~ 完 ~~
##レスポンスの詳細
もう少し詳しく説明します。
返ってきた謎の文字列をじっくりみてみます。
###JSON形式
謎の文字列は、JSONという形式で書かれてます。
JSONはデータを表現するための記法の一つです。
###NEM用語
このJSONデータをよくみると、
NEMの用語がいくつかあることが分かります。
address、harvestedBlocks、balance、importance...
NEM用語についてはこちらのサイトが良くまとまっています。
###NEMアカウントの情報
これはNEMのアカウント(アドレス)が所有する情報です。
以下の情報が読み取れます。(他にも要素はありますが省略します。)
要素 | 値 |
---|---|
address | NDBWWVBH4AK76CYZ6MICVOGVXOGNVIH2KINSVLFU |
harvestedBlocks | 0 |
balance | 39000000 |
importance | 0.0 |
###address
NEMのアドレスです。
このアドレスはNDBWWVBH4AK76CYZ6MICVOGVXOGNVIH2KINSVLFUです。
銀行の口座番号のようなものです。
######mainnetとtestnetとmijin
ちなみに、
NEMに関するアドレスには、
mainnet、testnet、mijinがあります。
mainnetは頭文字がNから始まり、testnetはTから、mijinはMから始まります。
###HarvestedBlocks(ハーベスト回数)
これまでのハーベスト回数です。
0回であることが分かります。
###balance(残高)
balanceはXEMの残高を表します。
このアドレス(NDBWWVBH4AK76CYZ6MICVOGVXOGNVIH2KINSVLFU)は、
39XEM保持していることが分かります。(1000000分の1します)
###Importance(重要度)
PoIの重要度です。
0.0であることが分かります。
##リクエストの詳細
始めにリクエストしたURLを
意味ごとに分割してみると、
以下のようになります。
通信方式 | ホスト名(ノード) | ポート番号 | APIパス | アカウント(アドレス) |
---|---|---|---|---|
http:// | alice2.nem.ninja | :7890 | /account/get | ?address=【任意のアドレス】 |
###通信方式
データを送受信するための方式です。
httpはwebページ等のデータを送受信する時に使われるプロトコルです。
よりセキュアにwebデータを送るためのプロトコルにhttpsもあります。
###ホスト名(ノード)
NEM APIのリクエストにはノード(NIS)が対応します。
ここで、どのノードにリクエストを送るか指定します。
このサイトからスーパーノード一覧を見ることができます。
######mainnetとtestnet
NEMブロックチェーンのネットワークには
mainnet(実際に利用されるネットワーク)と
testnet(実験や開発環境として利用されるネットワーク)があります。
mainnetかtestnetでapiが利用できるスーパーノードも異なるので注意です。
######接続するノードの分散
毎回同じノードにリクエストを送り続けるのは良くないです。
NEMのサービスを開発する時は、
接続するノードを分散させる工夫が必要です。
また、ファイアウォールの設定でアクセスできないノードもあるので注意です。
###ポート番号
データ通信の種類を識別するために用いられる番号です。
NEMapiのデータはポート番号7890が用いられるのが一般的です。
###APIパス
ここでNEMに関する、どんな情報を取得したいか送りたいかを指定します。
以下によく使いそうな例をリストにします。
より詳しく知りたい方はこちら
APIパス | 概要 |
---|---|
/heartbeat | NIS(SN)が稼動しているかどうかを判断します。 |
/account/get | アカウントのデータ(AccountMetaDataPair)を取得します。 |
/account/harvests | アカウントの収穫情報オブジェクトの配列を取得します。 |
/account/mosaic/owned | アカウントが所有するモザイク情報を取得します。 |
/account/transfers/incoming | アカウントが受信したトランザクションデータを最新のものから25個取得します。(?) |
/account/transfers/outgoing | アカウントが送信したトランザクションデータを最新のものから25個取得します。(?) |
/account/transfers/all | アカウントが送受信したトランザクションデータを最新のものから25個取得します。(?) |
/account/unconfirmedTransactions | アカウントが送信者または受信者であり、まだブロックに含まれていないトランザクションの配列を取得します。 |
/chain/height | ブロックチェーンの現在の高さを取得します。 |
###アカウント(アドレス)
アドレスの指定をします。
?address=
の後にアドレスを指定します。
ハイフンを除いた状態で指定することに注意してください。
######任意のアドレス情報を取得する
【任意のアドレス】に利用したいアドレスを入力すれば、
そのアドレスに関する情報を閲覧できます。
http://alice2.nem.ninja/account/get?address=【任意のアドレス】
##まとめ
プログラミング経験もそこまでない方(僕のような)だと、
NEM APIを使ってみたいがどうすれば良いのか
さっぱりわからないと思います。
しかし、実はNEM APIを使うことそれ自体は
とても簡単で、
決められたURLを送るだけです。
問題は、
このAPIを使ってどうサービスを設計するか、
プログラミングしていくか、
というところが一番大変です。
###今後
NEM APIについて理解できた後は、
さっそく簡単なものから、
作ってみるのが良いです。
例えば、Faucetや掲示板です。
この二つは今までに多くの方が作ってみている印象があります。
そのぶん、ネット上に情報が多く存在しているので、作りやすいと思います。
##開発で役立つNEMの技術系資料
僕が、NEM APIを使って開発する時に利用した資料を紹介します。
@nem_takanobuさんの記事
主に、javascriptでのNEM APIを使う方法が書かれています。@nem_takanobuさんの記事は一通り目を通すことをおすすめします。
nem advent calender 2017
NEMのアドベントカレンダーです。こちらもたくさんの方がNEMに関する記事を書いてくださっています。
技術・開発資料
NEMの技術系資料はこのサイトにほとんどまとまっています。
###NEMの基本的知識
NEMに関する非技術的な知識を身に着けたい人向けにおすすめのNEM記事を
こちらにまとめてみました。(僕のサイトです...)