2009-07-28 8 views
6

Je constate que Google App Engine peut héberger des applications Web qui renvoient le format html, etc. Mais qu'en est-il des services Web qui communiquent sur http et acceptent/renvoient xml?Services Web avec Google App Engine

Est-ce que quelqu'un sait comment cela se fait dans Goggle App Engine avec Python ou d'ailleurs dans Java (JAS-WX n'est pas supporté)? Tous les liens d'échantillons ou d'articles sont grandement appréciés.

Merci :) //

Répondre

9

Google App Engine vous permet d'écrire des services Web qui renvoient tout type de contenu de réponse HTTP. Cela inclut xml, JSON, texte, etc.

Par exemple, jetez un oeil à l'guestbook sample project offert par Google qui montre la réponse HTTP revenir sous forme de texte/simple:

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())); 
      } 
     } 
    } 

De plus, le app engine google group est un bon endroit pour en savoir plus, poser des questions et voir un exemple de code.

3

La plupart des applications de python écrivent juste un gestionnaire qui affiche directement le fichier XML en forme ..., cet exemple des requêtes GET soumises à l'URL racine («/»):

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

Il est certainement possible (et non trop dur) pour utiliser GAE pour héberger des "services web qui communiquent sur http et acceptent/retournent xml".

Pour analyser les demandes XML (qui arrivent probablement en tant que corps des requêtes HTTP POST ou PUT), vous disposez de plusieurs options, par ex. pyexpat ou minidom par dessus, voir this thread par exemple (en particulier le dernier post dessus).

Si vous le souhaitez, vous pouvez également utiliser minidom pour construire la réponse XML et write en arrière (par exemple, en utilisant une instance StringIO pour maintenir la réponse en forme et sa méthode write comme argument de méthode de l'instance minidom writexml, puis en tournant autour et en utilisant le getvalue de cette instance pour obtenir le résultat requis sous forme de chaîne). Même si vous êtes limité au pur Python et à quelques extensions codées en "C", comme pyexpat, cela ne limite pas vraiment vos choix, ni ne vous complique la vie. N'oubliez pas de définir l'en-tête de type de contenu de votre réponse sur text/xml (ou un type de média encore plus spécifique et approprié, le cas échéant!) - et je recommande d'utiliser UTF-8 (le texte standard encodage qui vous permet d'exprimer tout Unicode tout en étant ASCII simple si vos données sont en ASCII! -), pas des "pages de code" bizarres ou des codes limités régionalement comme la famille ISO-8859.