2010-03-28 12 views
10

Quiero construir un servicio web REST en el motor de la aplicación. Actualmente tengo esto:Servicio web de reposo con App Engine y Webapp

from google.appengine.ext import webapp 
from google.appengine.ext.webapp import util 

class UsersHandler(webapp.RequestHandler): 

def get(self, name): 
    self.response.out.write('Hello '+ name+'!') 

def main(): 
util.run_wsgi_app(application) 

#Map url like /rest/users/johnsmith 
application = webapp.WSGIApplication([(r'/rest/users/(.*)',UsersHandler)]          
            debug=True) 
if __name__ == '__main__': 
    main() 

Y me gustaría es posible recuperar, por ejemplo, cuando todos mis usuarios/usuarios se accede a la ruta/reposo. Imagino que puedo hacer esto creando otro controlador, pero quiero saber si es posible hacerlo dentro de este manejador.

+0

posible duplicado de [Cómo crear un servicio REST con Google App Engine y Python?] (Http://stackoverflow.com/questions/1788041/how-to-create-a-rest-service-with-google -app-engine-and-python) – Oliver

Respuesta

14

Sin duda, puede - cambiar el método de su manejador get a

def get(self, name=None): 
    if name is None: 
     """deal with the /rest/users case""" 
    else: 
     # deal with the /rest/users/(.*) case 
     self.response.out.write('Hello '+ name+'!') 

y su aplicación a

application = webapp.WSGIApplication([(r'/rest/users/(.*)', UsersHandler), 
             (r'/rest/users', UsersHandler)]          
            debug=True) 

En otras palabras, el mapa de su gestor de todos los patrones de URL que desea que manejar, y asegúrese de que el método get del manejador puede distinguir fácilmente entre ellos (generalmente a través de sus argumentos).

+1

También podría usar dos controladores, uno para "/ rest/users /" y otro para "/rest/users/(.+)". –

+0

@Nick, claro, pero el OP lo sabe, ya que dice "puedo hacerlo construyendo otro controlador, pero quiero saber si es posible hacerlo dentro de este manejador", así que no repetí él acababa de decir ;-). –

+0

Lo siento, me perdí ese pedazo. :) –