Skip to content

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"
    }
  ]
}

JSON vs XML

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