Libro Python Aplicado de Eugenia Bahit. GNU/Linux, ciencia de datos, y desarrollo web

Banner de Python Aplicado

Consumo y producción de APIs con arquitecturas REST/JSON


Cita con formato IEEE:
E. Bahit, "Consumo y producción de APIs con arquitecturas REST/JSON", in Python Aplicado, 4th ed., EBRC Publisher, 2022, pp. 233-245.

Cita con formato APA 7:
Bahit, E. (2022). Consumo y producción de APIs con arquitecturas REST/JSON. In Python Aplicado (4th ed., pp. 233-245). EBRC Publisher.

Cita en línea:
(Bahit, 2022)

Una API (Application Programming Interface, o Interfaz de programación de aplicaciones) es un programa informático empleado para permitir la interacción entre dos programas independientes.

Se denomina interfaz ya que actúa como intermediaria para que un programa pueda acceder a otro sin hacer un uso directo de este y por consiguiente, tampoco de sus datos. En el mundo actual, las APIs son implementadas en todo tipo de sistemas informáticos. Un uso tecnológico habitual y bien conocido de este tipo de interfaces de aplicación, es el que las redes sociales ofrecen a otros programas para facilitar la función de autenticación de usuarios.

Por sus siglas en inglés, REST significa Representational State Transfer (transferencia de estado representacional). Es un estilo arquitectónico presentado en el año 200019 por el Dr. R. T. Fielding de la Universidad de California, y confundador de la Apache Software Foundation.

R.T. Fielding define a REST como un «estilo arquitectónico híbrido para sistemas hipermedia distribuidos».

Trabajar con el formato JSON desde Python

JSON es el formato de intercambio de datos utilizado por APIs con arquitecturas REST. Por sus siglas en inglés, JSON significa JavaScript Object Notation (notación de objetos JavaScript). Es un conjunto de reglas de formato de texto para el intercambio de datos estructurados, e independiente del lenguaje de programación.

Brevemente, el formato propuesto por JSON es algo similar a los diccionarios de Python, y la biblioteca json de Python —entre otras cosas— se encarga de codificar diccionarios Python en formato JSON, y decodificar datos en formato JSON como diccionarios Python.

Un conjunto de datos en formato JSON —denominado Objeto JSON—, se describe como un diccionario formato por claves y valores:

/* Código JavaScript */
var libros = {
    "Python para principiantes": {
      "ISBN": 9781838190101,
      "Edición": 2,
      "Páginas": 178,
      "Autora": "Eugenia Bahit"
    },
    "Python Aplicado": {
      "ISBN": 9781838190125,
      "Edición": 3,
      "Páginas": 202,
      "Autora": "Eugenia Bahit"
    }
};

En el ejemplo anterior, el valor de la variable libros es un objeto JSON.

Al recibir un objeto JSON en Python, o en cualquier otro lenguaje, inicialmente se recibe como una cadena de texto. Debe ser convertida, entonces, a un formato interpretable por el lenguaje. Las funciones loads y dumps de la biblioteca json de Python, decodifican y codifican el formato JSON respectivamente:

# Código Python
from json import loads
libros_json = """{
    "Python para principiantes": {
        "ISBN": 9781838190101,
        "Edición": 2,
        "Páginas": 178,
        "Autora": "Eugenia Bahit"
    },
    "Python Aplicado": {
        "ISBN": 9781838190125,
        "Edición": 3,
        "Páginas": 202,
        "Autora": "Eugenia Bahit"
    }
}"""
libros_dict = loads(libros_json)

Si se verifica la salida se comprobará que la cadena con formato JSON ha sido convertida a diccionario:

>>> type(libros_dict)
<class 'dict'>
>>> print(libros_dict)
{'Python para principiantes': {'ISBN': 9781838190101, 'Edición': 2, 'Páginas': 178, 'Autora': 'Eugenia Bahit'},
'Python Aplicado': {'ISBN': 9781838190125, 'Edición': 3, 'Páginas': 202, 'Autora': 'Eugenia Bahit'}}
>>> libros_dict['Python Aplicado']['Autora']
'Eugenia Bahit'

De igual forma, un diccionario Python puede convertirse a JSON:

# Código Python
from json import dumps
    libros_dict = {
    'Python para principiantes': {
        'ISBN': 9781838190101,
        'Edición': 2,
        'Páginas': 178,
        'Autora': 'Eugenia Bahit'
    },
    'Python Aplicado': {
        'ISBN': 9781838190125,
        'Edición': 3,
        'Páginas': 202,
        'Autora': 'Eugenia Bahit'
    }
}

libros_dict = dumps(libros_dict)

Igual que en el caso anterior, se comprueba la salida para verificar que el diccionario se alla convertido:

>>> libros_dict = dumps(libros_dict)
>>> libros_dict
'{"Python para principiantes": {"ISBN": 9781838190101,
"Edici\\u00f3n": 2, "P\\u00e1ginas": 178, "Autora": "Eugenia Bahit"},
"Python Aplicado": {"ISBN": 9781838190125, "Edici\\u00f3n": 3,
"P\\u00e1ginas": 202, "Autora": "Eugenia Bahit"}}'
>>> type(libros_dict)
<class 'str'>

Consumo y producción de APIs

Para consumir una API se puede optar por uno de dos mecanismos posibles:

  • Conectar mediante una herramienta del sistema operativo, como cURL, a través de la biblioteca Popen de Python.
  • Conectar mediante la biblioteca http de Python. Para realizar la conexión se seguirán los pasos descritos en el Capítulo 21, a partir de la página 133.

...