apuntes:servicios_web
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
apuntes:servicios_web [2018/02/07 00:02] – [Ejercicios] Santiago Faci | apuntes:servicios_web [2019/01/04 13:22] – external edit 127.0.0.1 | ||
---|---|---|---|
Line 97: | Line 97: | ||
spring.jpa.properties.hibernate.globally_quoted_identifiers=true | spring.jpa.properties.hibernate.globally_quoted_identifiers=true | ||
# Puerto donde escucha el servidor una vez se inicie | # Puerto donde escucha el servidor una vez se inicie | ||
- | server.port=${port: | + | server.port=${port: |
# Datos de conexion con la base de datos MySQL | # Datos de conexion con la base de datos MySQL | ||
Line 116: | Line 116: | ||
jar { | jar { | ||
- | baseName = 'eventoserver' | + | baseName = 'opiniones' |
version = ' | version = ' | ||
} | } | ||
Line 197: | Line 197: | ||
<code java> | <code java> | ||
+ | import javax.persistence.*; | ||
/** | /** | ||
* Opinion que los usuarios tienen sobre un monumento | * Opinion que los usuarios tienen sobre un monumento | ||
Line 226: | Line 227: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | > **Recordad que todas las anotaciones Java en el ejemplo anterior son clases que pertenecen al paquete ' | ||
==== El Acceso a la Base de Datos ==== | ==== El Acceso a la Base de Datos ==== | ||
Line 260: | Line 263: | ||
Cada una de las operaciones tienen una URL de mapeo que nos permite acceder a las mismas desde cualquier cliente (navegador, aplicación Java, aplicación Android). Por ejemplo, si quisieramos obtener todas las opiniones que tienen una determinada puntuación utilizaríamos la siguiente URL: http:// | Cada una de las operaciones tienen una URL de mapeo que nos permite acceder a las mismas desde cualquier cliente (navegador, aplicación Java, aplicación Android). Por ejemplo, si quisieramos obtener todas las opiniones que tienen una determinada puntuación utilizaríamos la siguiente URL: http:// | ||
- | * http:// | + | * http:// |
- | * http:// | + | * http:// |
- | * http:// | + | * http:// |
+ | * http:// | ||
<code java> | <code java> | ||
Line 330: | Line 334: | ||
{{ youtube> | {{ youtube> | ||
+ | |||
+ | ==== Depuración de Servicios Web ==== | ||
+ | |||
+ | La primera aproximación a la hora de depurar los Servicios Web desarrollados es utilizar el navegador introduciendo las URLs esperando obtener la salida apropiada y comprobar asi que todo funciona correctamente. Es bastante cómodo pero fácil de usar y eficiente, hasta un punto. | ||
+ | |||
+ | Si lo que queremos es depurar totalmente, y de una forma profesional, | ||
+ | |||
+ | < | ||
+ | {{ postman.png }} | ||
+ | < | ||
+ | ===== Consumir un servicio web desde Django ===== | ||
+ | |||
+ | Puesto que la idea es consumir un servicio web que nos ofrecerá una serie de datos en formato JSON y nos interesaría convertirlos fácilmente a objetos Python, instalaremos el paquete // | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | Una vez instalado el paquete tendremos que añadirlo al fichero '' | ||
+ | |||
+ | <file python settings.py> | ||
+ | . . . | ||
+ | INSTALLED_APPS = [ | ||
+ | . . . | ||
+ | ' | ||
+ | ] | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | En nuestro caso vamos a concectar con un servicio web que ofrece datos sobre opiniones de usuarios de forma que obtenemos, entre otros, un titulo, un texto y una puntuación. Entonces crearemos un modelo de datos '' | ||
+ | |||
+ | <file python models.py> | ||
+ | . . . | ||
+ | class Opinion(models.Model): | ||
+ | titulo = models.CharField(max_length=200) | ||
+ | texto = models.CharField(max_length=200) | ||
+ | puntuacion = models.IntegerField | ||
+ | pelicula = models.CharField(max_length=200) | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | Ahora, en un fichero que llamaremos '' | ||
+ | |||
+ | <file python serializer.py> | ||
+ | from rest_framework import serializers | ||
+ | from .models import Opinion | ||
+ | |||
+ | |||
+ | class OpinionSerializer(serializers.ModelSerializer): | ||
+ | class Meta: | ||
+ | fields = (' | ||
+ | model = Opinion | ||
+ | </ | ||
+ | |||
+ | Desde Django podríamos acceder al servicio web para listar todas las opiniones: | ||
+ | |||
+ | <file python views.py> | ||
+ | import requests | ||
+ | . . . | ||
+ | def opiniones(request): | ||
+ | ws = requests.get(' | ||
+ | json = ws.json() | ||
+ | serializer = OpinionSerializer(data=json, | ||
+ | if serializer.is_valid(): | ||
+ | lista_opiniones = serializer.save() | ||
+ | context = {' | ||
+ | return render(request, | ||
+ | else: | ||
+ | print(serializer.errors) | ||
+ | |||
+ | return render(request, | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | O bien acceder a las opiniones para una pelicula determinada, | ||
+ | |||
+ | <file python views.py> | ||
+ | import requests | ||
+ | . . . | ||
+ | def pelicula(request, | ||
+ | pelicula = Pelicula.objects.get(pk=pelicula_id) | ||
+ | . . . | ||
+ | ws = requests.get(' | ||
+ | json = ws.json() | ||
+ | serializer = OpinionSerializer(data=json, | ||
+ | if serializer.is_valid(): | ||
+ | lista_opiniones = serializer.save() | ||
+ | context = {' | ||
+ | return render(request, | ||
+ | else: | ||
+ | print(serializer.errors) | ||
+ | |||
+ | return render(request, | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | En el caso de que no queramos guardarlo en la Base de Datos, podemos simplemente obtener los datos como una lista de ' | ||
+ | |||
+ | <code python> | ||
+ | . . . | ||
+ | if serializer.is_valid(): | ||
+ | lista_opiniones = serializer.data | ||
+ | // Visualiza el titulo de la primera opinion obtenida | ||
+ | print(lista_opiniones[0][' | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | ===== Seguridad en Servicios Web ===== | ||
---- | ---- | ||
Line 344: | Line 456: | ||
- Información de un evento concreto a partir del nombre del mismo | - Información de un evento concreto a partir del nombre del mismo | ||
- Amplia el ejercicio anterior para que sea posible registrar y eliminar eventos | - Amplia el ejercicio anterior para que sea posible registrar y eliminar eventos | ||
+ | - Diseña una web con Django que muestre los resultados de los partidos de fútbol utilizando como origen de datos el servicio web desarrollado en el primer ejercicio | ||
+ | - Incorpora a la web realizada en el punto anterior un buscador por equipos de futbol (local o visitante) | ||
---- | ---- | ||
Line 355: | Line 469: | ||
---- | ---- | ||
- | (c) 2017 Santiago Faci | + | (c) 2018 Santiago Faci |
apuntes/servicios_web.txt · Last modified: 2021/10/21 06:56 by Santiago Faci