
關(guān)于 API 你應(yīng)該知道的一切
注意:協(xié)議的概念與API的概念意義相近。兩者都是功能的抽象,除了協(xié)議涉及數(shù)據(jù)傳輸,而API與應(yīng)用程序的交互相關(guān)。
區(qū)塊鏈軟件的開發(fā)通常包括各種困難部分。其中最重要的是創(chuàng)建區(qū)塊鏈API接口。有些項目通過提供以下API服務(wù)來幫助用戶和開發(fā)人員:
網(wǎng)站收到比特幣付款的難以置信的簡便方式。這種服務(wù)是完全安全的,是商務(wù)或個人使用的理想選擇:
讓我們從區(qū)塊鏈錢包API評論開始。區(qū)塊鏈Wallet API提供了一個簡單的界面。要使用此API,你需要啟動一個負責管理錢包的小型本地服務(wù)。你的應(yīng)用程序通過HTTP API調(diào)用在本地與此服務(wù)進行交互。
現(xiàn)在,你可以從新的區(qū)塊鏈錢包API轉(zhuǎn)移比特幣。所有交易均價值0.0001 BTC礦工的費用。這是它在PHP中的樣子:
<?
$guid="GUID_HERE";
$firstpassword="PASSWORD_HERE";
$secondpassword="PASSWORD_HERE";
$amounta = "10000000";
$amountb = "400000";
$addressa = "1A8JiWcwvpY7tAopUkSnGuEYHmzGYfZPiq";
$addressb = "1ExD2je6UNxL5oSu6iPUhn9Ta7UrN8bjBy";
$recipients = urlencode('{
"'.$addressa.'": '.$amounta.',
"'.$addressb.'": '.$amountb.'
}');
$json_url = "http://localhost:3000/merchant/$guid/sendmany?password=$firstpassword&second_password=$secondpassword&recipients=$recipients";
$json_data = file_get_contents($json_url);
$json_feed = json_decode($json_data);
$message = $json_feed->message;
$txid = $json_feed->tx_hash;
?>
WebSocket API允許開發(fā)人員獲取有關(guān)新交易和塊的實時數(shù)據(jù)。
從URL鏈接wss://ws.blockchain.info/inv
開始。部署套接字時,用戶通過發(fā)送op
消息{“op”:“ping”}
來訂閱該頻道。然后,訂閱有關(guān)所有新比特幣交易的通知{“op”:“unconfirmed_sub”}
。最后,訂閱地址{“op”:”addr_sub”, “addr”:”$bitcoin_address”}
。
有關(guān)新交易的通知如下所示:
"op": "utx",
"x": {
"lock_time": 0,
"ver": 1,
"size": 192,
"inputs": [
{
"sequence": 4294967295,
"prev_out": {
"spent": true,
"tx_index": 99005468,
"type": 0,
"addr": "1BwGf3z7n2fHk6NoVJNkV32qwyAYsMhkWf",
"value": 65574000,
"n": 0,
"script": "76a91477f4c9ee75e449a74c21a4decfb50519cbc245b388ac"
},
"script": "483045022100e4ff962c292705f051c2c2fc519fa775a4d8955bce1a3e29884b2785277999ed02200b537ebd22a9f25fbbbcc9113c69c1389400703ef2017d80959ef0f1d685756c012102618e08e0c8fd4c5fe539184a30fe35a2f5fccf7ad62054cad29360d871f8187d"
}
],
"time": 1440086763,
"tx_index": 99006637,
"vin_sz": 1,
"hash": "0857b9de1884eec314ecf67c040a2657b8e083e1f95e31d0b5ba3d328841fc7f",
"vout_sz": 1,
"relayed_by": "127.0.0.1",
"out": [
{
"spent": false,
"tx_index": 99006637,
"type": 0,
"addr": "1A828tTnkVFJfSvLCqF42ohZ51ksS3jJgX",
"value": 65564000,
"n": 0,
"script": "76a914640cfdf7b79d94d1c980133e3587bd6053f091f388ac"
對于區(qū)塊鏈數(shù)據(jù)API,如果向GET
請求添加&cors=true
參數(shù),則可以使用CORS
進行一些數(shù)據(jù)API調(diào)用。
CORS(跨源資源共享)是現(xiàn)代瀏覽器的一種技術(shù),它提供可以訪問另一個域的資源的網(wǎng)頁。直到最近,克服同源策略對XSS請求施加的限制的主要方法是使用JSONP。JSONP本身有一個致命的限制:它只能通過GET方法接收數(shù)據(jù)。通過POST方法發(fā)送數(shù)據(jù)仍然無法訪問。
技術(shù)本身非常簡單。有三個域希望從服務(wù)器下載資源。為了實現(xiàn)這一點,提供內(nèi)容的Web服務(wù)器足以在響應(yīng)頭中指示可信域列表Access-Control-Allow-Origin:A,B,C。然后相同源原則的限制 在請求的頁面上將不適用于這些域的頁面。要啟動跨源請求,客戶端瀏覽器會向HTTP請求(發(fā)出請求的站點域)添加原始請求。例如,頁面http://www.a.com/page.html嘗試從http://www.b.com/cors.txt頁面獲取數(shù)據(jù)。
在區(qū)塊鏈數(shù)據(jù)API中,單個塊如下所示:
"hash":"0000000000000bae09a7a393a8acded75aa67e46cb81f7acaa5ad94f9eacd103",
"ver":1,
"prev_block":"00000000000007d0f98d9edca880a6c124e25095712df8952e0439ac7409738a",
"mrkl_root":"935aa0ed2e29a4b81e0c995c39e06995ecce7ddbebb26ed32d550a72e8200bf5",
"time":1322131230,
"bits":437129626,
"nonce":2964215930,
"n_tx":22,
"size":9195,
"block_index":818044,
"main_chain":true,
"height":154595,
"received_time":1322131301,
"relayed_by":"108.60.208.156",
"tx":[--Array of Transactions--]
區(qū)塊鏈圖表和統(tǒng)計API允許與blockchain.info上顯示的圖表和統(tǒng)計信息進行交互。(區(qū)塊鏈信息API)。
可以使用Charts API方法接收有關(guān)blockchain.info圖表的信息:
"status": "ok",
"name": "Confirmed Transactions Per Day",
"unit": "Transactions",
"period": "day",
"description": "The number of daily confirmed Bitcoin transactions.",
"values": [
{
"x": 1442534400, // Unix timestamp (2015-09-18T00:00:00+00:00)
"y": 188330.0
},
...
Stats API可用于接收有關(guān)blockchain.info統(tǒng)計信息的信息:
"market_price_usd": 610.036975,
"hash_rate": 1.8410989266292908E9,
"total_fees_btc": 6073543165,
"n_btc_mined": 205000000000,
"n_tx": 233805,
"n_blocks_mined": 164,
"minutes_between_blocks": 8.2577,
"totalbc": 1587622500000000,
"n_blocks_total": 430098,
"estimated_transaction_volume_usd": 1.2342976868108143E8,
"blocks_size": 117490685,
"miners_revenue_usd": 1287626.6577490852,
"nextretarget": 431423,
"difficulty": 225832872179,
"estimated_btc_sent": 20233161880242,
"miners_revenue_btc": 2110,
"total_btc_sent": 184646388663542,
"trade_volume_btc": 21597.09997288,
"trade_volume_usd": 1.3175029536228297E7,
"timestamp": 1474035340000
接受比特幣支付變得越來越受歡迎和需求。在網(wǎng)站上接受比特幣支付的方法有很多種。最方便的方法之一是區(qū)塊鏈API。在這里,你不需要綁定特定語言或SDK;你甚至不需要在那里注冊。所需要的只是擁有一個錢包來接受比特幣,并有時間將相當簡單的API連接到你的系統(tǒng)。此外,客戶不會看到你的錢包,而是交易所的臨時錢包。
在直接談?wù)摯a之前(我們將在示例中使用PHP,但可以在Java,Python等中輕松實現(xiàn)),有必要闡明支付接受機制本身。
整個過程符合以下順序:
要獲得臨時錢包,你應(yīng)該發(fā)送一系列數(shù)據(jù):
此數(shù)據(jù)將發(fā)送到區(qū)塊鏈腳本(https://blockchain.info/api/receive),每個參數(shù)都是常用的GET參數(shù)。其執(zhí)行結(jié)果由用戶系統(tǒng)處理(結(jié)果將采用JSON格式)。關(guān)于區(qū)塊鏈信息API的所有內(nèi)容都在區(qū)塊鏈API文檔中說明。
現(xiàn)在,用戶已準備好接受對錢包的付款,但無法從系統(tǒng)中注冊其收據(jù)的事實。用戶應(yīng)該記住,在實際系統(tǒng)中,建議使用經(jīng)過深思熟慮且編寫良好的代碼,以及存儲準備好的付款的數(shù)據(jù)庫(將付款號碼,用戶ID存儲在系統(tǒng)和驗證短語或其組成部分)。此外,驗證付款的時間可能不同且非常重要,比特幣匯率可能會發(fā)生變化。用戶有兩種選擇:在付款時保留費率,或在收到交易確認后請求費率。
交易確認收據(jù)文件應(yīng)該叫做receive_payment.php,并且應(yīng)該存儲在網(wǎng)站的根目錄中;在請求臨時錢包時,用戶在創(chuàng)建$ callback_url
時指定了其名稱。
實際上,同一付款的腳本不僅會被調(diào)用一次,而且會根據(jù)其在各個節(jié)點上的確認數(shù)量來調(diào)用。這意味著用戶必須先檢查是否有確認。
區(qū)塊鏈提供了許多參數(shù):
value參數(shù)在Satoshi中生成值,而不是比特幣(1Satoshi=0.00000001BTC)。因此,結(jié)果值應(yīng)該減少到比特幣。名為invoice_id和secret的參數(shù)由用戶在接收區(qū)塊鏈錢包階段設(shè)置。因此,可能存在更多或更少的它們,并且它們可以具有任何名稱。
建議將收到的值存儲在支付歷史中的比特幣中;但是,應(yīng)該將其轉(zhuǎn)換為另一種貨幣(例如美元),由用戶系統(tǒng)使用。如果系統(tǒng)僅適用于比特幣,則無需轉(zhuǎn)換任何內(nèi)容。
有單獨的匯率API文檔,用于將比特幣轉(zhuǎn)換為其他貨幣。用戶必須指定兩個參數(shù):
Print_r($ Exchange_data_obj)
獲取它。今天,有許多公司開發(fā)提供應(yīng)用程序開發(fā)工具的平臺和項目。Blockchain.info有許多區(qū)塊鏈信息API,用于處理他們的電子錢包服務(wù)(這是最大的電子錢包服務(wù)之一),旨在發(fā)送和接收付款并執(zhí)行其他操作。該鏈創(chuàng)建了用于訪問分布式記錄注冊表的完整節(jié)點中包含的數(shù)據(jù)的接口,以及標準信息請求:例如,關(guān)于你的比特幣余額。此外,你可以在特定地址執(zhí)行操作時發(fā)送通知。
Stellar是一個半去中心化的(由網(wǎng)關(guān)組織服務(wù),而不是礦工),可公開訪問的日志和統(tǒng)一開發(fā)環(huán)境(區(qū)塊鏈API,多簽名API)綁定到Stripe支付網(wǎng)絡(luò)。還有其他公司擁有帶有多邊簽名的區(qū)塊鏈錢包API,例如Block.io,Gem,BlockCypher等。
將來,需要更加統(tǒng)一的區(qū)塊鏈API開發(fā)環(huán)境,包括區(qū)塊鏈生態(tài)系統(tǒng)的各種不斷變化的組件(存儲,文件維護,錢包交互,移動支付,身份驗證和聲譽)。智能合約將允許我們創(chuàng)建一個全球氣象數(shù)據(jù)市場meteorological data market
,消費者將在其中請求實時數(shù)據(jù)并以通用格式接收數(shù)據(jù)(使用區(qū)塊鏈信息API)。
集中數(shù)據(jù)提供商可以告別自己的格式和銷售活動,而是將數(shù)據(jù)傳送到全球可訪問的氣象市場dApp??梢詫^(qū)塊鏈的開發(fā)環(huán)境與其他大型網(wǎng)段聯(lián)系起來:例如,機器到機器(M2M)通信和物聯(lián)網(wǎng)網(wǎng)絡(luò)的基礎(chǔ)設(shè)施,用于快速應(yīng)用程序開發(fā)。在遙遠的未來,這種類型的高級集成應(yīng)用程序的一個例子可以是與智能城市基礎(chǔ)設(shè)施內(nèi)的交通傳感器交互的智能手表,以便使用比特幣中的智能合約自動預留和支付流量。
幾乎所有操作系統(tǒng)(UNIX,Windows,OS X等)都有一個API,程序員可以使用該API為操作系統(tǒng)創(chuàng)建應(yīng)用程序。主API操作系統(tǒng)是一組系統(tǒng)調(diào)用。應(yīng)該注意的是,開發(fā)人員通常有幾種不同的API來實現(xiàn)相同的結(jié)果。此外,每個API通常使用較低抽象級別的API程序組件來實現(xiàn)。例如:為了看到“Hello,world!”這一行,在瀏覽器中,你只需創(chuàng)建一個具有最小標題的HTML文檔和包含給定行的最簡單的主體。
當瀏覽器打開此文檔時,瀏覽器程序會將文件的名稱(或已打開的文件描述符)傳輸?shù)教幚鞨TML文檔的庫,而庫文件將使用操作API系統(tǒng)讀取此文件,然后通過“clear window”類型的標準圖形/基本操作的API庫調(diào)用它。在所選字體中寫下“Hello,world!”。在執(zhí)行這些操作期間,圖形基元庫將使用相應(yīng)的請求訪問窗口接口庫。該庫已經(jīng)與操作系統(tǒng)API聯(lián)系,將數(shù)據(jù)寫入視頻卡緩沖區(qū)。
與此同時,幾乎每個級別實際上都有幾種可能的替代API。例如,我們可以不在HTML上編寫源文檔,而是在LaTeX上編寫。我們可以使用任何瀏覽器進行顯示。一般來說,不同的瀏覽器使用不同的HTML庫,所有這些都可以使用不同的原始庫和不同的操作系統(tǒng)進行編譯。
因此,現(xiàn)有多級API系統(tǒng)的主要困難是:
軟件接口的分類與通過它們控制的應(yīng)用程序的目的和功能密切相關(guān)。事實上,在運行復雜系統(tǒng)時,通常有其他API可以通過其他方式解決相同的問題。
單獨的組分配用于管理軟件模塊(wxWidgets,Qt,GTK等),操作系統(tǒng)(Amiga ROM內(nèi)核,Cocoa,Linux內(nèi)核API,OS/2 API,POSIX,Windows API),聲音(DirectMusic /)的圖形組件的接口DirectSound,OpenAL),窗口接口等。它們的分離取決于層次結(jié)構(gòu)和功能中的應(yīng)用程度。計算機游戲的用戶通常不會懷疑這個圖形API為他們提供如此快速的圖片繪制和驚人的圖像亮度。
全局區(qū)塊鏈API通常包括各個編程語言的接口。在他們的幫助下,你可以管理非常具體和本地任務(wù)的解決方案。這一切都取決于具體算法的實現(xiàn)。
區(qū)塊鏈引發(fā)了大量極其重要的問題。它的使用具有廣泛的優(yōu)勢:拒絕第三方,保護交易,安全交易,資源共享,保證交易,自動執(zhí)行合約等。
讓我們從角度看一下這項技術(shù):
它還可以解決許多更棘手的問題。其中之一是集中化。區(qū)塊鏈技術(shù)在未來的世界中可能非常有用,在這個世界中,集中式和去中心化式模型都將得到應(yīng)用。它不僅會破壞現(xiàn)有的陳規(guī)定型觀念和計劃,還有助于發(fā)展結(jié)合了舊的和創(chuàng)新的方法的大型生態(tài)系統(tǒng)。
原文轉(zhuǎn)自:匯智網(wǎng)原創(chuàng)翻譯,如何更好的利用區(qū)塊鏈API – 簡書 (jianshu.com)