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