JSON API
快速導覽
有時候您需要視覺化呈現的資料,並非儲存在關聯式資料庫 (RDBMS) 或 NoSQL 資料儲存區中,而是來自某些 HTTP API。對於這些情況,Redash 提供了 JSON
資料來源(首次在 Redash v8 中引入)。
Redash 將來自 JSON
資料來源的所有傳入資料都視為文字;因此,您應該準備好在呈現資料時使用表格格式。
JSON 資料來源類型
使用 JSON
資料來源來查詢任意 JSON API。設定很簡單,因為不需要身份驗證。任何 RESTful JSON API 都將通過 HTTP 標頭處理身份驗證。因此,只需創建一個新的 JSON
類型的資料來源,並將其命名為您喜歡的名稱(“JSON”是一個不錯的選擇)。
Redash 將會偵測 JSON 支援的資料類型(例如數字、字串、布林值),但其他資料類型(主要是日期/時間戳記)將被視為字串(除非以 ISO-8601 格式指定)。
使用方式
此資料來源以 YAML 格式接收查詢。以下是一些使用 GitHub API 的範例
從端點返回物件列表
url: https://api.github.com/repos/getredash/redash/issues
這將按原樣返回上述 API 呼叫的結果。
返回單個物件
url: https://api.github.com/repos/getredash/redash/issues/3495
上述 API 呼叫返回單個物件,而此物件將被轉換為一行。
返回特定欄位
如果您只想從結果物件中選取特定欄位,您可以傳遞 fields
選項
url: https://api.github.com/repos/getredash/redash/issues
fields: [number, title]
返回內部物件
許多 JSON API 都返回巢狀物件的陣列。您可以使用 path
鍵存取陣列中的物件。
url: https://api.github.com/repos/getredash/redash/issues/3495
path: assignees
上述查詢將使用 API 結果中的 assignee
物件作為查詢結果。
傳遞查詢字串參數
您可以建立自己的 URL,也可以傳遞 params
選項
url: 'https://api.github.com/search/issues'
params:
q: is:open type:pr repo:getredash/redash
sort: created
order: desc
以上與以下相同
url: 'https://api.github.com/search/issues?q=+is:open+type:pr+repo:getredash/redash&sort=created&order=desc'
其他 HTTP 選項
您可以傳遞其他鍵來修改各種 HTTP 選項
method
- 要使用的 HTTP 方法 (預設值:get
)headers
- 要隨請求傳送的標頭字典auth
- 基本身份驗證的使用者名稱/密碼 (應作為陣列傳遞:[username, password]
)params
- 要新增至 URL 的查詢字串參數字典data
- 作為請求主體使用的值字典json
- 與data
相同,只是它被轉換為 JSON
URL 資料來源類型
URL
資料來源類型已棄用。您仍然可以使用使用此類型建立的現有資料來源,但您無法創建新的資料來源。我們建議遷移到 JSON 資料來源類型。URL
資料來源期望您的端點返回具有特殊資料結構的 JSON(請參閱下文)。
使用方式
您的查詢主體將僅包含返回資料的 URL,例如
http://myserver/path/myquery
要操作資料(篩選、排序、聚合等),您可以使用查詢結果資料來源。
必要的資料結構
返回的物件必須公開兩個鍵:columns
和 rows
。
-
columns
鍵應公開描述要包含在資料集中的欄位的 javascript 物件陣列。每個物件將包含三個鍵name
type
friendly_name
-
rows
應返回一個 javascript 物件陣列,表示每一行資料。每個物件的鍵應與columns
陣列中描述的name
鍵匹配。
以下資料類型受欄位支援
- text
- integer
- float
- boolean
- string
- datetime
- date
下面顯示了返回資料的範例
{
"columns": [
{
"name": "date",
"type": "date",
"friendly_name": "date"
},
{
"name": "day_number",
"type": "integer",
"friendly_name": "day_number"
},
{
"name": "value",
"type": "integer",
"friendly_name": "value"
},
{
"name": "total",
"type": "integer",
"friendly_name": "total"
}
],
"rows": [
{
"value": 40832,
"total": 53141,
"day_number": 0,
"date": "2014-01-30"
},
{
"value": 27296,
"total": 53141,
"day_number": 1,
"date": "2014-01-30"
},
{
"value": 22982,
"total": 53141,
"day_number": 2,
"date": "2014-01-30"
}
]
}