Acceso a un API REST JSON¶
Protocolo HTTP¶
Es un protocolo de intercambio de información usado durante mucho tiempo, bien conocido y sencillo. Se basa en peticiones y respuestas.
Petición
GET /index.html HTTP/1.1
Host: www.example.com
Referer: www.google.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Connection: keep-alive
[Línea en blanco]
Respuesta
HTTP/1.1 200 OK
Date: Fri, 31 Dec 2003 23:59:59 GMT
Content-Type: text/html
Content-Length: 1221
<html lang="eo">
<head>
<meta charset="utf-8">
<title>Título del sitio</title>
</head>
<body>
<h1>Página principal de tuHost</h1>
(Contenido)
.
.
.
</body>
</html>
Propiedades¶
Protocolo simple
- Formato texto claro
Tiene distintas acciones
- GET, POST, HEAD, PUT, DELETE, etc...
Protocolo sin estado
- Cada petición es independiente de la anterior
Demostración con nc
, un navegador y un editor de cookies
Autentificación¶
Petición a entorno real:
GET / HTTP/1.1
Host: aulavirtual3.educa.madrid.org
En comando:
printf 'GET / HTTP/1.1\r\nHost: aulavirtual3.educa.madrid.org\r\n\r\n' | ncat --ssl aulavirtual3.educa.madrid.org 443
Con cookie representando una sesión autentificad
GET / HTTP/1.1
Host: aulavirtual3.educa.madrid.org
Cookie: MoodleSessioniesvillablancamadrid=XXXXXXXXXXXXXX
printf 'GET /ies.villablanca.madrid/course/view.php?id=706 HTTP/1.1\r\nHost: aulavirtual3.educa.madrid.org\r\nCookie: MoodleSessioniesvillablancamadrid=XXXXXXXXXXXXXX\r\n\r\n' | ncat --ssl aulavirtual3.educa.madrid.org 443
JSON vs XML¶
Qué es JSON -> JavaScript Object Notation
Consola interactiva de navegador y análisis de objetos javascript
{
"departamento":8,
"nombredepto":"Ventas",
"director": "Juan Rodríguez",
"empleados":[
{
"nombre":"Pedro",
"apellido":"Fernández"
},{
"nombre":"Jacinto",
"apellido":"Benavente"
}
]
}
REST¶
Es un estándar en Internet utilizar servicios REST
A RESTful Web service is required to provide an application access to its Web resources in a textual representation and support reading and modification of them with a stateless protocol and a predefined set of operations.
-- Christopher Alexander
Verbos básicos para servicio RESTful
- GET Get a representation of the target resource’s state.
- POST Let the target resource process the representation enclosed in the request.
- PUT Set the target resource’s state to the state defined by the representation enclosed in the request.
- DELETE Delete the target resource’s state.
Ejemplos reales¶
Juntando todos los conceptos tenemospodemos definir un API accedido a trvés de HTTP que genere información en formato JSON. Toda la industria está utilizando esta tecnología para implementar servicios web. NOTA: Otra forma de implementar servicios web podría ser SOAP
Esta es una de las formas de exponer al resto del mundo un Servicio web o lo que está más de moda usar Microservicios.
Ejemplos:
Ejemplo API REST¶
Nosotros podemos definir nuestra propia API REST sin mucha dificultad. Vamos a crear un API para que la gente pueda acceder a nuestra información de cursos.
Api
Podrás listar los cursos y acceder a su información
1. Listado de curso¶
Petición
http GET
URL: api.supercursos.com/listado
Respuesta
{
'listado': [
{'título_curso_1': 1234},
{'título_curso_2': 1235},
]
}
2. Detalle de curso¶
Petición:
http GET
URL api.supercursos.com/detalle/<id_número>
Ejemplo:
api.supercursos.com/detalle/1234
{
'título': 'título_curso_1',
'detalle': 'descripción larga'
}
Conceptos clave/enlaces¶
- HTTP
- Verbos HTTP
- Códigos HTTP
- Diferencia entre GET y POST
- Cabecera HTTP
- Autentificación con Cookie
- Autentificación con Token
- Formato JSON