2008-10-11 66 views
3

我正在開發一對庫以使用REST API。因爲我需要能夠以非常不同的設置使用API​​,所以我目前計劃在PHP(用於Web應用程序)和Python中的第二個版本(用於桌面應用程序和長時間運行的進程)中使用一個版本。在圖書館的發展過程中是否有最佳實踐來幫助維護我自己的理智?開發一致性庫的最佳實踐是什麼?

回答

6

因此,開發不同語言的並行庫的問題在於,對於同一個任務,通常不同的語言會有不同的習語。我從個人經驗中瞭解到這一點,他將一個圖書館從Python移植到PHP。習慣用法不僅僅是命名:例如,Python有很多可用於getter和setter的魔法,使對象屬性變得神奇; Python有monkeypatching; Python已經命名參數。用一個端口,你想選擇一種「基礎」語言,然後嘗試模仿其他語言的所有習語(不容易);對於並行開發,不要做太麻煩的事情,並且迎合最不共同的分母是可取的。然後栓上語法糖。

0

那麼,顯而易見的就是保持你的命名一致。在兩個實現中,函數和類應該以類似的方式命名(如果不是相同的話)。這通常會在您以兩種不同的語言單獨實現API時自然發生。儘管(至少在我的書中)大項目是遵循語言特定的習語。例如,讓我們假設我正在用我更熟悉的兩種語言實現REST API:Ruby和Scala。 Ruby版本可能有MyCompany::Foo類,其中包含方法bar_baz()。相反,同一個API的Scala版本將有一個類com.mycompany.rest.Foo,方法barBaz()。這只是命名約定,但我發現,要幫助API以特定語言感受「在家」,即使設計是在其他地方創建的,也有很長的路要走。

除此之外,我只有一條建議:文檔,文檔,文檔。在處理多實施API規範時,這很容易保持您的理智。

2

'成爲你自己的客戶':我發現首先編寫測試的技巧是確保API易於使用的絕佳方法。首先寫測試意味着你會像API的'消費者'一樣思考,而不僅僅是一個實現者。

2

試着爲兩者編寫一個通用的單元測試套件。也許可以用一種語言包裝一個類來從另一個語言中調用它。如果你做不到,至少要確保兩個版本的測試是相同的。

0

AFAIKT有很多從腳本語言的橋樑。我們來看看例如Jruby,它是Ruby + Java,然後有些東西可以將Ruby嵌入到Python中(或者以其他方式)。然後有一些像Etoile這樣的例子,其基礎是Objective-C,但也可以連接到Python和Smalltalk,另一種廣泛使用的方法:包裝C庫,例子是libxml2,libcurl等等。也許這可能是基礎。假設你爲Python編寫所有代碼,但是要實現與PHP的橋樑。所以你沒有那麼多的平行發展。

或者,也許這不是最糟糕的想法,讓我們來說說.NET,然後你突然有一大堆語言可供你使用,這些語言原則上應該可以從.NET平臺上的其他語言中使用。

0

爲什麼不使用python進行web應用呢?有幾個框架可用:django,web2py - 類似於django,但很多人說它使用起來更簡單,還有TurboGears,web。py,Pylons

沿着橋接的路線 - 您可以使用進程間通信讓PHP和python應用程序(在守護進程模式下)相互交談。

+0

在我們的例子中,這是因爲我們有一套現有的PHP工具套件,必須移植。 – acrosman 2009-06-06 06:05:58