使用 Delphi 中的 REST 请求

7
我需要用Delphi编写一个简单的REST服务器,并在Ruby on Rails中编写客户端。我已经观看了Marco Cantu关于Delphi中REST的所有视频,但我有一个问题:
Delphi如何处理像"/users/1"这样的请求,其中1是用户的ID?
我看到的所有示例都使用简单的函数(例如EchoString(value)ReverseString(Value)),而请求是"Datasnap/rest/ClassName/EchoString/Value",但我需要一个形如"Datasnap/rest/classname/123"的请求。
例如: TContractsCollection 是合同的集合,我想查看具有ID=324556的合同。因此,在浏览器(以及RoR客户端)中,它将是(例如):
"http://localhost:3000/DataSnap/rest/TContractsCollection/324556"

但是Delphi显示:

"服务端方法列表中找不到TContractsCollection方法"

有什么想法吗?


有一个新的轻量级框架适用于Delphi和Free Pascal,其中包括RESTful服务支持,并且具有请求参数映射功能,因此您可以声明带有占位符的URL,例如/users/{userId}。(我是这个框架的作者) - mjn
暴露服务器的内部实现细节,例如类名(TContractCollection),不是一个好的RESTFul设计。实体(或资源)应该以易于理解的方式命名。在这种情况下,RESTFul URL应该是http://mydomain.com/resources/contracts/324556,更多示例请参见https://dev59.com/knVC5IYBdhLWcg3wjx1d#256359。 - mjn
谢谢,mjn。我写这个是为了强调这是一个类。 - yamaxim
旧的未回答的问题。无论如何,我的小评论是:您想使用DataSnap来完成还是接受使用ICS来完成?使用ICS很容易实现,因此请告诉我是否需要演示样本代码。 - fpiette
1个回答

0
你可以在TdmServerModule中定义一个函数,例如:function。
ProcessContract(ContractNo:Integer): String 

http://localhost:3000/DataSnap/rest/ProcessContract/324556

当调用此函数时,ContractNo将被设置为324556。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接