概述
更新时间:2021-12-13
Sugar BI上的图表和过滤条件数据可以由用户通过 API 的形式来提供。Sugar BI会在后端通过 POST 的方式访问用户的 API,并在请求的 body 中带上过滤条件、下钻参数、联动参数等当前图表拉取数据时需要的信息,可以参考后面每个语言下如何获取的说明。具体的请求情况可以在图表的数据「调试」时弹框中看到。
用户的 API 返回数据要求都是 JSON 类型,格式如下:
JavaScript
1{
2 status: 0, // 0表示成功,非0表示失败
3 msg: '', // 失败时的提示信息
4 data: {...} // 具体的数据
5}
每种图表和过滤条件的 API 数据格式要求都不太一样,详见各种图表的 API 格式要求。
在各种语言下获取过滤条件的方法
Node
以 Express 为例
JavaScript
1const express = require('express');
2const app = express();
3const bodyParser = require('body-parser');
4app.use(bodyParser.json());
5app.post('/api', function(req, res) {
6 console.log(req.body); // 查询条件的 json
7 res.json(...);
8})
9app.listen(3000)
Java
以 Spring 为例
Java
1@RequestMapping(value = "/api", method = POST, consumes = MediaType.ALL_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
2@ResponseBody
3public String api(@RequestBody String filter) {
4 // filter 就是字符串形式的 json,需要使用 Jackson 等库解析为对象来使用
5}
PHP
Plain Text
1<?PHP
2$json = file_get_contents('php://input');
3$data = json_decode($json);
.NET
C#
1using Microsoft.AspNetCore.Mvc;
2using System.IO;
3using Newtonsoft.Json;
4
5namespace MvcMovie.Controllers
6{
7 public class HelloWorldController : Controller
8 {
9 [HttpPost]
10 public JsonResult Index()
11 {
12
13 using (var reader = new StreamReader(HttpContext.Request.Body))
14 {
15 dynamic json = JsonConvert.DeserializeObject(reader.ReadToEnd());
16 var conditions = json.conditions;
17 var data = new { status = 0, msg = "" };
18 return Json(data);
19 }
20 }
21 }
22}
go
Go
1func api(w http.ResponseWriter, r *http.Request) {
2 body, _ := ioutil.ReadAll(r.Body)
3 var result map[string]interface{} // 这里简化了,最好参考对应的参数说明文档创建 struct
4 json.Unmarshal(body, &result)
5}
Python
Python
1import json
2# falcon 框架
3class SugarAPI(object):
4 def on_post(self, req, resp):
5 data = json.load(req.bounded_stream)
6
7# flask 框架
8from flask import request
9@app.route('/api', methods=['POST'])
10def sugar_api():
11 data = json.loads(request.data)
Ruby
Ruby
1require 'sinatra'
2require 'json'
3
4post '/api/' do
5 request.body.rewind
6 request_payload = JSON.parse request.body.read
7end
