REST API を使用してスマートコントラクトを呼び出し、台帳に情報を書き込んだり、情報をクエリしたりできます。また、ブロックとトランザクションの情報をクエリしたり、ブロックチェーンイベントをサブスクライブすることもできます。ブロックチェーン REST-API は、Bearer トークン認証方式を使用します。API を呼び出すときは、追加の HTTP ヘッダー「Authorization: Bearer <Your Access Token>」を指定して、アクセストークンを提供する必要があります。
アクセストークンの生成
以下の手順に従って、アクセストークンとリフレッシュトークンを生成できます。これらは、REST-API にアクセスし、アクセストークンを更新するために使用できます。
組織の REST-API 表示ページを入力します。Cloud Service Integration モジュールをインストールしていない場合は、手順に従ってインストールを完了する必要があります。詳細については、「Cloud Service Integration のインストール」をご参照ください。
ページの右上隅にある [トークンの生成] をクリックすると、次のサイドバーがポップアップ表示されます。トークンの実際の使用状況に応じて、アクセストークンとリフレッシュトークンの適切な有効期間を選択し、トークンに必要な権限を確認します。
サイドバーの [トークンの生成] をクリックすると、生成されたトークン情報がテキストボックスに表示されます。
Swagger UI を使用したデバッグ
REST-API 表示ページで Swagger UI を使用する前に、アクセストークンを生成する必要があります。
アクセストークンの構成
生成されたアクセストークンの有効期限が切れた場合、またはアプリで使用されている特定のアクセストークンをテストする場合は、次の手順に従って、Swagger UI で使用されるアクセストークンを変更できます。
ページの [承認] ボタンをクリックすると、認証情報に関するダイアログが表示されます。
アクセストークンが構成されている場合は、まず [ログアウト] をクリックして古い認証情報を削除します。
[値] に新しいアクセストークンを入力し、[承認] をクリックします。
[閉じる] をクリックしてダイアログボックスを閉じます。API の右側にある小さなロックがすでにロックされていることがわかります。これは、認証情報が正常に入力されたことを意味します。
リクエストの送信
デバッグする REST API を選択し(ここでは「invoke」を例にとります)、API タイトルをクリックして詳細な説明を展開します。
説明の右側にある [試してみる] をクリックし、デバッグ要件に従って API のパラメーターを調整します。
[実行] をクリックしてリクエストを開始します。リクエストが返されると、下に返されたリクエストの結果が表示されます。
インターフェイス「/networks/{network}/events/subscribe」は、Swagger UI を介してデバッグできません。テスト方法については、ドキュメント「イベントのサブスクライブ」をご参照ください。
アクセストークンの更新
アクセストークンは短期間有効なトークンです。トークンの有効期限が切れそうになったら、リフレッシュトークンを使用して新しいアクセストークンを取得する必要があります。REST-API は、OAuth 2.0 準拠のリフレッシュインターフェイス「/api/v1/token」を提供します。標準の OAuth SDK を使用してトークンを自動的に更新し、REST-API にアクセスすることをお勧めします。各言語の OAuth クライアントの実装は、[OAuth ライブラリ](https://oauth.net/code/)にあります。または、ここでいくつかの一般的な言語のクライアント SDK サンプルを直接使用することもできます。
SDK サンプルは、デフォルトで notary コントラクトを呼び出します。サンプルのスマートコントラクト notary をダウンロードできます。
Java SDK サンプル
Java SDK サンプル を取得します。Java バージョンは 1.8 以上である必要があります。
インスタンスに従ってファイル
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 shutdown
Go SDK サンプル
Go SDK サンプル を取得します。Golang のバージョンは 1.13.x です。
インスタンスに従ってファイル
go-oauth-client/src/go-oauth-client/main.go
の設定を変更し、REST-API アドレス、トークン情報、チャネル、およびスマートコントラクト情報を入力します。ディレクトリ
go-oauth-client/src/go-oauth-client
に移動し、go run main.go
を実行してサンプルプログラムを実行します。
正常な結果の例
> 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 SDK サンプル を取得します。Node のバージョンは 8.17 以上です。
インスタンスに従ってファイル
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==' }