REST API を使用すると、スマートコントラクトの呼び出し、台帳からのブロックおよびトランザクションデータのクエリ、ブロックチェーンイベントのサブスクライブができます。すべてのリクエストには、ベアラートークン認証が必要です。すべての API 呼び出しに、次の HTTP ヘッダーを含めてください:
Authorization: Bearer <your-access-token>前提条件
作業を開始する前に、以下を確認してください:
組織が設定された Blockchain as a Service (BaaS) インスタンス
Cloud Service Integration モジュールがインストールされていること。インストールされていない場合は、先に進む前に「Cloud Service Integration のインストール」の手順に従ってください。
アクセストークンの生成
REST API は、リクエストを認証するためのアクセストークンと、現在のアクセストークンが有効期限切れになったときに新しいアクセストークンを取得するための更新トークンの 2 種類のトークンを使用します。
ご利用の組織の REST API ページに移動します。

右上隅にある [トークンの生成] をクリックします。サイドバーが表示されます。アクセストークンと更新トークンの有効期間を選択し、トークンに必要な権限をチェックします。

サイドバーで [トークンの生成] をクリックします。生成されたトークン情報がテキストボックスに表示されます。
アクセストークンをコピーします。このトークンは、API 呼び出しの認証や Swagger UI の設定に使用します。
Swagger UI を使用したデバッグ
Swagger UI は REST API ページで利用でき、ブラウザから直接テストリクエストを送信できます。
アクセストークンの設定
Swagger UI で使用されるトークンを更新するには (たとえば、トークンの有効期限が切れた場合や、別のトークンをテストしたい場合など)、次の手順を実行します:
ページ上の [Authorize] をクリックします。現在の認証情報を表示するダイアログが表示されます。

トークンがすでに設定されている場合は、[ログアウト] をクリックして既存の認証情報をクリアします。

アクセストークンを [値] フィールドに入力し、[Authorize] をクリックします。

[閉じる] をクリックします。各 API の横にあるロックアイコンがロック済みの状態になり、認証が設定されたことを確認できます。

リクエストの送信
テストしたい API (たとえば invoke) を選択し、そのタイトルをクリックして詳細を展開します。

[試す] をクリックし、必要に応じてパラメーターを調整します。

[実行] をクリックします。リクエストの下に応答が表示されます。

