上一篇文章探討了如何拓展Kernel。本文來講下如何爲OpenTCS增加WebAPI。由於OpenTCS有MES系統或別的第三方系統對接時通常都是使用WebAPI進行交互的。OpenTCS系統的WebAPI遵循RestAPI的設計,提供了一系列API接口,這些API接口通過Document可以查看到。
如何測試這些API?
可以通過瀏覽器來測試(推薦使用Google瀏覽器),比如這裏要獲取全部的車輛信息,可以在瀏覽器中輸入如下地址:
得到數據反饋如下(這裏筆者的系統中由兩臺移動機器人,V-0001/V-0002):
[ {
"name" : "V-0001",
"properties" : {
"IP" : "192.168.1.4",
"Port" : "5001"
},
"length" : 1000,
"energyLevelGood" : 90,
"energyLevelCritical" : 30,
"energyLevel" : 100,
"integrationLevel" : "TO_BE_UTILIZED",
"procState" : "IDLE",
"transportOrder" : null,
"currentPosition" : "Point-0009",
"state" : "IDLE"
}, {
"name" : "V-0002",
"properties" : {
"IP" : "192.168.1.3",
"Port" : "5001"
},
"length" : 1000,
"energyLevelGood" : 90,
"energyLevelCritical" : 30,
"energyLevel" : 100,
"integrationLevel" : "TO_BE_UTILIZED",
"procState" : "IDLE",
"transportOrder" : null,
"currentPosition" : "Point-0007",
"state" : "IDLE"
}]
以上數據是通過JSON打包的。內容爲所有移動機器人的信息。當然也可以通過GET參數進行帥選,具體可以參考TCS的Doc來查詢。
如何拓展WebApi?
本文着重講下如何增加一個WebAPI的訪問,很多時候,我們需要獲取的信息往往是多樣的,有些信息OpenTCS可能並未提供,那此時就需要我們自己去拓展了。下面以獲取所有Point爲例說明如何得到一個可以後期系統所有Point的WebApi。
WebAPI的代碼存放在OpenTCS-Kernel-Extension-HTTP-Services這個包中,因此我們需要拓展這個包。
1、首先增加路由。
我們打算通過如下Url訪問得到Point的信息:
此時訪問肯定是得到一個大大的404錯誤。因此我們需要爲後臺添加一個Route(Route的概念在Web開發中是很重要的一個概念)。
//以下代碼來自白色冰激凌的博客:https://blog.csdn.net/xlh145
//以下函數請在V1RequestHandler.java中查找
@Override
public void addRoutes(Service service) {
...
service.get("/points", this::handleGetPoints);
...
}
2、處理Http回調。
客戶端訪問時通過Get方式進行,那麼服務端需要回調函數來處理HTTP報文,要實現handleGetPoints函數。
//以下代碼來自白色冰激凌的博客:https://blog.csdn.net/xlh145
private Object handleGetPoints(Request request, Response response) throws
IllegalArgumentException {
//增加HTTP響應報文頭
response.type(HttpConstants.CONTENT_TYPE_APPLICATION_JSON_UTF8);
//從系統中得到數據並打包成JSON返回
return toJson(statusInformationProvider.getPoints());
}
最終的效果如下: