本文介绍了区块链 API 的种类及应用,包括钱包 API、WebSocket API 等,还阐述了利用区块链 API 的方法和注意事项。
<!--EndFragment-->
区块链允许数据提供者和消费者直接在单个开放系统中交易信息,而不是订阅世界各地的数十个集中服务,并编写他们的软件来与每个API进行通信。阅读此区块链API教程,了解如何根据你的特定需求使用它。
API(应用程序编程接口)是单个计算机程序可以用来与另一个程序交互的方法(类,过程,函数,结构或常量)的描述。它通常包含在任何Internet协议(例如RFC)的描述中,软件框架或对操作系统函数的标准调用。它通常由单独的软件库或操作系统服务实现。开发人员通常使用区块链API来编写各种应用程序。
API定义程序(模块,库)提供的功能,并允许从该功能的实现方式中抽象出来。软件组件通过API相互交互。在这种情况下,组件通常形成层次结构:高级组件使用低级组件的API,而这些组件又使用甚至更低级别组件的API。通过因特网进行数据传输的协议是根据该原理构建的。
标准协议栈(OSI网络模型)包含7层(从物理位传输层到应用协议层,类似于HTTP和IMAP协议)。每个级别使用先前底层数据传输级别的功能,并为下一个覆盖级别提供必要的功能。
<!--EndFragment-->
注意:协议的概念与API的概念意义相近。两者都是功能的抽象,除了协议涉及数据传输,而API与应用程序的交互相关。
区块链软件的开发通常包括各种困难部分。其中最重要的是创建区块链API接口。有些项目通过提供以下API服务来帮助用户和开发人员:
网站收到比特币付款的难以置信的简便方式。这种服务是完全安全的,是商务或个人使用的理想选择:
让我们从区块链钱包API评论开始。区块链Wallet API提供了一个简单的界面。要使用此API,你需要启动一个负责管理钱包的小型本地服务。你的应用程序通过HTTP API调用在本地与此服务进行交互。
<!--EndFragment-->
现在,你可以从新的区块链钱包API转移比特币。所有交易均价值0.0001 BTC矿工的费用。这是它在PHP中的样子:
&lt;?<br>
$guid="GUID_HERE";<br>
$firstpassword="PASSWORD_HERE";<br>
$secondpassword="PASSWORD_HERE";<br>
$amounta = "10000000";<br>
$amountb = "400000";<br>
$addressa = "1A8JiWcwvpY7tAopUkSnGuEYHmzGYfZPiq";<br>
$addressb = "1ExD2je6UNxL5oSu6iPUhn9Ta7UrN8bjBy";<br>
$recipients = urlencode('{<br>
"'.$addressa.'": '.$amounta.',<br>
"'.$addressb.'": '.$amountb.'<br>
}');<br>
$json_url = "http://localhost:3000/merchant/$guid/sendmany?password=$firstpassword&amp;second_password=$secondpassword&amp;recipients=$recipients";<br>
$json_data = file_get_contents($json_url);<br>
$json_feed = json_decode($json_data);<br>
$message = $json_feed-&gt;message;<br>
$txid = $json_feed-&gt;tx_hash;<br>
?&gt;
WebSocket API允许开发人员获取有关新交易和块的实时数据。
从URL链接wss://ws.blockchain.info/inv
开始。部署套接字时,用户通过发送op
消息{“op”:“ping”}
来订阅该频道。然后,订阅有关所有新比特币交易的通知{“op”:“unconfirmed_sub”}
。最后,订阅地址{“op”:”addr_sub”, “addr”:”$bitcoin_address”}
。
有关新交易的通知如下所示:
"op": "utx",<br>
"x": {<br>
"lock_time": 0,<br>
"ver": 1,<br>
"size": 192,<br>
"inputs": [<br>
{<br>
"sequence": 4294967295,<br>
"prev_out": {<br>
"spent": true,<br>
"tx_index": 99005468,<br>
"type": 0,<br>
"addr": "1BwGf3z7n2fHk6NoVJNkV32qwyAYsMhkWf",<br>
"value": 65574000,<br>
"n": 0,<br>
"script": "76a91477f4c9ee75e449a74c21a4decfb50519cbc245b388ac"<br>
},<br>
"script": "483045022100e4ff962c292705f051c2c2fc519fa775a4d8955bce1a3e29884b2785277999ed02200b537ebd22a9f25fbbbcc9113c69c1389400703ef2017d80959ef0f1d685756c012102618e08e0c8fd4c5fe539184a30fe35a2f5fccf7ad62054cad29360d871f8187d"<br>
}<br>
],<br>
"time": 1440086763,<br>
"tx_index": 99006637,<br>
"vin_sz": 1,<br>
"hash": "0857b9de1884eec314ecf67c040a2657b8e083e1f95e31d0b5ba3d328841fc7f",<br>
"vout_sz": 1,<br>
"relayed_by": "127.0.0.1",<br>
"out": [<br>
{<br>
"spent": false,<br>
"tx_index": 99006637,<br>
"type": 0,<br>
"addr": "1A828tTnkVFJfSvLCqF42ohZ51ksS3jJgX",<br>
"value": 65564000,<br>
"n": 0,<br>
"script": "76a914640cfdf7b79d94d1c980133e3587bd6053f091f388ac"
对于区块链数据API,如果向GET
请求添加&cors=true
参数,则可以使用CORS
进行一些数据API调用。
CORS(跨源资源共享)是现代浏览器的一种技术,它提供可以访问另一个域的资源的网页。直到最近,克服同源策略对XSS请求施加的限制的主要方法是使用JSONP。JSONP本身有一个致命的限制:它只能通过GET方法接收数据。通过POST方法发送数据仍然无法访问。
<!--EndFragment-->
技术本身非常简单。有三个域希望从服务器下载资源。为了实现这一点,提供内容的Web服务器足以在响应头中指示可信域列表Access-Control-Allow-Origin:A,B,C。然后相同源原则的限制 在请求的页面上将不适用于这些域的页面。要启动跨源请求,客户端浏览器会向HTTP请求(发出请求的站点域)添加原始请求。例如,页面http://www.a.com/page.html尝试从http://www.b.com/cors.txt页面获取数据。
在区块链数据API中,单个块如下所示:
"hash":"0000000000000bae09a7a393a8acded75aa67e46cb81f7acaa5ad94f9eacd103",<br>
"ver":1,<br>
"prev_block":"00000000000007d0f98d9edca880a6c124e25095712df8952e0439ac7409738a",<br>
"mrkl_root":"935aa0ed2e29a4b81e0c995c39e06995ecce7ddbebb26ed32d550a72e8200bf5",<br>
"time":1322131230,<br>
"bits":437129626,<br>
"nonce":2964215930,<br>
"n_tx":22,<br>
"size":9195,<br>
"block_index":818044,<br>
"main_chain":true,<br>
"height":154595,<br>
"received_time":1322131301,<br>
"relayed_by":"108.60.208.156",<br>
"tx":[--Array of Transactions--]
区块链图表和统计API允许与blockchain.info上显示的图表和统计信息进行交互。(区块链信息API)。
<!--EndFragment-->
可以使用Charts API方法接收有关blockchain.info图表的信息:
"status": "ok",<br>
"name": "Confirmed Transactions Per Day",<br>
"unit": "Transactions",<br>
"period": "day",<br>
"description": "The number of daily confirmed Bitcoin transactions.",<br>
"values": [<br>
{<br>
"x": 1442534400, // Unix timestamp (2015-09-18T00:00:00+00:00)<br>
"y": 188330.0<br>
},<br>
...
Stats API可用于接收有关blockchain.info统计信息的信息:
"market_price_usd": 610.036975,<br>
"hash_rate": 1.8410989266292908E9,<br>
"total_fees_btc": 6073543165,<br>
"n_btc_mined": 205000000000,<br>
"n_tx": 233805,<br>
"n_blocks_mined": 164,<br>
"minutes_between_blocks": 8.2577,<br>
"totalbc": 1587622500000000,<br>
"n_blocks_total": 430098,<br>
"estimated_transaction_volume_usd": 1.2342976868108143E8,<br>
"blocks_size": 117490685,<br>
"miners_revenue_usd": 1287626.6577490852,<br>
"nextretarget": 431423,<br>
"difficulty": 225832872179,<br>
"estimated_btc_sent": 20233161880242,<br>
"miners_revenue_btc": 2110,<br>
"total_btc_sent": 184646388663542,<br>
"trade_volume_btc": 21597.09997288,<br>
"trade_volume_usd": 1.3175029536228297E7,<br>
"timestamp": 1474035340000
接受比特币支付变得越来越受欢迎和需求。在网站上接受比特币支付的方法有很多种。最方便的方法之一是区块链API。在这里,你不需要绑定特定语言或SDK;你甚至不需要在那里注册。所需要的只是拥有一个钱包来接受比特币,并有时间将相当简单的API连接到你的系统。此外,客户不会看到你的钱包,而是交易所的临时钱包。
<!--EndFragment-->
在直接谈论代码之前(我们将在示例中使用PHP,但可以在Java,Python等中轻松实现),有必要阐明支付接受机制本身。
整个过程符合以下顺序:
要获得临时钱包,你应该发送一系列数据:
此数据将发送到区块链脚本(https://blockchain.info/api/receive),每个参数都是常用的GET参数。其执行结果由用户系统处理(结果将采用JSON格式)。关于区块链信息API的所有内容都在区块链API文档中说明。
现在,用户已准备好接受对钱包的付款,但无法从系统中注册其收据的事实。用户应该记住,在实际系统中,建议使用经过深思熟虑且编写良好的代码,以及存储准备好的付款的数据库(将付款号码,用户ID存储在系统和验证短语或其组成部分)。此外,验证付款的时间可能不同且非常重要,比特币汇率可能会发生变化。用户有两种选择:在付款时保留费率,或在收到交易确认后请求费率。
交易确认收据文件应该叫做receive_payment.php,并且应该存储在网站的根目录中;在请求临时钱包时,用户在创建$ callback_url
时指定了其名称。
实际上,同一付款的脚本不仅会被调用一次,而且会根据其在各个节点上的确认数量来调用。这意味着用户必须先检查是否有确认。
区块链提供了许多参数:
value参数在Satoshi中生成值,而不是比特币(1Satoshi=0.00000001BTC)。因此,结果值应该减少到比特币。名为invoice_id和secret的参数由用户在接收区块链钱包阶段设置。因此,可能存在更多或更少的它们,并且它们可以具有任何名称。
建议将收到的值存储在支付历史中的比特币中;但是,应该将其转换为另一种货币(例如美元),由用户系统使用。如果系统仅适用于比特币,则无需转换任何内容。
有单独的汇率API文档,用于将比特币转换为其他货币。用户必须指定两个参数:
Print_r($ Exchange_data_obj)
获取它。今天,有许多公司开发提供应用程序开发工具的平台和项目。Blockchain.info有许多区块链信息API,用于处理他们的电子钱包服务(这是最大的电子钱包服务之一),旨在发送和接收付款并执行其他操作。该链创建了用于访问分布式记录注册表的完整节点中包含的数据的接口,以及标准信息请求:例如,关于你的比特币余额。此外,你可以在特定地址执行操作时发送通知。
Stellar是一个半去中心化的(由网关组织服务,而不是矿工),可公开访问的日志和统一开发环境(区块链API,多签名API)绑定到Stripe支付网络。还有其他公司拥有带有多边签名的区块链钱包API,例如Block.io,Gem,BlockCypher等。
<!--EndFragment-->
将来,需要更加统一的区块链API开发环境,包括区块链生态系统的各种不断变化的组件(存储,文件维护,钱包交互,移动支付,身份验证和声誉)。智能合约将允许我们创建一个全球气象数据市场meteorological data market
,消费者将在其中请求实时数据并以通用格式接收数据(使用区块链信息API)。
集中数据提供商可以告别自己的格式和销售活动,而是将数据传送到全球可访问的气象市场dApp。可以将区块链的开发环境与其他大型网段联系起来:例如,机器到机器(M2M)通信和物联网网络的基础设施,用于快速应用程序开发。在遥远的未来,这种类型的高级集成应用程序的一个例子可以是与智能城市基础设施内的交通传感器交互的智能手表,以便使用比特币中的智能合约自动预留和支付流量。
几乎所有操作系统(UNIX,Windows,OS X等)都有一个API,程序员可以使用该API为操作系统创建应用程序。主API操作系统是一组系统调用。应该注意的是,开发人员通常有几种不同的API来实现相同的结果。此外,每个API通常使用较低抽象级别的API程序组件来实现。例如:为了看到“Hello,world!”这一行,在浏览器中,你只需创建一个具有最小标题的HTML文档和包含给定行的最简单的主体。
当浏览器打开此文档时,浏览器程序会将文件的名称(或已打开的文件描述符)传输到处理HTML文档的库,而库文件将使用操作API系统读取此文件,然后通过“clear window”类型的标准图形/基本操作的API库调用它。在所选字体中写下“Hello,world!”。在执行这些操作期间,图形基元库将使用相应的请求访问窗口接口库。该库已经与操作系统API联系,将数据写入视频卡缓冲区。
<!--EndFragment-->
与此同时,几乎每个级别实际上都有几种可能的替代API。例如,我们可以不在HTML上编写源文档,而是在LaTeX上编写。我们可以使用任何浏览器进行显示。一般来说,不同的浏览器使用不同的HTML库,所有这些都可以使用不同的原始库和不同的操作系统进行编译。
因此,现有多级API系统的主要困难是:
软件接口的分类与通过它们控制的应用程序的目的和功能密切相关。事实上,在运行复杂系统时,通常有其他API可以通过其他方式解决相同的问题。
单独的组分配用于管理软件模块(wxWidgets,Qt,GTK等),操作系统(Amiga ROM内核,Cocoa,Linux内核API,OS/2 API,POSIX,Windows API),声音(DirectMusic /)的图形组件的接口DirectSound,OpenAL),窗口接口等。它们的分离取决于层次结构和功能中的应用程度。计算机游戏的用户通常不会怀疑这个图形API为他们提供如此快速的图片绘制和惊人的图像亮度。
全局区块链API通常包括各个编程语言的接口。在他们的帮助下,你可以管理非常具体和本地任务的解决方案。这一切都取决于具体算法的实现。
区块链引发了大量极其重要的问题。它的使用具有广泛的优势:拒绝第三方,保护交易,安全交易,资源共享,保证交易,自动执行合约等。
让我们从角度看一下这项技术:
它还可以解决许多更棘手的问题。其中之一是集中化。区块链技术在未来的世界中可能非常有用,在这个世界中,集中式和去中心化式模型都将得到应用。它不仅会破坏现有的陈规定型观念和计划,还有助于发展结合了旧的和创新的方法的大型生态系统。
原文转自:汇智网原创翻译,如何更好的利用区块链API – 简书 (jianshu.com)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!