RESTful API and JSON


RESFful API와 JSON을 사용하여 클라이언트 프로그램 만들기

enuSpace for mars 서버는 클라이언트 웹 요청에서 대하여 JSON 데이터를 반환을 수행합니다. enuSpace for mars 클라이언트 프로그램은 HTTP 라이브러리 함수를 이용하여 프로그래밍이 가능합니다.

  • enuSpace 서버와의 요청 RESTful API 
  • JSON은 enuSpace의 요청정보에 대한 응답을 나타냅니다.


enuSpace for mars는 서버측에서 JavaScript를 이용하여 웹 기반 언어로 작성하고 클라이언트의 페이지 요청에 대하여 JavaScript가 포함된 함수를 포함하고 있습니다.

웹 기반 응용 프로그램은 JavsScript로 작성된 클라이언트 코드에 적합하지만, Java, Python, C++, C# 및 기타 많은 HTTP 지원 프로그래밍 언어를 사용하여 클라이언트 응용 프로그램을 개발할 수 있습니다.


기본 제공 RESTful API


확장 모듈을 이용하여 사용자 정의 RESTful API를 활용하여 적용할수 있습니다.

확장 모듈을 이용한 RESTful API 적용 방법



RESTful API - getpicturevalue

특정 픽쳐에서 사용된 변수의 현재 값을 요청

--------------------------------------------

Description

enuSpace 서버측에 특정 픽쳐에서 사용된 변수의 현재 값을 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/getpicturevalue?page=sample.svg

Query Parameters

        page : svg filename

Example : ?page=sample.svg

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

  "RESULT": "OK",

  "RESULT_CODE": "RESULT_OK",

"MESSAGE": "GETPICTURE VALUE COMPLETE",

"TIME_FORMAT": "SIM",

"TIME": "2017-04-19 10:46:23.001",

  "VALUES": {  "VARIABLE":"ID_AND.input" , "VALUE":"10"  },{  "VARIABLE":"ID_AND.output" , "VALUE":"10" }

}

--------------------------------------------

Sample Call

JavaScript

function getPictureValue(page)

