2012-02-19 143 views
4

首先我需要說的是,我對Google App Engine的經驗不是很豐富。Google App Engine上的REST風格的Web服務

我知道這是可能的,我們在GAE部署基於REST的Web服務(JERSEY)

而且我也知道,的Restlet有一個版本專門爲GAE。

我想從那些使用兩種方法的人那裏得到建議,哪一個更好。

例如,配置GAE應用程序的JERSEY太困難或掙扎?或者例如使用RESTLET有什麼缺點?或者它太厚(RESTLET)?

感謝

回答

2

我開始一年前發展與新澤西州和谷歌應用程序引擎的應用程序。從我的身邊偉大的經驗,但我從來沒有用的Restlet工作..

我試圖在這裏總結一下我在GAE的整合中發現的主要困難:

  • 新澤西版本:1.6作品
  • 我建議你使用傑克遜(版本1.7.1),用於JSON表示

的web.xml片段:

<servlet> 
<servlet-name>jersey</servlet-name> 
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
<init-param> 
<param-name>com.sun.jersey.config.property.packages</param-name> 
<param-value>***package-with-your-classes***;org.codehaus.jackson.jaxrs</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet> 

配置:

@Provider 
public class JAXBContextResolver implements ContextResolver<JAXBContext> { 
private AnnoxAnnotationReader annotationReader; 
private JAXBContext context; 
private Class<?>[] classTypes = new Class[] { .. all your classes .. }; 

public JAXBContextResolver() { 
annotationReader = new AnnoxAnnotationReader(); 
Map<String, Object> properties = new HashMap<String, Object>(); 
properties.put(JAXBRIContext.ANNOTATION_READER, annotationReader);  
try { 
    this.context = JAXBContext.newInstance(classTypes, properties); 
} catch (JAXBException e) { 
    .. 
} 
public JAXBContext getContext(Class<?> objectType) { 
    return context; 
} 

..你可以看到我用Annox避免我的模型類中的註解!

希望它有幫助! Michele Orsi

+0

你是說你在使用1.6以外的版本時遇到了麻煩嗎?儘管您的第一段以該介紹開頭,但您並沒有多說關於遇到的困難。 – Nilzor 2013-01-31 16:17:18

+0

你說的對,這個問題是我沒有太多的時間來調查爲什麼它不起作用,現在我很好! – 2013-03-15 20:42:37

6

我試過Restlet,並不滿意它:它試圖做的很多,而不是它的核心JAX-RS(他們有它作爲一個附加組件)。我遇到了一些問題,使得它可以在各種設置下工作(請求不會被路由到方法,但是當只改變方法順序時,它會開始工作.WTF ?!)。他們的文檔也很稀缺且不一致。

我看了看澤西島:當時在GAE上運行時遇到了一些問題(通過支持論壇上的幫助解決)。另外我發現他們的文檔不太好。最後,我和Resteasy/Jackson一起去了:docs非常棒,與Maven開箱即用,完全控制配置,安全和錯誤處理(作爲JSON錯誤對象返回的代碼中拋出的異常)。基本上沒有問題。你可以在這裏看一個例子:LeanEngine REST classes。另外,如果與JSON/Jackson一起使用(確保強制使用Jackson 1.9,因爲它內置1.7版本),您可以很好地控制您的類如何映射到JSON:一對一,包裝/嵌入,適配器模式等。

+0

你能幫忙嗎?我試圖讓RESTEasy在GAE上工作,沒有任何成功。絕對沒有我能找到的文檔(該zip帶有> 20個jar,我真的需要GAE JSON + XML服務器?) – 2012-04-09 03:36:20

3

我一直在GAE上使用Restlet約6個月。我之所以選擇它,部分原因是它們也有適用於Android和GWT的版本,這也是我的產品組合的一部分,我認爲在任何地方使用同一個東西最簡單。

與Peter K的評論相反,我發現文檔非常好。除了restlet.org的在線文檔之外,還有一本來自Manning的400頁電子書(Restlet in Action),其內容非常深入。在Peter的評估之後,可能電子書出來了。

這就是說,這是一個很大的圖書館,有很多功能,這是一把雙刃劍。一方面,每當我想解決一個新問題時,Restlet似乎已經有內置的東西來使它更容易。另一方面,當我試圖找出問題時,我發現通過Restlet源代碼進行調試具有挑戰性 - 所有這些靈活性和功能都添加到廣泛而深入的類層次結構中,並且很難看到這些碎片如何融合在一起。如果你正在構建一個實質性的應用程序,我認爲這是值得一看的,因爲我認爲你不會遇到Restlet的很多限制。但是,我沒有使用RestEasy,所以我無法做出明智的比較。