kbmmw 5.0 中的REST 服務

目前關于REST 服務的話題越來越熱,kbmmw 在5.0 里面開始支持rest。今天我就試一下kbmmw 的

rest 服務。閑話少說,開始。

老規矩,放上兩個kbmMWServer1和 kbmMWHTTPSysServerTransport1兩個控件。

設置kbmMWHTTPSysServerTransport1的server 屬性。urls 屬性默認是http://+:80/, 我們在這里就不改了。

因為我們后面采用的是samrtservice. 因此現在在主窗體里面不用再操心后面有什么服務要注冊了。只需要一句話就

ok了。

procedure TForm2.Button1Click(Sender: TObject);
beginkbmMWServer1.Active:=True;
end;procedure TForm2.FormCreate(Sender: TObject);
beginkbmMWServer1.AutoRegisterServices;
end;

主窗體就ok 了。

接下來我們來建服務模塊

選擇這個smartservice

記住這里要填成你定義的這個服務名。然后一路點過去。

默認生成的代碼如下:

type[kbmMW_Service('name:xalionservice, flags:[listed]')][kbmMW_Rest('path:/xalionservice')]// Access to the service can be limited using the [kbmMW_Auth..] attribute.// [kbmMW_Auth('role:[SomeRole,SomeOtherRole], grant:true')]
TkbmMWCustomSmartService1 = class(TkbmMWCustomSmartService)private{ Private declarations }protected{ Protected declarations }public{ Public declarations }// HelloWorld function callable from both a regular client,// due to the optional [kbmMW_Method] attribute,// and from a REST client due to the optional [kbmMW_Rest] attribute.// The access path to the function from a REST client (like a browser)+// is in this case relative to the services path.// In this example: http://.../xalionservice/helloworld// Access to the function can be limited using the [kbmMW_Auth..] attribute.// [kbmMW_Auth('role:[SomeRole,SomeOtherRole], grant:true')][kbmMW_Rest('method:get, path:helloworld')][kbmMW_Method]function HelloWorld:string;end;implementationuses kbmMWExceptions;{$R *.dfm}// Service definitions.
//---------------------function TkbmMWCustomSmartService1.HelloWorld:string;
beginResult:='Hello world';
end;initializationTkbmMWRTTI.EnableRTTI(TkbmMWCustomSmartService1);
end.

這個代碼比較簡單,只是定義了很少的屬性。

?但是已經可以運行了。

直接在瀏覽器里面輸入http://127.0.0.1/xalionservice/helloworld 就可以看到下圖

好,最簡單的rest 服務做好了,我們繼續做更復雜的。

我們加一個輸入字符串,然后回應

  [kbmMW_Method('EchoString')]       // 回應輸入的串[kbmMW_Rest('method:get, path: [ "echostring/{AString}","myechostring/{AString}" ]')][kbmMW_Auth('role:[SomeRole,SomeOtherRole], grant:true')]function EchoString([kbmMW_Rest('value: "{AString}"')] const AString:string):string;end;implementationuses kbmMWExceptions;{$R *.dfm}// Service definitions.
//---------------------function TkbmMWCustomSmartService1.EchoString(const AString: string): string;
beginresult:='你好!'+astring;
end;

在瀏覽器里面輸入http://127.0.0.1/xalionservice/echostring/xalion

和我們想象的一樣。

繼續加入更復雜的

     [kbmMW_Method][kbmMW_Rest('method:get, path: "cal/addnumbers"')]function AddNumbers([kbmMW_Rest('value: "$arg1", required: true')] const AValue1:integer;[kbmMW_Rest('value: "$arg2", required: true')] const AValue2:integer;[kbmMW_Arg(mwatRemoteLocation)] const ARemoteLocation:string):integer;end;implementationuses kbmMWExceptions;{$R *.dfm}// Service definitions.
//---------------------function TkbmMWCustomSmartService1.AddNumbers(const AValue1, AValue2: integer;const ARemoteLocation: string): integer;
beginResult:=AValue1+AValue2;
end;