{

  var xmlHttp = new XMLHttpRequest();

  var strUrl = "getpicturevalue" ;

var strParam= "page="+page;


    xmlHttp.onreadystatechange=function()

    {

        if (xmlHttp.readyState==4 && xmlHttp.status==200)

        {

            var msg = xmlHttp.responseText;

            var arr;

            if(msg != "")

            {

                arr = JSON.parse(msg);

            }

    };

  xmlHttp.open("POST", strUrl, true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


RESTful API - gethistoricaldata

특정변수의 히스토리 데이터에 대하여 값을 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수 히스토리 값을 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/gethistoricaldata?tagid=@043DFEDEFD. A0&duration=300&endtime=0

Query Parameters

        tagid : database tagid

        duration : duration time

        endtime = 0      // 0->current time

Example : ?tagid=@043DFEDEFD. A0&duration=300&endtime=0

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

TIME_FORMAT : "SIM" or "SYS" -> SIM : Simulation Time, SYS : System Time

Body Example

{

  "RESULT": "OK",

  "RESULT_CODE": "RESULT_OK",

"MESSAGE": "GETHISTORICAL DATA COMPLETE",

"TIME_FORMAT": "SIM",

"TAGID": "@043DFEDEFD. A0",

  "VALUES": {  "TIME":"2017-04-19 10:46:23.001" , "VALUE":"84"  },{  "TIME":"2017-04-19 10:46:21.959" , "VALUE":"77"  }

}

--------------------------------------------

Sample Call

JavaScript

function gethistoricaldata(tagid, duration, endtime, datalist)

{

  var xmlHttp = new XMLHttpRequest();

  var strUrl = "gethistoricaldata" ;

var strParam= "tagid="+tagid+"&"+"duration="+duration+"&"+"endtime="+endtime;

xmlHttp.open("POST", strUrl, false);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

var msg = xmlHttp.responseText;

var arr = JSON.parse(msg);

    if (arr.RESULT == "OK")

{

        var values = arr.VALUES;

        if(values.length > 0)

        {

            if(arr.TIME_FORMAT == "SIM")

            {

                for(var i in values)

                {

                    var recive_time = new Date(values[i].TIME).valueOf();

                    var sub_time = new Date("1601-01-01 00:00:00.000").valueOf();

                    var x = recive_time - sub_time;

                    var y = parseFloat(Number(values[i].VALUE));

                    var point_data = new data_point(x, y);

                    datalist.unshift(point_data);

                }

            }

            else if(arr.TIME_FORMAT == "SYS")

            {

                for(var i in values)

                {

                    var x = new Date(values[i].TIME).valueOf();

                    var y = parseFloat(Number(values[i].VALUE));

                    var point_data = new data_point(x, y);

                    datalist.unshift(point_data);

                }

            }

        }

    }

    else

    {

        console.log("gethistoricaldata: 받아오기 에러");

    }

}


RESTful API - setvalue_package

특정변수 리스트에 대하여 값 설정 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수 리스트의 값을 설정 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/setvaue_package?tagid_list={“@043DFEDEFD. A0”:”10”, “@043DFEDEFD. A1”:”20”}

Query Parameters

        tagid_list : tagid list

Example : ?tagid_list={“@043DFEDEFD. A0”:”10”, “@043DFEDEFD. A1”:”20”}

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

“RESULT”:”OK”,

“RESULT_CODE”:”RESULT_OK”,

“MESSAGE":””

}

--------------------------------------------

Sample Call

JavaScript

function setvalue_package()

{

var tag_id1= document.getElementById("tagid1").value;

var setvalue1 = document.getElementById("setvalue1").value;

var tag_id2= document.getElementById("tagid2").value;

var setvalue2 = document.getElementById("setvalue2").value;

var xmlHttp = new XMLHttpRequest();

var strUrl = "setvalue_package" ;

var text = "{\"" +  tag_id1 +  "\":\""  + setvalue1 + "\",\""  +  tag_id2 +  "\":\""  + setvalue2 + "\"}";

var strParam= "tagid_list="+text;  

xmlHttp.onreadystatechange=function()

{

if (xmlHttp.readyState==4 && xmlHttp.status==200)

   {    

    var msg = xmlHttp.responseText;

var arr = JSON.parse(msg);

if (arr.RESULT == "OK")

{

location = "http://192.168.10.21:8080/main.html";

}

   }

};

xmlHttp.open("POST",strUrl,true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


RESTful API - getvalue_package

특정변수의 리스트에 대하여 값을 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수 리스트의 값을 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/getvaue_package?tagid_list=@043DFEDEFD. A0, @043DFEDEFD. A1

Query Parameters

        tagid_list : tagid1, tagid2

Example : ?tagid_list=@043DFEDEFD. A0, @043DFEDEFD. A1

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

  "RESULT": "OK",

  "RESULT_CODE": "RESULT_OK",

"MESSAGE": "GETVALUE PACKAGE COMPLETE",

  "VALUES": 

  [

    {

    "TAGID": "@043DFEDEFD. A0",

    “TYPE”: “double”,

    "VALUE": "99.99"

    “RESULT_CODE”: “RESULT_OK”

    },

    {

    "TAGID": "@043DFEDEFD. A1",

    “TYPE”: “int”,

    "VALUE": "99"

    “RESULT_CODE”: “RESULT_OK”

    }

  ]

}

--------------------------------------------

Sample Call

JavaScript

function getvalue_package()

{

var tagid_list= document.getElementById("tagid_list").value;

var xmlHttp = new XMLHttpRequest();

var strUrl = "getvalue_package" ;

var strParam= "tagid_list="+tagid_list;  

xmlHttp.onreadystatechange=function()

{

if (xmlHttp.readyState==4 && xmlHttp.status==200)

   {    

    var msg = xmlHttp.responseText;

alert(msg);

var arr = JSON.parse(msg);

var values = arr.VALUES;

   var out = "";

var i;

for(i = 0; i<values.length; i++) 

{

alert("TAGID:" + values[i].TAGID);

alert("TYPE:" + values[i].TYPE);

alert("VALUE:" + values[i].VALUE);

}

   }

};

xmlHttp.open("POST",strUrl,true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


RESTful API - setvalue

특정변수에 대하여 값을 설정 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수값을 설정 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/setvalue?devicekey=043DFEDEFD&variable=A0&value=10

URI : http://localhost:8080/setvalue?tagid=@043DFEDEFD.A0&value=10

URI : http://localhost:8080/setvalue?page=main.svg&variable=ID_ARD.A0&value=10

Query Parameters

        devicekey : device name

        variable : device variable

        value : set value

        or

        tagid : database tagid

        value : set value

        or

        page : picture file name

        variable : variable name

        value : set value

Example : ?devicekey=043DFEDEFD&variable=A0&value=10

Example : ?tagid=@043DFEDEFD.A0&value=10

Example : ?page=main.svg&variable=ID_ARD.A0&value=10

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

“RESULT”:”OK”,

“RESULT_CODE”:”RESULT_OK”,

“DEVICE_KEY":”043DFEDEFD”,

“VARIABLE":”A0”,

"TAGID":"043DFEDEFD.A0",

"TYPE":"int",

"VALUE":"10"

}

--------------------------------------------

Sample Call

JavaScript

function setvalue()

{

var devicekey= document.getElementById("devicekey").value;

var variable = document.getElementById("variable").value;

var setvalue = document.getElementById("setvalue").value;

var xmlHttp = new XMLHttpRequest();

var strUrl = "setvalue" ;

var strParam= "devicekey="+devicekey + "&" + "variable="+ variable + "&" + "value="+ setvalue;  

xmlHttp.onreadystatechange=function()

{

if (xmlHttp.readyState==4 && xmlHttp.status==200)

   {    

    var msg = xmlHttp.responseText;

var arr = JSON.parse(msg);

if (arr.RESULT == "OK")

{

location = "http://192.168.10.21:8080/main.html";

}

else

{

if (arr.RESULT_CODE == "CODE_VARIABLE_NOUT_FOUND" )

{

alert(" 등록된 디바이스의 변수를  검색하지 못하였습니다.");

}

if (arr.RESULT_CODE == "CODE_UNKNOWN_DATATYPE" )

{

alert("알수없는 데이터 타입니다..");

}

}

   }

};

xmlHttp.open("POST",strUrl,true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


RESTful API - getvalue

특정변수에 대하여 값을 요청

--------------------------------------------

Description

enuSpace 서버측에 데이터베이스의 변수값을 요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/getvalue?devicekey=043DFEDEFD&variable=A0

URI : http://localhost:8080/getvalue?tagid=@043DFEDEFD.A0

URI : http://localhost:8080/getvalue?page=main.svg&variable=ID_LOGIC.A0

Query Parameters

        devicekey : device name

        variable : device variable

        or

        tagid : database tagid

        or

        page : picture name
        variable : variable name

Example : ?devicekey=043DFEDEFD&variable=A0

Example : ?tagid=@043DFEDEFD.A0

Example : ?page=main.svg&variable=ID_LOGIC.A0

Content-Type : application/json; charset=UTF-8

--------------------------------------------

Response

Body

json file format

Body Example

{

“RESULT”:”OK”,

“RESULT_CODE”:”RESULT_OK”,

“DEVICE_KEY":”043DFEDEFD”,

“VARIABLE":”A0”,

"TAGID":"043DFEDEFD.A0",

"TYPE":"int",

"VALUE":"50"

}

--------------------------------------------

Sample Call

JavaScript

function getvalue()

{

var devicekey= document.getElementById("devicekey").value;

var variable = document.getElementById("variable").value;

var xmlHttp = new XMLHttpRequest();

var strUrl = "getvalue" ;

var strParam= "devicekey="+devicekey + "&" + "variable="+ variable;  


xmlHttp.onreadystatechange=function()

{

if (xmlHttp.readyState==4 && xmlHttp.status==200)

{    

    var msg = xmlHttp.responseText;

var arr = JSON.parse(msg);

if (arr.RESULT == "OK")

{

alert(arr.VALUE);

}

else

{

if (arr.RESULT_CODE == "CODE_VARIABLE_NOUT_FOUND" )

{

alert(" 등록된 디바이스의 변수를  검색하지 못하였습니다.");

}

if (arr.RESULT_CODE == "CODE_UNKNOWN_DATATYPE" )

{

alert("알수없는 데이터 타입니다..");

}

}

}

};

xmlHttp.open("POST",strUrl,true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


RESTful API - requestpage

서버에 대한 svg 픽쳐 파일 요청

--------------------------------------------

Description

enuSpace 서버측에 화면구성된 svg 파일을 웹 브라우져에서 현시하기 위하여 픽쳐파일을  요청하는 API

--------------------------------------------

Request

HTTP Method : POST

URI : http://localhost:8080/requestpage?page=picture.svg

Query Parameters

        page : picture file name

Example : ?page=picture.svg

Content-Type : text/html; charset=UTF-8

--------------------------------------------

Response

Body

    svg file contents

    or

{“RESULT”:”FAIL”,

“RESULT_CODE”:”CODE_INVALID_PARAMETER”,

“MESSAGE":”Invalid requestpage parameter”}

Body Example

<?xml version="1.0" encoding="UTF-16"?>

<svg

stroke="rgb(0,0,0)"

stroke-opacity="1.00"

stroke-width="1.00"

transform="translate(0.00,0.00) rotate(0.00) scale(1.0000, 1.0000)"

pg-xcenter="0.00"

pg-ycenter="0.00"

style="stroke:rgb(127,127,127);stroke-opacity:1.00;stroke-width:2.00;stroke-dasharray:1,1,1;background-color:rgb(61,61,59);"

xmlns="http://www.w3.org/2000/svg"

xmlns:xlink="http://www.w3.org/1999/xlink"

width="1920"

height="1080"

>

<rect

id="ID_1ct3IF0"

stroke="rgb(0,119,189)"

stroke-opacity="0.00"

stroke-width="2.00"

transform="translate(-8.43,-4.31) rotate(0.00) scale(1.0000, 1.0000)"

pg-xcenter="0.00"

pg-ycenter="0.00"

stroke-linecap="butt"

  stroke-linejoin="miter"

  x="0.00"

y="-4.15"

width="1942.11"

height="1100.24"

rx="0.00"

ry="0.00"

fill="url(#ID_1ct3IF0_GRAD)"

fill-opacity="1.00"

>

</rect>

</svg> 

--------------------------------------------

Sample Call

JavaScript

function requestpage(var picture) 

{

var xmlHttp = new XMLHttpRequest();

var strUrl = "requestpage" ;

var strParam= "page="+picture;  

xmlHttp.onreadystatechange=function()

{

if (xmlHttp.readyState==4 && xmlHttp.status==200)

   {    

    var msg = xmlHttp.responseText;

var arr = JSON.parse(msg);

if (arr.RESULT == "FAIL")

{

location = "http://localhost:8080/fail.html";

}

else

{

// data processing

}

   }

};

xmlHttp.open("POST",strUrl,true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");

xmlHttp.setRequestHeader("Pragma","no-cache");

xmlHttp.send(strParam);

}


+ Recent posts