2009-07-28 99 views
6

我看到Google App Engine可以托管将返回HTML等的Web应用程序。但是,通过http进行通信并接受/返回xml的Web服务又如何呢?使用Google App Engine的Web服务

有谁知道这是如何在Goggle App Engine中使用Python或Java中的事情(不支持JAS-WX)?任何样品或文章的链接非常感谢。

感谢// :)

回答

9

谷歌应用程序引擎可以让你编写Web服务返回的任何类型的HTTP响应内容。这包括XML,JSON,文本等

例如,看一看由谷歌提供的guestbook sample project这表明HTTP响应回来为text/plain的:

public class GuestbookServlet extends HttpServlet { 
     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
      UserService userService = UserServiceFactory.getUserService(); 
      User user = userService.getCurrentUser(); 

      if (user != null) { 
       resp.setContentType("text/plain"); 
       resp.getWriter().println("Hello, " + user.getNickname()); 
      } else { 
       resp.sendRedirect(userService.createLoginURL(req.getRequestURI())); 
      } 
     } 
    } 

此外,app engine google group是一个了解更多信息的好地方,提出问题并查看示例代码。

3

大多数Python应用程序只写成形XML直接输出处理程序...这个例子用来提交根网址(“/”)的任何GET请求:

import wsgiref.handlers 

from google.appengine.ext import webapp 

class MainHandler(webapp.RequestHandler): 

    def get(self): 
    self.response.out.write('<myXml><node id=1 /></myXml>') 

def main(): 
    application = webapp.WSGIApplication([('/', MainHandler)], 
             debug=True) 
    wsgiref.handlers.CGIHandler().run(application) 

if __name__ == '__main__': 
    main() 
2

这是绝对有可能(而不是太难了)使用GAE来托管“通过http进行通信并接受/返回xml的Web服务”。

要解析XML请求(推测可能是作为HTTP POST或PUT请求的主体进入),您有几个选项,例如,例如pyexpat或minidom,例如this thread(特别是最后一篇文章)。

如果你愿意,你也可以使用minidom命名构建XML响应,并write回(例如,使用StringIO实例来保存的格式的响应及其write方法作为参数传递给你的minidom命名实例的writexml方法,然后转身并使用该实例的getvalue以字符串形式获得所需结果)。尽管你仅限于纯Python和一些“白名单”的C编码扩展,如pyexpat,但并不真正限制你的选择,也不会使你的生活变得更加困难。

只是不记得你的回应的内容类型标题设置为text/xml(或一些甚至更具体和适当的,如果有的话,当然是媒体类型!) - 而且,我建议,使用UTF-8(标准文本编码,如果你的数据确实是纯ASCII的,你可以用纯ASCII表示所有的Unicode; - ),而不是奇怪的“代码页”或区域性限定的代码,如ISO-8859系列。