Web services 谷歌应用程序引擎上的RESTful Web服务

Web services 谷歌应用程序引擎上的RESTful Web服务,web-services,google-app-engine,jersey,restlet,Web Services,Google App Engine,Jersey,Restlet,首先,我需要说的是,我对谷歌应用程序引擎没有太多经验 我知道我们有可能在GAE上部署RESTful Web服务(JERSEY) 我还知道RESTLET有一个专门针对GAE的版本 我想听取那些使用这两种方法的人的建议,哪一种更好 例如,为JERSEY配置GAE应用程序是否太困难或困难??? 或者例如,使用RESTLET有任何缺点吗?还是太厚了 谢谢我一年前开始用Jersey和Google app Engine开发应用程序。我这边的经验非常丰富,但我从未与Restlet合作过 我试图在这里总结我在G

首先,我需要说的是,我对谷歌应用程序引擎没有太多经验

我知道我们有可能在GAE上部署RESTful Web服务(JERSEY)

我还知道RESTLET有一个专门针对GAE的版本

我想听取那些使用这两种方法的人的建议,哪一种更好

例如,为JERSEY配置GAE应用程序是否太困难或困难??? 或者例如,使用RESTLET有任何缺点吗?还是太厚了


谢谢

我一年前开始用Jersey和Google app Engine开发应用程序。我这边的经验非常丰富,但我从未与Restlet合作过

我试图在这里总结我在GAE集成中发现的主要困难:

  • Jersey版本:1.6有效
  • 我建议您使用Jackson(版本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>

运动衫
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
***用你的班级包装***;org.codehaus.jackson.jaxrs
1.
配置程序:

@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;
}
@Provider
公共类JAXBContextResolver实现ContextResolver{
私有AnnoxAnnotationReader annotationReader;
私有JAXBContext上下文;
私有类[]类类型=新类[]{..所有类..};
公共JAXBContextResolver(){
annotationReader=新的AnnoxAnnotationReader();
映射属性=新的HashMap();
put(JAXBRIContext.ANNOTATION\u READER,annotationReader);
试一试{
this.context=JAXBContext.newInstance(类类型、属性);
}捕获(JAXBEException e){
..  
}
公共JAXBContext getContext(类objectType){
返回上下文;
}
…正如您所看到的,我使用Annox来避免模型类中的注释

希望有帮助!
Michele Orsi

我尝试过Restlet,但对它并不满意:它试图做很多事情,而且它的核心不是JAX-RS(他们把它作为一个附加组件)。我在各种设置下都遇到了问题(请求不会被路由到方法,但只要改变方法顺序,它就会开始工作。WTF?!)。此外,他们的文件资料稀少且不一致

我查看了Jersey:当时在GAE上运行时出现了一些问题(通过支持论坛上的帮助解决)。我还发现他们的文档不是很好

最后,我使用了Resteasy/Jackson:docs非常出色,可以与Maven一起开箱即用,完全控制配置、安全性和错误处理(在作为JSON错误对象返回的代码中抛出异常)。基本上没有问题。您可以在这里查看一个示例:


另外,如果与JSON/Jackson一起使用(请确保强制使用Jackson 1.9,因为内置于1.7中的版本已经过时)你可以很好地控制类映射到JSON的方式:一对一、包装/嵌入、适配器模式等等。

我在GAE上使用Restlet已经有6个月了。我选择它的部分原因是它们也有Android和GWT版本,这也是我产品组合的一部分,我认为使用相同的版本是最简单的到处乱跑

与Peter K的评论相反,我发现文档非常好。除了restlet.org上的在线文档外,Manning还提供了一本400页的电子书(),内容非常深入。这本电子书可能是在Peter评估之后出版的


话虽如此,这是一个相当大的库,有很多特性,这是一把双刃剑。一方面,每次我想解决一种新的问题时,Restlet似乎已经有了一些内置的东西来简化它。另一方面,我发现当我试图计算解决一个问题——所有这些灵活性和功能性加起来形成了一个广泛而深刻的类层次结构,有时很难看出这些部分是如何结合在一起的。如果你正在构建一个实质性的应用程序,我认为值得一看,因为我认为你不会在Restlet中遇到很多限制。但是,我没有使用RestEasy,所以我无法做出任何决定这是一个明智的比较。

你能帮我吗?我正在尝试让REST轻松地在GAE上工作,但没有任何成功。我绝对找不到任何文档(zip附带>20个JAR,我需要哪一个JAR来创建GAE JSON+XML服务器?)你是说你在使用1.6以外的其他版本时遇到了困难吗?虽然你的第一段是从介绍开始的,但你没有说太多你遇到的困难。你说得对,问题是我没有那么多时间来调查它为什么不起作用,现在我对此很满意!