2010-06-06 82 views
9

我正在圍繞REST web服務編寫一個Perl包裝模塊,我希望對如何最好地構建模塊提供一些建議。API包裝體系結構最佳實踐

我一直在尋找幾個不同的Perl模塊的靈感。

Flickr::Simple2基本上是一個包含Flickr API中不同方法的方法的大文件,例如, getPhotos()

Flickr::API是用於進行HTTP請求的另一個模塊(LWP)的子類。所以基本上它只允許你通過使用LWP的模塊進行調用,而不需要定義任何包裝方法本身,這些模塊將轉到正確的API方法/ URL。這個解釋很糟糕 - 但基本上它有一個方法需要一個參數(一個API方法名)並構造正確的API調用,例如, request()/response()

另一種設計就像第一個描述的那樣,但是不那麼單一,對於API的單獨「區域」具有單獨的類。

我想遵循現代/最佳實踐的Perl方法,所以我使用Dist::Zilla構建模塊和Moose OO的東西,但我會很感激一些關於如何實際設計/構建我的包裝的輸入。

指南/教程或指向其他精心設計的模塊,將不勝感激。

乾杯

回答

6

這取決於您嘗試環繞的API的寬度/深度。

如果它只有幾個簡單的API調用,第一種方法是好的。

如果它有非常複雜的API,並且想要向用戶公開的「簡單」模式的API,一種模式是將主模塊和子類作爲Main :: Module :: Simple,它將環繞主要底層模塊。

正如您所指出的,一個非常廣泛的API可能會受益於被拆分成具有平行類(可能繼承自基類或使用基類)負責封裝每個區域的區域。只要確保將所有常見的東西都歸因於任何代碼/設計重複。

8

Joshua Bloch在「How to Design a Good API and Why it Matters」(視頻,2007)上有很好的提示。

slides (PDF)

+0

我相信這個問題是關於API包裝,而不是如何編寫API? – itsaboutcode 2011-04-08 15:16:39

+0

@itsaboutcode:問題是關於使用Perl API封裝Web API。這正在寫另一個API,所以Joshua Bloch的建議是相關的。 – dolmen 2011-04-15 20:57:18