2011-03-13 43 views
0

我正在使用微框架實現RESTful API資源體系結構。我使用最近開發的花式路由功能,與對象層次並行建模資源路徑。 (哦,看上!)RESTful API資源架構和語法;我做對了嗎?

我使用的URI語法爲:

'http:// www.site.com/resource [ ; key1 = param1 [ & key2 = param2 ] ]' 

這將允許這樣的URI爲:

'http://www.site.com/user;id=123/article;id=456' 

映射到類似的信息(我一旦合併這個功能集成到路由器):

$user->getByParams('id=123')->article->getByParams('id=456'); 

所以進一步的例子:

'GET /user;id=123 GET' 
    # read User object data matching id=123 

'GET /user;id=123/article;id=456' 
    # read Article object data matching id=456 
    # belonging to User object matching id=123 

'GET /user;name=john&age=20/article;title=hello%20world' 
    # read Article object(s) data matching title='hello world' 
    # belonging to User object(s) matching name='john' and age=20 

我遇到的問題是最後一個,對匹配查詢數據的多個結果(SQL中的」拉LIKE)這將是一個安全的字符表示通配符?星號(*)出現在子分隔符保留列表http://labs.apache.org/webarch/uri/rfc/rfc3986.html#reserved,所以它將保持未編碼狀態。也許它會更容易使用%25(%

我明白這個問題可能是特定於實現的,但是是否有任何現有的框架實現了與此類似的RESTful API資源體系結構,以供我參考?

另外,我在這裏完全違反糧食嗎?

回答

1

目前關於如何構建帶參數的URI模板的最佳資源是here

話雖如此,在嘗試做資源設計時,應該避免考慮URI設計。我嘗試通過繪製塊,命名它們,然後繪製箭頭來表示連接資源的鏈接來設計資源。這與您設計網站的方式類似。

然後,一旦您的資源和鏈接被識別出來,您可以創建任何URI方案,這是您的服務器框架最容易解析的方案。

+1

**感謝Darrel Miller; **重新考慮我的資源架構的建議已付諸實踐。我現在意識到這裏最有用的實現是* REST/RPC *混合,其中資源URI使用與頁面控制器的URI相同的體系結構,但API調用跳過頁面控制器並直接將JSON請求對象傳遞給Model ACL代理(網關)。 – Dan 2011-03-19 14:37:53