2009-07-28 36 views
6

Veo que Google App Engine puede alojar aplicaciones web que devolverán html, etc. Pero, ¿qué pasa con los servicios web que se comunican a través de http y aceptan/devuelven xml?Servicios web con Google App Engine

¿Alguien sabe cómo se hace esto en Goggle App Engine con Python o para el caso en Java (JAS-WX no es compatible)? Cualquier enlace de muestras o artículos es muy apreciado.

Gracias :) //

Respuesta

9

Google App Engine permite escribir servicios web que devuelven cualquier tipo de contenido de respuesta HTTP. Esto incluye XML, JSON, texto, etc.

Por ejemplo, echar un vistazo a la guestbook sample project ofrecido por Google que muestra la respuesta HTTP regresando, 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())); 
      } 
     } 
    } 

Además, el app engine google group es un excelente lugar para aprender más, hacer preguntas y ver ejemplos de código.

3

mayoría de las aplicaciones de pitón acaba de escribir un controlador que genera el xml en forma directa ... este ejemplo sirve todas las solicitudes presentadas GET a la URL raíz ("/"):

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

es definitivamente posible (y no demasiado difícil) para usar GAE para alojar "servicios web que se comunican a través de http y aceptan/devuelven xml".

Para analizar las solicitudes XML (presumiblemente como el cuerpo de las solicitudes HTTP POST o PUT), tiene varias opciones, p. pyexpat o minidom encima, vea this thread por ejemplo (especialmente la última publicación).

Si lo desea, también se puede utilizar minidom para construir la respuesta XML y write de nuevo (por ejemplo, utilizando una instancia StringIO para mantener la respuesta con formato y su método write como argumento para el método de la instancia minidom writexml, luego dar la vuelta y usando el getvalue de esa instancia para obtener el resultado necesario como una cadena). A pesar de que está limitado a Python puro y algunas extensiones con código C "en lista blanca" como pyexpat, eso realmente no limita mucho sus opciones, ni le hace la vida mucho más difícil.

Simplemente recuerde configurar el encabezado del tipo de contenido de su respuesta en text/xml (o algún tipo de medio que sea aún más específico y apropiado, si es que hay alguno, por supuesto!) - y, lo recomiendo, use UTF-8 (el texto estándar codificación que le permite expresar todo el Unicode mientras es simple ASCII si sus datos resultan ser ASCII simple! -), no "páginas de códigos" raras o códigos regionalmente limitados como la familia ISO-8859.