瀏覽器里面可以輸入http://127.0.0.1/xalionservice/cal/addnumbers?arg1=10&arg2=50

很簡單吧.

下面再說一下,服務屬性的常用參數,大家可以根據自己的需要改。

?// server (optional) indicates name of TkbmMWServer instance to register service with. If missing will be registered with all server instances.

? // name (optional) overrides service preferred name.
? // version (optional) overrides service version.
? // minInstances (optional) overrides services minInstances.
? // maxInstances (optional) overrides services maxInstances.
? // flags (optional). Array that can contain: [ listed,runrequireauth,listrequireauth,stateful,persistent,default ]
? // gatherStatistics (optional). Boolean value that can be on/off or true/false.
? // maxIdleTime (optional). Integer indicating max idle time in seconds before non stateful service instance is GC'ed.
? // maxIdleStatefulTime (optional). Integer indicating max idle time in seconds before stateful service instance is GC'ed.
? // timeout (optional). Integer indicating max allowed time of a request in seconds before service instance is GC'ed.
? // dontQueue (optional). Boolean indicating if requests should be queued or not if no instances of the service is available at time of request.
? [kbmMW_Service('name:SMARTDEMO, version:1.0, minInstances:32, maxInstances:128')]

?

?上面做完了,那么如何通過這個REST 服務與前端的JS 顯示庫結合呢?

這個問題就留給各位同學研究吧。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396584.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php7 匿名繼承類_PHP7匿名類的用法示例

