跳至主要內容

第一节 开发API接口


功能说明

此文章主要讲述通过ISM的Go虚拟机提供接口,接口提供了获取实时数据的返回格式,给前端图表使用。
这篇文章需要相关Go语言和API接口相关的知识,不了解的建议先看看网上的相关说明。

第一步 构建APi接口

我们首先把我们要展示的数据通过API接口开放出去,这样就可以通过接口把采集的实时数据开放出去给其他需要的组件调用。
在安装目录下面的sys_script目录下面新建api.go文件,把下面的代码赋值到文件中,然后重启ISM.
下面的代码只是演示,具体的功能要根据自己的业务需求修改

var time = import("time")
var fmt = import("fmt")
var http = import("net/http")
var json = import("encoding/json")
var io =  import("io")
var ioutil =  import("io/ioutil")

//跨域开启,此段不需要修改
func openky(w){
    w.Header().Set("Content-Type", "application/json")
    w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域
    w.Header().Set("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS")
    w.Header().Set("Access-Control-Allow-Headers", "content-type")
    w.Header().Set("Access-Control-Expose-Headers", "Access-Control-Allow-Headers, Token")
    w.Header().Set("Access-Control-Allow-Credentials", "true")
}

//请求接口 ApiDemo是接口名称,可以修改为你们自己的接口名称
http.HandleFunc("/ApiDemo", func(w, r) {

    //此处加上跨域请求,每个接口都要先调用这个函数。
    openky(w);

    //构建返回的接口,格式为json格式,ISM的Go虚拟机语法,定义变量可以直接用变量赋值
    //不需要var声明。不能使用 := 去赋值
    //切记结构体的成员变量首字母一定要大写。

  //获取到值后的回复变量
  ResponseData = map[string]interface{}
  //失败后的消息返回变量
  FailedResponseData = map[string]interface{}

  //通过GetDeviceData函数把系统采集到数据赋值给结构体变量
  //m1是测试的设备名称,register0和register1是m1设备下面的两个数据名称

  // ResponseData["Register0"] = GetDeviceData("m1->register0")
  // ResponseData["Register1"] = GetDeviceData("m1->register1")
  //可以自己按照接口要求返回特定格式,此段代码返回的格式
  // {
  //   "Code": -2,
  //   "Msg": "设备值获取错误",
  //   "ResponseData": {
  //     "Register0": 0,
  //     "Register1": 0
  //   }
  // }
  ResponseData["ResponseData"] = map[string]interface{}
  ResponseData["ResponseData"]["Register0"]= GetDeviceData("m1->register0")
  ResponseData["ResponseData"]["Register1"]= GetDeviceData("m1->register1")
  deviceStatus = GetDeviceData("m1->设备状态")

  //GetDeviceData函数如果没有获取到值,返回null空值

  if ResponseData["ResponseData"]["Register0"]==nil || ResponseData["ResponseData"]["Register1"]==nil{
    ResponseData["Code"]=-2
    ResponseData["Msg"]="设备值获取错误"
  }else if deviceStatus==0 {
    ResponseData["Code"]=-3
    ResponseData["Msg"]="设备离线"
  }else{
    ResponseData["Code"] = 0
    ResponseData["Msg"]="成功"
  }

  //把数据转化为json格式json.Marshal函数是把一个任意变量转为json格式
  responseJsonData,err = json.Marshal(ResponseData)
  if err!= nil{
    FailedResponseData["Code"]=-1
    FailedResponseData["Msg"]="JSON格式转换失败"
    responseJsonData,_ = json.Marshal(FailedResponseData)
    //通过w.Write函数把数据通过http协议的GET或者POST方式返回
    w.Write(toString(responseJsonData))
  }else{
    //通过w.Write函数把数据通过http协议的GET或者POST方式返回
    w.Write(toString(responseJsonData))
  }
  
})
//18091监听的端口,可以根据需要更改
fmt.Println("API接口服务已经启动,提供了ApiDemo")
http.ListenAndServe(":18089", nil)

第二步 使用APiPost测试接口

APiPost是API设计、调试、文档、自动化测试的工具,下载地址 https://www.apipost.cn/open in new window
按照自己需求调试自己需要的格式和数据

接口测试结果
接口测试结果