這是關於服務架構策略的更多問題,我們正在基於後端的休息服務構建大型Web系統。目前我們正在嘗試制定一些內部標準,以開發其他服務。RESTful服務架構問題
某些查詢返回的實體的列表,例如讓我們考慮我們的圖片庫中檢索服務:/ gell_all_galeries,返回下一個響應:
<galleries>
<gallery>
<id>some_gallery_id</id>
<name>my photos</name>
<photos>
<photo>
<id>123</id>
<name>my photo</name>
<location>http://mysite/photo/show/123</location>
......
<author>
<id>some_id</id>
<name>some name</name>
.......
<author>
</photo>
<photo> ..... </photo>
<photo> ..... </photo>
<photo> ..... </photo>
<photo> ..... </photo>
</photos>
</gallery>
<gallery> .... </gallery>
<gallery> .... </gallery>
<gallery> .... </gallery>
<gallery> .... </gallery>
</galleries>
正如你在這裏看到,響應相當大又重,而且並不總是我們需要這樣的深層信息。通常的解決方法是使用或每家畫廊http://ru.wikipedia.org/wiki/Atom元素全庫數據,而不是:
<galleries>
<gallery>
<id>some_gallery_id</id>
<link href="http://mysite/gallery/some_gallery_id"/>
</gallery>
<gallery>
<id>second_gallery_id</id>
<link href="http://mysite/gallery/second_gallery_id"/>
</gallery>
<gallery> .... </gallery>
<gallery> .... </gallery>
<gallery> .... </gallery>
<gallery> .... </gallery>
</galleries>
的第一個問題,是未來:也許相反,我們甚至不應該使用和類型,以及只使用通用的所有資源該返回列表對象:
<list>
<item><link href="http://mysite/gallery/some_gallery_id"/></item>
<item><link href="http://mysite/gallery/other_gallery_id"/></item>
<item>....</item>
</list>
而第二個問題,用戶以後嘗試檢索有關一些具體畫廊的信息,他將使用例如http://mysite/gallery/some_gallery_id鏈接,他應該怎麼看到的結果嗎?
它應該是:
<gallery>
<id>some_gallery_id</id>
<name>my photos</name>
<photos>
<photo>
<id>123</id>
<name>my photo</name>
<location>http://mysite/photo/show/123</location>
......
<author>
<id>some_id</id>
<name>some name</name>
.......
<author>
</photo>
<photo> ..... </photo>
<photo> ..... </photo>
<photo> ..... </photo>
<photo> ..... </photo>
</photos>
</gallery>
或:
<gallery>
<id>some_gallery_id</id>
<name>my photos</name>
<photos>
<photo><link href="http://mysite/photo/11111"/></photo>
<photo><link href="http://mysite/photo/22222"/></photo>
<photo><link href="http://mysite/photo/33333"/> </photo>
<photo> ..... </photo>
</photos>
</gallery>
或
<gallery>
<id>some_gallery_id</id>
<name>my photos</name>
<photos>
<photo>
<link href="http://mysite/photo/11111"/>
<author>
<link href="http://mysite/author/11111"/>
</author>
</photo>
<photo>
<link href="http://mysite/photo/22222"/>
<author>
<link href="http://mysite/author/11111"/>
</author>
</photo>
<photo>
<link href="http://mysite/photo/33333"/>
<author>
<link href="http://mysite/author/11111"/>
</author>
</photo>
<photo> ..... </photo>
</photos>
</gallery>
我的意思是,如果我們使用的鏈接,而不是完整的對象的信息,有多深,我們應該去那裏?我是否應該在照片中顯示作者等等。
大概是我的問題含糊不清,但我想要做的是在這種情況下爲所有團隊成員在未來遵循一般策略。
我使用Java和Apache CXF來提供RESTful服務。這具有能夠爲相同資源提供* XML和JSON兩者的優點,這取決於客戶說它喜歡什麼(即通過內容協商)。 – 2010-06-08 12:46:50