本文實例講述了PHP7匿名類的用法。分享給大家供大家參考,具體如下:/*** Created by PhpStorm.* User: Itboot* Date: 2019/1/17* Time: 18:15*/class An{private $num;protected $age 15;public function __construct() {$this->num 1;}protected f…

python中不需要函數重載的原因

函數重載主要是為了解決兩個問題: 1.可變參數類型 2.可變參數個數 并且函數重載一個基本的設計原則是,僅僅當兩個函數除了參數類型和參數個數不同以外,其功能是完全相同的,此時才使用函數重載,如果兩個函數的功能其實不…

多租戶saas 架構_[譯/注] Force.com 多租戶互聯網應用開發平臺的設計

原文地址 http://cloud.pubs.dbs.uni-leipzig.de/sites/cloud.pubs.dbs.uni-leipzig.de/files/p889-weissman-1.pdf譯注:原文發表于 ACM,2009年6月作者Craig D Weissman, CTO, Salesforce.comSteve Bobrowski, Technical Marketing Consultant, Salesfor…

富文本

View Code轉載于:https://www.cnblogs.com/baidaye/p/5295448.html

Jenkins持續集成——用戶管理

一、基于安全矩陣系統管理 —>Configure Global Security相關權限的作用:其中有一些比較特別的權限:最大的權限是Overall的Administer,擁有該權限可以做任何事情。最基本的權限是Overall的Read,用戶必須賦予閱讀的權限&#xf…

pythonui教學視頻_分享軟件開發相關視頻教程(Java、C++、Python、UI設計、HTML5、iOS)...

以下是我收藏的關于開發及其他教程,基本都是花錢在網上買的,網盤沒有加密的,雖然特別愛學習,但并不可能有這么多的精力學習這么多,技術總是很快就被新的淘汰掉,放在網盤中確實太浪費呀,分享出去…

JAVA Set接口和其常用子類HashSet集合

Set接口,它里面的集合,所存儲的元素就是不重復的。 HashSet集合,采用哈希表結構存儲數據,保證元素唯一性的方式依賴于:hashCode()與equals()方法。 保證HashSet集合元素的唯一,其實就是根據對象的hashCode和…

python初始化函數_當你學會了Python爬蟲,網上的圖片素材就免費了

前言本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。加入作者的python學習圈子:1156465813 即可免費獲取,資料全在群文件里。資料可以領取包括不限于Python實戰演練、PDF電子文檔…

第三周作業(一)單元測試

下載vs2015安裝包,打開進行安裝. 選擇顏色 安裝完成,需要登錄 啟動vs 單元測試 1.打開vs界面。 2.新建項目。選擇Visual C# 創建類庫。 3.點擊確定后,進入代碼編輯界面。 4.根據書中代碼,寫入程序,并進行測試。 轉載于…

React-Native-lesson

React-Native-lesson 一、React-Native入門指南 lesson2: 認識代碼結構lesson4: 學會React-Native布局(一)lesson6: UI組件lesson8: 自己動手寫組件 https://github.com/vczero/toilet React Native完全開發的獨立App,支持ES6語法&#xff0c…

1、如何進行字符串常量中的字符定位_Java String:字符串常量池,我相信會有很多朋友不很理解這部分...

作為最基礎的引用數據類型,Java 設計者為 String 提供了字符串常量池以提高其性能,那么字符串常量池的具體原理是什么,我們帶著以下三個問題,去理解字符串常量池:字符串常量池的設計意圖是什么?字符串常量池…

Egret中使用P2物理引擎

游戲中的對象按照物理規律移動,體現重力、引力、反作用力、加速度等物體特性,實現自由落體、搖擺運動、拋物線運動,以及物理碰撞現象的模擬。用于模擬物理碰撞、物理運動的引擎稱為物理引擎。 來自瑞典斯德哥爾摩大學的Stefan Hedman基于Java…

react項目_如何從零開始創建React項目(三種方式)

在開發React項目前最關鍵的當然是項目的創建,現在的前端工程化使得前端項目的創建也變得越來越復雜,在這里介紹三種從零開始創建React項目的方式,分別是在瀏覽器中直接引入、使用官方腳手架create-react-app、使用Webpack創建。瀏覽器中通過標…

利用JSONP解決AJAX跨域問題的原理與jQuery解決方案

寫在前面 跨域的解決方案有多種,其中最常見的是使用同一服務器下的代理來獲取遠端數據,再通過ajax進行讀取,而在這期間經過了兩次請求過程,使得獲取數據的效率大大降低,這篇文章藍飛就為大家介紹一下解決跨域問題的一種…

江西理工大學南昌校區cool code競賽

這次比賽原本就是來打醬油的,想做個簽到題就走!一開始不知道1002是簽到題,一直死磕1001,WA了四發過了,回頭一看Rank,三十名,我靠!看了1001的AC率,在我AC之前只有一個人AC…

mysql 枚舉_詳解MySQL數據類型之枚舉類型ENUM的用法

本節主要內容:MySQL數據類型之枚舉類型ENUMMySQL數據庫提供針對字符串存儲的一種特殊數據類型:枚舉類型ENUM,這種數據類型可以給予我們更多提高性能、降低存儲容量和降低程序代碼理解的技巧,前面介紹了首先介紹了四種數據類型的特…

# 異運算_小學數學運算三要點:定律、法則與順序(解析)

很多孩子的數學不好,尤其是女孩子。家長往往認定為數學不好就是孩子不擅長,能力差。其實未必,有的孩子數學不好的原因并不在于智商,而是沒有理解到數學的方法與邏輯,比如小學的運算中,很多孩子并沒有了解到…

如何實現一個教師與學生教學輔助平臺?

在軟件工程的學習過程中,我們要完成一個團體項目,關于個人教學輔助系統,對于這個,還有太多要學。對于如何實現其中的功能,我們會利用到html,css等語言來編寫網頁前端,同樣也會用到數據庫的知識。…

證明創建runnable實例和普通類時間一樣長

import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//證明創建runnable實例和普通類時間一樣長public class Test002 { private Concurre…

mysql數據庫維護_維護MySQL數據庫表

在本教程中,我們將向您介紹一些非常有用的語句,使您可以在MySQL中維護數據庫表。MySQL提供了幾個有用的語句,可以有效地維護數據庫表。 這些語句使您能夠分析,優化,檢查和修復數據庫表。分析表語句MySQL查詢優化器是My…