tft每日頭條

 > 科技

 > j s程序

j s程序

科技 更新时间:2024-09-17 12:34:26

使用本示例需通過docker容器,請先下拉jxTMS的docker鏡像并按說明啟動tms容器,并從helloWorld開始嘗試。

和其它系統勾連

我們在之前的靜态界面的演示中,已經演示了jxTMS如果供靜态web訪問,按同樣的方法,也可以提供REST接口向其它系統提供服務。

但服務器的訪問和web訪問是有區别的,就在于web我們通過session将客戶請求組織到一個會話中。而服務器卻不能有session的超時重連,因為這會導緻服務器的連接管理邏輯複雜化,容易引入bug而對服務器的安全構成威脅。

針對此問題,jxTMS提供了兩種外部服務器請求方案,一種是rest方式,但每次請求都要以加密認證的方式進行身份認證;一種是webSocket方式,隻需在請求連接時進行身份認證,每次請求就不需要加密認證了。

注:筆者在剛開始開發jxTMS時,使用自己簽發的RSA證書也是可以實現https通信的,但後來各浏覽器強制要求必須使用根信任簽發的RSA證書,同時考慮到簽發RSA證書會增加開發者的成本,所以jxTMS就取消了對https的支持。這樣,jxTMS也就不支持wss了。考慮到jxTMS的設計目标主要是提供内部的業務系統開發,而且動态web界面具有相當的複雜性,所以一定時期内,暫不會考慮增加對https的支持

由于相關工作都較為複雜,而本演示主要針對初學者,所以本節隻簡單概述如何以Rest方式進行勾連,webSocket方式暫不介紹。

增加apiKey

點擊快捷欄中的【人員管理->新增apiKey】,jxTMS顯示:

j s程序(jxTMS使用示例--和其它系統勾連)1

大家在apiKey後填入要分配給想接入到本系統中的系統服務器的名字,如【erp-server】,然後點擊【增加】按鈕,這時在secureKey後就會出現一個字符串,這就是用戶登入時需出示的secureKey。

然後把apiKey【相當于web登錄時的用戶名】和secureKey【相當于web登錄時的密碼】提供給對方,然後向筆者索取restAPIClient.jar一起提供給對方。然後對方隻需要引用restAPIClient.jar并按下例訪問即可:

//參數分别是:本機jxTMS的url,apiKey,secureKey restAPIClient client = new restAPIClient("http://127.0.0.1:10018","erp-server","bbLHZzKREWaEdQcjshQao6ASDNNpgGAe"); //每次請求都需首先newRequest來初始化請求 cn.ijingxi.tms.jxJson rs = client.newRequest() //設置參數p .setParam("p", 123.456) //設置參數ap .setParam("ap", "sssttt") //向指定的uri發出請求 .request("/apiv2/ping"); //返回一個json jxLog.logger.debug("result:{}",rs);

返回是ping函數中用setOutput設置的輸出:

{"tc":3,"pong":123.456,"execResult":true}

大家會發現多了個tc,tc是本次請求的耗時,以毫秒為單位。

注:登錄名不用給出,系統會自動給出并避免重複

接口描述

jxTMS設計的目标就是盡可能的一個人完成所有的開發工作,這樣就不要寫太多的文檔,隻要記得多加點注釋就好了。但現在是兩個系統的勾連,自然得向對方提供文檔,而且每次對接口的修改都必須及時更新文檔并提供給對方。

哦,這太麻煩了!

所以呢,jxTMS提供了一個自動編寫接口文檔的功能,就相當于多加點了注釋。

大家看一下manager/op中的capa.py,找到ping函數的定義,會發現ping函數除了之前介紹過的myModule.event修飾和myModule.api之外,還多了好幾個修飾:

@myModule.OutDescr('execResult','bool','true:執行正确'.decode('utf-8')) @myModule.OutDescr('pong','string、int等基礎類型都可以'.decode('utf-8'),'送入的參數'.decode('utf-8')) @myModule.InDescr('p','string、int等基礎類型都可以'.decode('utf-8'),'送入的任意參數'.decode('utf-8')) @myModule.MotionDescr('系統是否存活'.decode('utf-8')) @myModule.api('apiv2') @myModule.event('cmd', 'ping') def ping(self, db, ctx): #ping函數的處理代碼

注:建議大家一定養成多加注釋的習慣

很直觀的意思,就不多介紹了。大家再點擊快捷欄【運維管理->生成接口描述】,一路點擊【确認】按鈕執行完畢。這時大家會發現tms容器的/home/tms目錄下多了一個interface目錄,大家一路點擊進行,會發現在interface目錄的manager/op目錄中多了一個interface.md文件,這是一個markdown格式的文件,大家用相應的閱讀軟件打開,看看是什麼樣的?

是不是在這個文件中會找到ping函數的說明:

j s程序(jxTMS使用示例--和其它系統勾連)2

注:大家自己生成的會有亂碼,想一下是什麼原因?【之前介紹過的:中文應該進行解碼,這裡是筆者也忘了:( 剛才寫到這裡去截圖的時候才發現,大家自己嘗試着修複一下呗!】

大家對照這個文件的顯示,然後再對應ping前的那一堆各種修飾就會理解該如何描述并自動生成接口文件了。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved