Skip to content

Commit a8e123a

Browse files
Implementados algunos métodos más de la api REST y de APIG #11
1 parent 4d4634d commit a8e123a

File tree

6 files changed

+458
-23
lines changed

6 files changed

+458
-23
lines changed

SMS-Back-End/apigateway/helloworld_api.py

+189-7
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020
#Para el descubrimiento de los módulos
2121
import urllib2
2222
from google.appengine.api import modules
23+
#Para la decodificaciónd e los datos recibidos en JSON desde las APIs
24+
import jsonpickle
2325

2426

25-
import jsonpickle
2627
#Variable habilitadora del modo verbose
2728
v=True
2829

@@ -72,7 +73,41 @@ class DNI(messages.Message):
7273
class ListaAlumnos(messages.Message):
7374
alumnos = messages.MessageField(Alumno, 1, repeated=True)
7475

76+
class Profesor(message.Message):
77+
nombre = messages.StringField(1)
78+
dni = messages.StringField(2)
79+
80+
class ProfesorCompleto(messages.Message):
81+
nombre = messages.StringField(1)
82+
dni = messages.StringField(2)
83+
direccion = messages.StringField(3)
84+
localidad = messages.StringField(4)
85+
provincia = messages.StringField(5)
86+
fecha_nac = messages.StringField(6)
87+
telefonoA = messages.StringField(7)
88+
telefonoB = messages.StringField(8)
89+
90+
class ListaProfesores(messages.Message):
91+
profesores = messages.MessageField(Profesor, 1, repeated=True)
92+
93+
class Asignatura(messages.Message):
94+
id = messages.StringField(1)
95+
nombre = messages.StringField(2)
96+
97+
class ListaAsignaturas(messages.Message):
98+
asignaturas = messages.MessageField(Asignatura, 1, repeated=True)
7599

100+
class Curso(messages.Message):
101+
id = messages.StringField(1)
102+
curso = messages.StringField(2)
103+
grupo = messages.StringField(3)
104+
nivel = messages.StringField(4)
105+
106+
class ListaCursos(messages.Message):
107+
cursos = messages.MessageField(Curso, 1, repeated=True)
108+
109+
110+
#Decorador que establace nombre y versión de la api
76111
@endpoints.api(name='helloworld', version='v1')
77112

78113
class HelloWorldApi(remote.Service):
@@ -105,11 +140,8 @@ def getAlumnos(self, unused_request):
105140

106141
#Conexión a un microservicio específico:
107142

108-
from google.appengine.api import modules
109143
module = modules.get_current_module_name()
110144
instance = modules.get_current_instance_id()
111-
import urllib2
112-
from google.appengine.api import modules
113145

114146
#Le decimos a que microservicio queremos conectarnos (solo usando el nombre del mismo), GAE descubre su URL solo.
115147
url = "http://%s/" % modules.get_hostname(module="microservicio1")
@@ -119,9 +151,6 @@ def getAlumnos(self, unused_request):
119151
#result = urllib2.urlopen(url)
120152
#print result
121153

122-
#Envío de su resultado
123-
from google.appengine.api import urlfetch
124-
125154
#Llamamos al microservicio y recibimos los resultados con URLFetch
126155
#Al no especificar nada se llama al método GET de la URL.
127156
result = urlfetch.fetch(url)
@@ -338,6 +367,159 @@ def eliminar_alumno(self, request):
338367
return MensajeRespuesta(message=result.content)
339368

340369

370+
'''
371+
Devuelve una lista con los datos completos de los profesores que dan clase al alumno de dni pasado
372+
curl -i -X GET localhost:8001/_ah/api/helloworld/v1/alumnos/getProfesoresAlumno?dni=1
373+
'''
374+
@endpoints.method(DNI, ListaProfesores, path='alumnos/getProfesoresAlumno', http_method='GET', name='alumnos.getProfesoresAlumno')
375+
def getProfesoreAlumno(self, request):
376+
#Transformación de la llamada al endpoints a la llamada a la api rest del servicio.
377+
if v:
378+
print ("Ejecución de getProfesoresAlumno en apigateway")
379+
380+
#Conexión a un microservicio específico:
381+
382+
module = modules.get_current_module_name()
383+
instance = modules.get_current_instance_id()
384+
#Le decimos a que microservicio queremos conectarnos (solo usando el nombre del mismo), GAE descubre su URL solo.
385+
url = "http://%s/" % modules.get_hostname(module="microservicio1")
386+
387+
#Añadimos a la url la coleccion (alumnos), el recurso (alumno dado por su dni) y el recurso anidado de este (profesores)
388+
url+='alumnos/'+request.dni+"/profesores"
389+
390+
#Realizamos la petición
391+
result = urlfetch.fetch(url)
392+
393+
#Vamos a intentar consumir los datos en JSON y convertirlos a un mensje enviable :)
394+
395+
print "IMPRESION DE LOS DATOS RECIBIDOS"
396+
print result.content
397+
listaProfesores = jsonpickle.decode(result.content)
398+
399+
#Creamos un vector
400+
profesoresItems= []
401+
#Que rellenamos con todo los alumnos de la listaAlumnos
402+
for profesor in listaProfesores:
403+
profesoresItems.append(ProfesorCompleto( nombre=str(profesor.get('nombre')),
404+
dni=str(profesor.get('dni')),
405+
direccion=str(profesor.get('direccion')),
406+
localidad=str(profesor.get('localidad')),
407+
provincia=str(profesor.get('provincia')),
408+
fecha_nac=str(profesor.get('fecha_nac')),
409+
telefonoA=str(profesor.get('telefonoA')),
410+
telefonoB=str(profesor.get('telefonoB'))
411+
)
412+
)
413+
414+
#Los adaptamos al tipo de mensaje y enviamos
415+
#return Greeting(message=str(result.content))
416+
return ListaProfesores(profesores=profesoresItems)
417+
418+
419+
'''
420+
Devuelve una lista con los datos completos de las asignatuas en las que está matriculado el alumno con dni pasado.
421+
Ejemplo de llamada:
422+
> curl -i -X GET localhost:8001/_ah/api/helloworld/v1/alumos/getAsignaturasAlumno?dni=1
423+
'''
424+
@endpoints.method(DNI, ListaAsignaturas, path='alumnos/getAsignaturasAlumno', http_method='GET', name='alumnos.getAsignaturasAlumno')
425+
def getAsignaturasAlumno(self, request):
426+
if v:
427+
print ("Ejecución de getAsignaturasAlumno en apigateway")
428+
module = modules.get_current_module_name()
429+
instance = modules.get_current_instance_id()
430+
url = "http://%s/" % modules.get_hostname(module="microservicio1")
431+
url+='alumnos/'+request.dni+"/asignaturas"
432+
result = urlfetch.fetch(url)
433+
if v:
434+
print result.content
435+
listaAsignaturas = jsonpickle.decode(result.content)
436+
print listaAsignaturas
437+
asignaturasItems= []
438+
for asignatura in listaAsignaturas:
439+
asignaturasItems.append( Asignatura( id=str(asignatura.get('id')), nombre=str(asignatura.get('nombre')) ) )
440+
return ListaAsignaturas(asignaturas=asignaturasItems)
441+
442+
443+
'''
444+
Devuelve una lista con los datos completos de las cursos en las que está matriculado el alumno con dni pasado.
445+
Ejemplo de llamada:
446+
> curl -i -X GET localhost:8001/_ah/api/helloworld/v1/alumos/getCursosAlumno?dni=1
447+
'''
448+
@endpoints.method(DNI, ListaCursos, path='alumnos/getCursosAlumno', http_method='GET', name='alumnos.getCursosAlumno')
449+
def getCursosAlumno(self, request):
450+
if v:
451+
print ("Ejecución de getCursosAlumno en apigateway")
452+
module = modules.get_current_module_name()
453+
instance = modules.get_current_instance_id()
454+
url = "http://%s/" % modules.get_hostname(module="microservicio1")
455+
url+='alumnos/'+request.dni+"/cursos"
456+
result = urlfetch.fetch(url)
457+
if v:
458+
print result.content
459+
listaCursos = jsonpickle.decode(result.content)
460+
print listaCursos
461+
cursosItems= []
462+
for curso in listaCursos:
463+
cursosItems.append(Curso(id=str(curso.get('id')),curso=str(curso.get('nombre')),grupo=str(curso.get('grupo')),nivel=str(curso.get('nivel'))))
464+
return ListaCursos(cursos=cursosItems)
465+
466+
467+
468+
##############################################
469+
# FUNCIONES PARA ENTIDADES PROFESORES #
470+
##############################################
471+
472+
473+
@endpoints.method(message_types.VoidMessage, ListaProfesores,
474+
path='profesores/getProfesores', http_method='GET',
475+
name='profesores.getProfesores')
476+
def getProfesores(self, unused_request):
477+
'''
478+
Devuelve una lista con todos los profesores registrados en el sistema, de forma simplificada (solo nombre y DNI)
479+
480+
Llamada desde terminal:
481+
curl -X GET localhost:8001/_ah/api/helloworld/v1/profesores/getProfesores
482+
Llamada desde JavaScript:
483+
response =service.profesores.getProfesores().execute()
484+
'''
485+
#Identificación del módulo en el que estamos.
486+
module = modules.get_current_module_name()
487+
instance = modules.get_current_instance_id()
488+
489+
#Le decimos a que microservicio queremos conectarnos (solo usando el nombre del mismo), GAE descubre su URL solo.
490+
url = "http://%s/" % modules.get_hostname(module="microservicio1")
491+
#Añadimos el recurso al que queremos conectarnos.
492+
url+="profesores"
493+
if v:
494+
print str(url)
495+
#Al no especificar nada se llama al método GET de la URL.
496+
result = urlfetch.fetch(url)
497+
if v:
498+
print result.content
499+
listaProfesores = jsonpickle.decode(result.content)
500+
501+
#Creamos un vector
502+
profesoresItems= []
503+
#Que rellenamos con todo los profesores de la listaProfesores
504+
for profesore in listaProfesores:
505+
profesoresItems.append(Profesor( nombre=str(alumno.get('nombre')), dni=str(alumno.get('dni')) ))
506+
507+
#Los adaptamos al tipo de mensaje y enviamos
508+
#return Greeting(message=str(result.content))
509+
return ListaAlumnos(alumnos=alumnosItems)
510+
511+
512+
513+
514+
515+
516+
517+
518+
519+
520+
521+
522+
341523

342524

343525
APPLICATION = endpoints.api_server([HelloWorldApi])

0 commit comments

Comments
 (0)