博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kbmmw 5.0 中的REST 服务
阅读量:6158 次
发布时间:2019-06-21

本文共 4470 字,大约阅读时间需要 14 分钟。

目前关于REST 服务的话题越来越热,kbmmw 在5.0 里面开始支持rest。今天我就试一下kbmmw 的

rest 服务。闲话少说,开始。

老规矩,放上两个kbmMWServer1和 kbmMWHTTPSysServerTransport1两个控件。

设置kbmMWHTTPSysServerTransport1的server 属性。urls 属性默认是http://+:80/, 我们在这里就不改了。

因为我们后面采用的是samrtservice. 因此现在在主窗体里面不用再操心后面有什么服务要注册了。只需要一句话就

ok了。

procedure TForm2.Button1Click(Sender: TObject);begin     kbmMWServer1.Active:=True;end;procedure TForm2.FormCreate(Sender: TObject);begin    kbmMWServer1.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;begin Result:='Hello world';end;initialization TkbmMWRTTI.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;begin result:='你好!'+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;begin Result:=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://gwpfa.baihongyu.com/

你可能感兴趣的文章
【全球AI人才排行榜】美国第一,中国仅排名第7
查看>>
微信小程序输入框input
查看>>
MySql字符串函数使用技巧
查看>>
Doc2Vec,Word2Vec文本相似度 初体验。
查看>>
系统ghost后变成一个盘了别的分区的文件怎么找回
查看>>
Win7+Ubuntu11
查看>>
请问华为三层交换机里面的那个从IP是个什么意思? -
查看>>
kFeedback开源啦
查看>>
大数据传输,文件传输的专业解决方案!
查看>>
阿里云专家穆轩的《杭州九年程序员之“修炼”手册》
查看>>
JQuery:deferred对象的方法
查看>>
eyoucms问答 百度权重是什么
查看>>
win10中遇到qq视频时摄像头打不开没反应的解决方法
查看>>
介绍自己的一个Android插桩热修复框架项目QuickPatch
查看>>
关于textarea的ie9的maxlength不起作用的问题,请参考如下URL解决。
查看>>
Solr Facet 查询
查看>>
C++类的继承一
查看>>
数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案...
查看>>
巧用VMware Workstation的clone来制作虚拟机模板
查看>>
Spring-Mybatis MapperScannerConfigurer 取不到PropertyPlaceholderConfigurer里的值
查看>>