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/06 23:57] – [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 338: | Line 450: | ||
===== Ejercicios ===== | ===== Ejercicios ===== | ||
+ | |||
+ | - Realiza un servicio web que proporcione una API para notificar sobre eventos que tienen lugar en una ciudad. Se dispondrá de una Base de Datos con los datos de eventos (nombre, descripción, | ||
+ | - Listado de todos los eventos | ||
+ | - Listado con los eventos que disponen de plazas | ||
+ | - Información de un evento concreto a partir del nombre del mismo | ||
+ | - 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 349: | Line 469: | ||
---- | ---- | ||
- | (c) 2017 Santiago Faci | + | (c) 2018 Santiago Faci |
apuntes/servicios_web.txt · Last modified: 2021/10/21 06:56 by Santiago Faci