使用 IIS 在 Delphi 2009 中创建 REST Web 服务
是否可以在 Delphi 2009 中创建在 IIS 上运行的 REST Web 服务?我已经查看了网络代理和网络快照网络服务器应用程序,但到目前为止还无法弄清楚。如果可能的话我将如何让它发挥作用?
Is is possible to create a REST web service in Delphi 2009 which runs on IIS? I have looked at the web broker and web snap web server applications but so far cannot figure it out. If it is possible how would I go about getting it to work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
REST Web 服务在 Delphi 中非常简单......事实上太简单了,因为有时它被掩盖并隐藏在复杂的 WebSnap 演示中。您可以使用 Web 代理、WebSnap、Indy、Synapse 或其他通用 HTTP 服务器组件。我不会在您第一次 RESTful 郊游时使用 WebSnap。我会坚持使用 WebBroker,或者更简单的 Indy。
文件 -> 新建 -> 其他 WebBroker -> Web 服务器应用程序
您可以选择 ISAPI DLL 或 Web 应用程序调试器...对于您的第一个,我推荐 WAD 应用程序。 (事实上,任何 Web 应用程序都应该从服务器的 WAD 开始,然后创建客户端测试器应用程序,以便以后的调试更加容易。)如果选择 WAD,则为其指定一个名称 - 例如 MyFirstREST。这将创建一个具有默认 Web 模块的项目,该模块使用简单的 HTML 文档响应任何请求。
右键单击 Web 模块,单击“操作编辑器”弹出菜单项,然后通过自定义 PathInfo 设置创建 RESTful 命令。然后您只需定义事件来响应这些命令。
对于 Indy,只需启动一个新的 Windows 服务应用程序并将 TidHTTPServer 组件放在服务数据模块上即可。然后为简单的 HTTP GET 请求定义 OnCommandGET (http://yourserver/customer?id=1)为 POST 请求定义 OnCommandOther。
有一个 TIdHTTPResponseInfo 和一个 TIdHTTPResponseInfo 发送到事件中...只需查看 GET 的 QueryParams 即可提取传入的参数并填充响应的 ContentStream(或 ContentText)以及 ContentType。
可以在线找到许多有关 REST 实现的教程 - 其中一个来自 IBM:http:// /www.ibm.com/developerworks/webservices/library/ws-restful/
通常,您使用 RESTful 服务器来处理 XML 请求和响应,但实现服务器的方式没有限制。这完全取决于客户的期望。如果您也控制客户端,那么您甚至可以通过序列化 TObject 后代来来回传递对象。
REST web services are super simple in Delphi...too simple in fact as sometimes it's glossed over and hidden in complex WebSnap demos. You can use Web broker, WebSnap, Indy, Synapse or other generic HTTP server components. I wouldn't use WebSnap on your first RESTful outing. I'd stick with WebBroker or, even easier, Indy.
File->New->Other WebBroker->Web Server Application
You have choices of a ISAPI DLL or Web App Debugger... for your first one, I recommend a WAD application. (In fact, any web application should start with a WAD for the server, and then create a client tester application to make your debugging much easier later.) If you select WAD, then give it a name - like MyFirstREST. This will create a project that has a default web module that responds with a simple HTML doc to any request.
Right click the web module, click on the Action Editor pop-up menu item, and create your RESTful commands, via custom PathInfo settings. Then you simply define the events to respond to these commands.
For Indy, just start a new Windows Service Application and drop a TidHTTPServer component on the service datamodule. Then define an OnCommandGET for simple HTTP GET requests (http://yourserver/customer?id=1) Also define an OnCommandOther for POST requests.
There is a TIdHTTPResponseInfo and a TIdHTTPResponseInfo sent into the event...just look at the QueryParams for a GET to extract the parameters passed in and populate the response's ContentStream (or ContentText), along with the ContentType.
Many tutorials on REST implementations can be found online - one is from IBM: http://www.ibm.com/developerworks/webservices/library/ws-restful/
Typically you use RESTful servers to work with XML requests and responses but there's no restrictions on how you implement a server. It all depends on how the clients expectations. If you are controlling the client side as well, then you can even pass back objects back and forth by serializing TObject descendants.