全部產品
Search
文件中心

:使用REST-API

更新時間:Jul 06, 2024

您可以通過 REST API 呼叫智能合約,寫入或查詢鏈上資訊,也可以查詢區塊及交易資訊,並監聽區塊鏈事件。區塊鏈 REST-API 使用 Bearer Token 的認證方式,在調用API時,您需要額外指定 HTTP 頭 “Authorization: Bearer <Your Access Token>” 來提供您的 Access Token。

產生 Access Token

您可以按照以下步驟產生 Access Token 與 Refresh Token,用來訪問 REST-API 以及更新 Access Token。

  1. 進入組織的 REST-API 展示頁面,如果您未安裝雲端服務整合功能,需要按照引導完成安裝,更多請參考安裝雲端服務整合

    image.png

  2. 點擊頁面右上方的“產生Token”,會彈出如下對話方塊。根據使用情境,選擇合適的 Access Token 與 Refresh Token 的有效期間,並勾選 Token 具有的許可權。產生Token

  3. 點擊側邊欄的“產生Token”,會在下方展示產生的 Token 資訊。

使用 Swagger UI,測試 REST-API

使用 REST-API 展示頁面中的 Swagger UI 之前,您需要先產生Access Token, 才能開啟 Swagger UI 控制台測試 REST-API。

配置Access Token

如果您產生的 Access Token 已經到期,或者希望測試應用APP使用的特定 Access Token,您可以按照以下步驟修改 Swagger UI 控制台使用的 Access Token。

  1. 點擊頁面中的“Authorize”按鈕,彈出認證資訊輸入對話方塊。認證按鈕

  2. 如果已經配置了 Access Token,先點擊“Logout”刪除舊的認證資訊。退出認證

  3. 在 “Value” 中輸入我們已經產生好的 Access Token,並點擊“Authorize”。輸入Token

  4. 點擊“Close”關閉對話方塊,我們可以看到 API 右側的小鎖已經是鎖定狀態,表示我們已經成功輸入了認證資訊認證完成

發起請求

  1. 選擇您想要調試的 REST API(這裡以 invoke 為例),點擊API標題,展開詳細描述。API描述

  2. 點擊描述右側的“Try it out”,按照調試需求,調整API的參數。API參數

  3. 點擊“Execute”發起請求,請求返回後,您可以在下方看到返回結果。

    image.png

重要

介面 /networks/{network}/events/subscribe 不能通過 Swagger UI 調試,測試方法請參考文檔訂閱事件

重新整理 Access Token

Access Token 有效期間較短,在 Token 即將到期時需要使用 Refresh Token 來擷取新的 Access Token。REST-API 提供了符合 OAuth 2.0 標準的重新整理介面 “/api/v1/token”,我們建議您使用標準 OAuth SDK 來自動重新整理Token並訪問 REST-API。您可以在 OAuth 庫實現 中找到各個語言的 OAuth Client 實現,也可以在這裡直接存取我們提供的幾種常用語言的 Client SDK 使用樣本:

SDK的調用參數預設基於樣本鏈碼,您可以在文檔智能合約樣本中擷取樣本鏈碼 notary 。

Java SDK 樣本

  1. 擷取 Java SDK 樣本,需要 Java 版本 >= 1.8。

  2. 根據您組織執行個體的 REST-API 地址、產生的 Token 資訊、業務通道和鏈碼資訊,修改檔案 java-oauth-client/src/main/resources/application.properties

  3. 進入目錄 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 樣本

  1. 擷取 Go SDK 樣本, 需要 go 版本為 1.13.x。

  2. 根據您組織執行個體的 REST-API 地址、產生的 Token 資訊、業務通道和鏈碼資訊,修改檔案 go-oauth-client/src/go-oauth-client/main.go 中的參數。

  3. 進入目錄 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 樣本

  1. 擷取 Node SDK 樣本, 需要 nodev8 版本 >= 8.17。

  2. 根據您組織執行個體的 REST-API 地址、產生的 Token 資訊、業務通道和鏈碼資訊,修改檔案 node-oauth-client/main.js 中的參數。

  3. 進入目錄 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==' }