用于宁静服务的Apache模块

问题描述:

我的目标是创建一个将提供RESTful服务(即,我们有一些控制/查询某些网络设备的旧代码,现在我们希望将该功能作为RESTful服务公开)的apache模块。我猜这个流可能看起来像这样:用于宁静服务的Apache模块

WebBrowser - 发布RESTful URI ---> [Apache(my_module)] - > .. ..--->与现有旧代码的接口。

我一直在围绕着各种维基,博客,论坛,文章等,但我似乎无法理解这些REST风格的URL如何到达(my_module)在Apache [你可以告诉我从来没有使用过网络服务器内部,更少的模块,之前]。我的意思是,是否必须编辑该httpd.conf文件并说出如下内容:将所有看起来像http://baseurl/restservices/的网址发送到my_module。如果是这样,我该怎么做?

另外,my_module实际上会得到什么?它是否获得完整的http请求消息,并且必须像典型的CGI程序那样解析它?

此外,my_module与我的遗留代码进行交互的最佳方式是什么?例如,打开一个到它的TCP连接并发送消息并围绕遗留代码编写包装来解释这些消息。或者,如果我将整个遗留代码编译为apache模块,my_module会以某种方式直接调用我的遗留代码中的函数?

感谢您的任何提示。如果你知道一个很好的教程,请将它指向我。我正在寻找一个高层次的概述,这将给我的体系结构(我身后的开发人员可以跟进的基本细节)。

我写PHP或者Python的扩展和使用mod_php的/ mod_wsgi的

我认为你是在错误的方式接近这一点:

Apache模块是不是真的,你想怎么处理一个URL,如果你的要求是报价基本。根据您的遗留代码是在语言,我会建议:

结合其API为蟒蛇PHP模块,并让该脚本通过正常手段被Apache调用。它也很简单(在很多情况下)将C调用风格编译语言粘贴到这些脚本语言,而不是Apache本身。

它还具有添加抽象的优势,它允许您在核心遗留代码上对脚本语言中的其他逻辑进行分层。您也可能需要预处理数据,并在将请求交给您的遗留代码之前从请求中对其进行验证。

PHP和Python都有RESTful框架和实用程序。

如果你写一个Apache模块,然后检查了Writing Apache Modules with Perl and C

参见: Developing PHP Extensions in CExtending Python in C or C++ ...如果也使用Python检出WSGI的东西。

+0

感谢您的回答。遗留代码是“C”。负载预期是几个最终用户连接到它,它们都可能每秒10-100次。这可能在100-1000个请求/秒之间。因此,我想要提高性能,实现apache模块的决定看起来比较谨慎,而不是apache为每个请求调用python cgi脚本(这将非常耗时)。 所以我想实现一个Apache模块(最好在C,我假设,因为Apache也是在C中,它会很好地重新编译)。 – 2010-05-26 21:57:43

+0

我的建议,保持简单并绑定到脚本语言。开销并不那么庞大,而且机器的代价通常比代码复杂度增加,并且随着时间的推移缺乏灵活性。另外,实现你自己的Restful处理程序来解码POST,不会是一场噩梦。但是,在我的文章中的书应该告诉你你需要什么。 Apache的运行时基本上是通过一个结构注册的C函数的钩子。 – 2010-05-26 23:02:18

+0

是的,我认为这将是我将采取的第一个方向 - 即避免apache模块,并尝试查看没有它的原型是否会被客户接受。 – 2010-05-27 07:45:44

我同意艾登。编写Apache模块并不适合胆小的人,除非你绝对必须,否则绝对不想去那里。您需要准备好熟悉Apache的工作方式。

如果你仍然认为你需要,那就看:

http://httpd.apache.org/apreq/

这是使用现有的Apache运行库和用于处理POST数据,饼干等,从提供更高级别的功能库C代码通过自定义模块连接到Apache。

书艾登提到,虽然有点过时。最好得到:

The Apache Modules Book: Application Development with Apache