[Blockchain]淺述區塊鏈上嘅REST API
今日想講下Blockchain上嘅REST API,但首先要明白咩係 API 同 REST 先。
Application Programming Interface (API)
API 全名係 Application Programming Interface( 應用程式介面 ),主要充當客戶端和服務器發送請求和響應之間的中介。
如果 UI 係 User Interface ( 用戶介面 ),俾人通過簡單嘅介面操作,去用唔同嘅軟件或者APPs,即係平時你用 Gmail 個時嘅一系列Click Click Click 或者 係 Twitter 度留言嘅操作。
咁 API 就會係俾電腦或者程式使用嘅介面,通過一串預先定義嘅交互標準,由客戶端提交請求(Request)俾服務器,或服務器響應(Response)客戶端請求。
Representational State Transfer (REST)
REST 全名係 Representational State Transfer,係一種軟體架構風格( Style )。
佢唔係一種好硬性嘅標準或者規定,反而係一種設計模式或者概念。
上圖為 REST Triangle,講左一D REST 係實作上使用嘅 Nouns, Verbs 與 Content types。
- Nouns = Identification of resources( 唯一的資源識別方法 ),例如:網址URL 或者你嘅身份證號碼。
- Verbs = Manipulation of resources through representations ( 操作方法 ),例如:HTTP嘅GET, POST, PUT, DELETE Methods,想對呢樣嘢做乜?
- Content types = Self-descriptive messages( 自我描述資訊 ),例如:HTTP嘅Content-Type,即係你係咩,你係人(That's the answer)
詳細可以參考:Here 同佢嘅Reference,有興趣自己睇。
REST API
而運用左REST設計風格嘅API,就可以叫做REST API。
REST API 出色嘅靈活性可以幫助開發人員快速簡單咁以他們的格式實現需求。
REST API 請求結構包括:
- HTTP method,即HTTP嘅GET(獲取), POST(創建), PUT(更新), DELETE(刪除) Method
- Endpoints(端點),即網址URL
- Headers,即用作提供一些身份驗證數據,如:API 密鑰,IP 地址,瀏覽器類型
- Body,即想要添加或替換嘅數據或資源
- Request parameters,即額外參數
Blockchain REST API
通過REST API,我地可以得知鏈上嘅數據或者狀態,從而係我地嘅應用程式度更新或顯示。
咁唔同嘅公鏈都有佢嘅REST API及格式,例如:以太坊,COSMOS,波卡等等,俾開發者去使用。
COSMOS REST API
通過REST API,我地可以查詢一D鏈上嘅數據,例如:你戶口嘅Token balanace,節點資訊。
咁本人就查下自己有幾多ATOM啦,打番自己wallet address。
https://api.cosmos.network/bank/balances/{your wallet address}
Result:
{ "height": "10615933", "result": [ { "denom": "uatom", "amount": "357285" } ] }
咁本窮人就只有0.357285粒ATOM,解釋下先:
- height (區塊高度) = 10615933 ,你可以當係鏈上嘅時間
- denom (代幣標識符) = uatom ,即係ATOM
- amount (數量) = 357285,得0.357285粒ATOM,窮
放條link,俾大家試下:https://v1.cosmos.network/rpc/v0.41.4
另外,所有cosmos chain 都適用相關REST API,但要改番做相關公開Endpoint,例如:
ATOM = api.cosmos.network
SECRET = secretapi.io
Terra = lcd.terra.dev
OSMO = osmosis.stakesystems.io
呢類公開API通常速度一般,主要俾開發者調試,想要生產級嘅設施就要課水租用。
ETHEREUM REST API
都係一樣,咁本人就查下自己有幾多ETH啦,打番自己wallet address。
https://api.blockcypher.com/v1/eth/main/addrs/{your wallet address}/balance
Result:
{ "address": "0x30XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "total_received": 555323330413034546, "total_sent": 549157516754017841, "balance": 9365007499214872, "unconfirmed_balance": 0, "final_balance": 9365007499214872, "n_tx": 32, "unconfirmed_n_tx": 0, "final_n_tx": 32, "nonce": 23, "pool_nonce": 23 }
咁本窮人就只有0.00936粒ETH,解釋下先:
- address (位址) = 0x30XXX...... ,你個wallet address(即係你個account)
- total_received (收款總數) = 555323330413034546,即係總數收過幾多ETH
- total_sent (付款總數) = 549157516754017841,即係總數俾過幾多ETH
- balance (現時賬戶餘額) = 9365007499214872,即係你有幾錢(ETH)
- unconfirmed_balance (未確定賬戶餘額),有時有D transaction未確定就會顯示係到
- final_balance (最終賬戶餘額) = 9365007499214872,即係你最終有幾錢(ETH)
- n_tx (交易次數) = 32,即係呢個Wallet交易總次數
- unconfirmed_n_tx (未確定交易次數) = 0,有時有D transaction未確定就會顯示係到
- final_n_tx (最終交易次數) = 32,即係你最終交易次數
- nonce (雜湊值)= 23
- pool_nonce (雜湊值)= 23
放條link,俾大家試下:https://www.blockcypher.com/dev/ethereum/#block-height-endpoint
本文其不構成任何財務建議,僅請咁多位注意。
以及,本文並不深入探討任何一種技術及其優劣,可能會有一定錯誤,還請閣下提出及指正。