所有文档

          百度数据可视化 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(@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
          上一篇
          SQL建模
          下一篇
          各种图表的API格式要求