/networks/{network}/events/subscribe エンドポイントは Swagger UI ではテストできません。テスト方法については、「イベントのサブスクライブ」をご参照ください。
アクセストークンの更新
アクセストークンは短命です。トークンの有効期限が近づいたら、更新トークンを使用して、再認証なしで新しいアクセストークンを取得します。
REST API は、OAuth 2.0 に準拠した更新エンドポイントを /api/v1/token で提供します。標準の OAuth 2.0 SDK を使用してトークンの更新を自動的に処理します。各言語のクライアント実装は oauth.net/code で見つけることができます。
または、以下の SDK サンプルのいずれかを使用します。各サンプルは、デフォルトで公証コントラクトを呼び出します。サンプルを実行する前に、公証サンプルコントラクトをダウンロードしてください。
Java SDK サンプル
要件: Java 1.8 以降
Java SDK サンプルを取得します。
java-oauth-client/src/main/resources/application.propertiesを編集し、ご利用の REST API アドレス、トークン情報、チャンネル名、スマートコントラクト情報を入力します。java-oauth-clientディレクトリから、以下を実行します:mvn spring-boot: run
実行が成功すると、次のような出力が生成されます:
> mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.6.RELEASE)
2020-02-17 18:00:09.056 INFO 79141 --- [ main] com.aliyun.baas.MainApplication : Starting MainApplication on Bright.local with PID 79141 (java-oauth-client/target/classes started by bright in java-oauth-client)
2020-02-17 18:00:09.059 INFO 79141 --- [ main] com.aliyun.baas.MainApplication : No active profile set, falling back to default profiles: default
2020-02-17 18:00:09.092 INFO 79141 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5bf85360: startup date [Mon Feb 17 18:00:09 CST 2020]; root of context hierarchy
2020-02-17 18:00:09.775 INFO 79141 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2020-02-17 18:00:09.792 INFO 79141 --- [ main] com.aliyun.baas.MainApplication : Started MainApplication in 0.958 seconds (JVM running for 3.321)
<200,class InlineResponse2002 {
success: true
result: class Block {
number: 1
hash: 1c397c4eb3e0e330c01ec430170f844e46159f16930aa347486b8153b6586548
previousHash: 88ef0ad6ba2df7ba7e53de78575d2d14cee2253fe6897305e50b57ceeecebc78
createTime: 1579056958
transactions: []
data: {data={data=[{payload={data={config={channel_group= ... }}}}]}}
}
error: class Error {
code: 200
message: Success
requestId: edf8fe52-7cef-447f-a04a-7b8c1db56487
}
},{Server=[nginx], Date=[Mon, 17 Feb 2020 10:00:10 GMT], Content-Type=[application/json; charset=UTF-8], Transfer-Encoding=[chunked], Connection=[keep-alive]}>
<200,class InlineResponse200 {
success: true
result: class Response {
id: a5f5503f12b92a4c59e079e1baf49b517785e2d9988f90dfb234f6c3954a2389
status: 200
event: null
data: MTU4MTkzMzYxMDEzNg==
}
error: class Error {
code: 200
message: Success
requestId: 71a9f95f-ea5b-4dea-b4a1-a608ae429fb4
}
},{Server=[nginx], Date=[Mon, 17 Feb 2020 10:00:11 GMT], Content-Type=[application/json; charset=UTF-8], Content-Length=[249], Connection=[keep-alive]}>
<200,class InlineResponse200 {
success: true
result: class Response {
id: ba50180c9fe38c9be115f20775b78e80b7a1205c34ef34b66fab635efedc3b49
status: 200
event: null
data: MTU4MTkzMzYxMDEzNg==
}
error: class Error {
code: 200
message: Success
requestId: c703a36b-3589-4a8b-87a0-5e5bf56b2396
}
},{Server=[nginx], Date=[Mon, 17 Feb 2020 10:00:11 GMT], Content-Type=[application/json; charset=UTF-8], Content-Length=[249], Connection=[keep-alive]}>
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.217 s
[INFO] Finished at: 2020-02-17T18:00:11+08:00
[INFO] ------------------------------------------------------------------------
2020-02-17 18:00:11.573 INFO 79141 --- [ Thread-3] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@5bf85360: startup date [Mon Feb 17 18:00:09 CST 2020]; root of context hierarchy
2020-02-17 18:00:11.574 INFO 79141 --- [ Thread-3] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdownGo SDK サンプル
要件: Go 1.13.x
Go SDK サンプルを取得します。
go-oauth-client/src/go-oauth-client/main.goの設定を編集し、ご利用の REST API アドレス、トークン情報、チャンネル名、スマートコントラクト情報を入力します。go-oauth-client/src/go-oauth-clientディレクトリから、以下を実行します:> go run main.go ブロックのレスポンスボディ: {"Success":true,"Result":{"number":1,"hash":"1c397c4eb3e0e330c01ec430170f844e46159f16930aa347486b8153b6586548","create_time":1579056958,"previous_hash":"88ef0ad6ba2df7ba7e53de78575d2d14cee2253fe6897305e50b57ceeecebc78","transactions":[],"data":{"data":{"data":[{"payload":{"data":{"config":{"channel_group": ...}}}}]}}} 呼び出しのレスポンスボディ: {"Success":true,"Result":{"id":"e0a11c3b953fa1759ef715214bb8bd24c0a7e762b739eb5f645ead921314fef4","status":"200","events":[],"data":"MTU4MTkzNDAwOA=="},"Error":{"code":200,"message":"Success","request_id":"c3c92ad0-a0ef-4a82-b596-4ac50a893ef6"}} コントラクト呼び出しの応答: "MTU4MTkzNDAwOA==" クエリのレスポンスボディ: {"Success":true,"Result":{"id":"c3d4c2928dfa7129641863b18dfeee4b18c7227929c841ff7d8bd25148f6c5f6","status":"200","events":[],"data":"MTU4MTkzNDAwOA=="},"Error":{"code":200,"message":"Success","request_id":"f1bf52b2-8c60-491e-9a40-8fecb96667ea"}} コントラクトクエリの応答: "MTU4MTkzNDAwOA=="
実行が成功すると、次のような出力が生成されます:
> go run main.go
Block response body: {"Success":true,"Result":{"number":1,"hash":"1c397c4eb3e0e330c01ec430170f844e46159f16930aa347486b8153b6586548","create_time":1579056958,"previous_hash":"88ef0ad6ba2df7ba7e53de78575d2d14cee2253fe6897305e50b57ceeecebc78","transactions":[],"data":{"data":{"data":[{"payload":{"data":{"config":{"channel_group": ...}}}}]}}}
Invoke response body: {"Success":true,"Result":{"id":"e0a11c3b953fa1759ef715214bb8bd24c0a7e762b739eb5f645ead921314fef4","status":"200","events":[],"data":"MTU4MTkzNDAwOA=="},"Error":{"code":200,"message":"Success","request_id":"c3c92ad0-a0ef-4a82-b596-4ac50a893ef6"}}
Invoke contract response: "MTU4MTkzNDAwOA=="
Query response body: {"Success":true,"Result":{"id":"c3d4c2928dfa7129641863b18dfeee4b18c7227929c841ff7d8bd25148f6c5f6","status":"200","events":[],"data":"MTU4MTkzNDAwOA=="},"Error":{"code":200,"message":"Success","request_id":"f1bf52b2-8c60-491e-9a40-8fecb96667ea"}}
Query contract response: "MTU4MTkzNDAwOA=="Node SDK サンプル
要件: Node.js 8.17 以降
Node SDK サンプルを取得します。
node-oauth-client/main.jsの設定を編集し、ご利用の REST API アドレス、トークン情報、チャンネル名、スマートコントラクト情報を入力します。node-oauth-clientディレクトリから、依存関係をインストールしてサンプルを実行します:npm install node main.js
実行が成功すると、次のような出力が生成されます:
> node main.js
{ number: 1,
hash: '1c397c4eb3e0e330c01ec430170f844e46159f16930aa347486b8153b6586548',
create_time: 1579056958,
previous_hash: '88ef0ad6ba2df7ba7e53de78575d2d14cee2253fe6897305e50b57ceeecebc78',
transactions: [],
data:
{ data: { data: [Array] },
header:
{ data_hash: 'HDl8TrPg4zDAHsQwFw+ETkYVnxaTCqNHSGuBU7ZYZUg=',
number: '1',
previous_hash: 'iO8K1rot97p+U954V10tFM7iJT/miXMF5QtXzu7OvHg=' },
metadata: { metadata: [Array] } } }
Data 1581931486180 pushed to blockchain with transaction f19217c0db571dc715af8ad99025422f03e5561910371841fe5e69a356d0cb23
{ id: '8fd06f6087c5128b7dbe309658b170366b37e0733994e5e959d30be201c28827',
status: '200',
events: [],
data: 'MTU4MTkzMTQ4NjE4MA==' }次のステップ
イベントのサブスクライブ —
/networks/{network}/events/subscribeエンドポイントを使用してブロックチェーンイベントをサブスクライブします