百度数据可视化Sugar

    概述

    Sugar上的图表和过滤条件数据可以由用户通过 API 的形式来提供。Sugar会在后端通过 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(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
    上一篇
    SQL建模
    下一篇
    各种图表的API格式要求