【问题标题】:Delphi implement REST serverDelphi 实现 REST 服务器
【发布时间】:2017-08-27 16:51:33
【问题描述】:

我在服务器上有一个 mysql 数据库,我使用我编写的脚本在其中插入数据。我必须打开www.mywebsite.com/rest/create.php?param=value&param2=value2 来创建一个新资源,然后我必须打开另一个php 文件来编辑一个项目等等。这是基本方法:一个 php 文件接受一些参数,然后将文件存储在数据库中。

我正在使用TIdHTTP,因为我有可能执行以下操作:

TIdHTTP1.Get(www.mywebsite.com/rest/create.php?param=value&param2=value2);

create.php 页面正在返回一些以 json 编码的数据。在我的 android 应用程序中,我创建了一个 rest 客户端,它能够解析响应 php 页面接收到的 json。例如,如果我调用了.../show.php?id=3,页面的结果就是我的数据的 json;稍后,android 应用程序将解析它们并向用户显示一些结果。


问题

而不是调用 www.mywebsite.com/rest/create.php?param=value&param2=value2 我希望能够做这样的事情 www.mywebsite.com/休息/创建/?param=value&param2=value2。基本上我不想在 *.php 中使用文件名,但我想使用没有文件名的第二种 URI。

问题是这是我第一次,我真的不知道该怎么做。

可能的解决方案。阅读Expert Delphi 后,我找到了一个可能的解决方案。我可以为 linux 创建一个WebBroker 服务器(这样我就可以导出 Apache 模块 *.so),实现一些类似这样的操作:

当有对 /rest/create/ 的请求时(使用 OnAction 事件),我可以运行 TIdHTTP1.Get(www.mywebsite.com/rest/create.php?param=value&param2=value2); 并存储结果。通过这种方式,我可以根据需要打开 www.mywebsite.com/rest/create/ 并保存数据。即使 indy 在 linux 机器上(作为 apache 模块)也可以执行 get 请求吗?我已经看到独立服务器在 indy 下运行,所以我猜 indy 应该能够在 apache 模块上工作。

不幸的是,我对这种东西还很陌生,实际上我也不知道在网上搜索什么来找到解决方案。我的解决方案可以工作,但我很确定有一个适当的最终有效的方法来做到这一点。

注意:这只是我做了一些研究后的一个想法,我不确定这是做我需要的正确方法。而不是做我上面写的,我只需要用 PHP 或 Apache 做一些事情吗?是否有另一种标准(也是最好的)方法来创建 REST 服务?

【问题讨论】:

  • 我想最常见的方法是重写 uri。如果您使用 Apache,请查找 mod_rewrite。
  • Indy 包含一个 HTTP 服务器组件 (TIdHTTPServer),您可以在独立的可执行文件(无 Apache 模块)中使用它,这使得测试变得容易。然后,对于 HTTPS 和 URL 重写等附加功能,您可以使用 Apache HTTP 服务器作为反向代理。 (我是用 Indy 和 Free Pascal 做的,而不是 Delphi)
  • @mjn42 谢谢你的帮助 :) 所以基本上我可以创建服务器和一切,但最后我必须使用 Apache 来设置正确的 url。 Apache 是管理 URI 的对吗?
  • TIdHTTPServer 能够在不同的 URI 路径上提供不同的内容,因为该路径包含在 HTTP 标头中。 Apache 对端口和路径映射很有帮助,例如,如果您运行多个本地 HTTP 服务(在 localhost:8080、localhost:8081 等),需要在不同的 URI 路径上映射到 443)。
  • 您听说过 Delphi 的 Datasnap 吗?你可以用它做休息服务。

标签: php rest delphi indy


【解决方案1】:

您的问题不在 Delphi 端,而是在服务器一上。

如果你想要一个 URL /rest/create/,你只需要在你的服务器上的“rest”文件夹下创建一个文件夹“create”,并在上面放一个 index.php 文件。

或者您可以在 .htaccess 文件中使用 URL 重写规则。

【讨论】:

  • rest服务是这样实现的吗?只是带有 index.php 文件的文件夹层次结构?还是非常感谢! :)
  • HTTP 路径与文件系统位置无关。他们是独立的。或许PHP在这方面受到限制,但一般情况并非如此。
  • PHP 没有限制,这取决于您在架构中的复杂程度。有时我们只有一个 index.php 在根目录和 url 重写到调度路径。有时你有简单的目录。当您开始对此进行编程或用于小型 API 项目时,这是一种更简单的方法。
  • @PatrickPrémartin 谢谢,我想我正在寻找 url 重写。只是想知道,你如何构建它?您是否将所有 php 文件保存在一个文件夹中,然后使用 url 重写来访问它们?
  • 这取决于项目的复杂性,如果有的话,使用的框架。我不能给你一个规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
相关资源
最近更新 更多