2010-05-26 92 views
0

我的目標是創建一個將提供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會以某種方式直接調用我的遺留代碼中的函數?

感謝您的任何提示。如果你知道一個很好的教程,請將它指向我。我正在尋找一個高層次的概述,這將給我的體系結構(我身後的開發人員可以跟進的基本細節)。

回答

3

我寫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

1

我同意艾登。編寫Apache模塊並不適合膽小的人,除非你絕對必須,否則絕對不想去那裏。您需要準備好熟悉Apache的工作方式。

如果你仍然認爲你需要,那就看:

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

這是使用現有的Apache運行庫和用於處理POST數據,餅乾等,從提供更高級別的功能庫C代碼通過自定義模塊連接到Apache。

書艾登提到,雖然有點過時。最好得到:

The Apache Modules Book: Application Development with Apache