Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

En este tutorial, vamos a cubrir los siguientes puntos:

· Cómo crear una solicitud JSON desde un archivo CSV

· Cómo llamar a la API REST con el método POST en las solicitudes de un elemento a la
vez

· Cómo leer la respuesta generada desde la API

· Cómo convertir la respuesta JSON a un archivo CSV

Según los requisitos de su proyecto, el diseño de la solicitud J SON puede ser muy
simple, moderadamente complejo o supercomplejo. Python no es la única opción para
generar el diseño de solicitud JSON. Debe tener en cuenta algunos puntos, como cuán
complejo es el diseño y cuánto se necesita para generar el diseño.

Además, sugeriría usar alguna herramienta para probar las llamadas a la API en el
diseño de solicitud dado primero. Un ejemplo de esta herramienta es SOAP UI
( https://www.soapui.org/ ) o Postman. Esto le ayudará a corregir el diseño de su
solicitud y le permitirá saber si se requiere alguna modificación en el diseño solicitado
para que se pueda lograr una respuesta adecuada. Entonces, una vez que finalice la
salida, el siguiente paso sería generar el diseño de entrada finalizado a través de la
codificación en Python.

Repasemos nuestros ejemplos ahora ...

Encontré una API pública con funcionalidad POST: https://reqres.in/

Primero, necesitamos comprender cuál es el diseño esperado para la solicitud POST y,


según su API, podría ser simple o complejo. En nuestro caso, es bastante sencillo.
Ahora, suponga que tenemos un archivo CSV (generado mediante procesamiento ETL o
cualquier otro medio)

Records.csv:

nombre, trabajo

mike, líder

jason, ingeniero

sonal, dba

ken, gerente

Para procesarlo a través de API, debemos enviar estos registros a API en formato JSON.

Trabajemos en la creación de una solicitud JSON a partir de un archivo CSV dado.

El diseño JSON es similar al diccionario de Python, ya que tenemos que lidiar con el par
clave-valor. Entonces, mi primer enfoque fue buscar algún método en el módulo CSV que
pueda leer registros en formato Diccionario y, afortunadamente, encontré la función
DictReader (). Veamos en qué se diferencia de la función Read () normal.

Leer()

importar csv

con open ('Records.csv', 'r') como f:

imprimir (f. leer ())


Producción :

nombre, trabajo

mike, líder

jason, ingeniero

sonal, dba

ken, gerente

DictReader ()

importar csv

con open ('Records.csv', 'r') como f:

lector = csv.DictReader (f)

para registros en lector:

imprimir registros

Producción :

{'trabajo': 'líder', 'nombre': 'mike'}

{'trabajo': 'ingeniero', 'nombre': 'jason'}

{'trabajo': 'dba', 'nombre': 'sonal'}

{'trabajo': 'administrador', 'nombre': 'ken'}

Ahora, tenemos los pares clave / valor listos y podemos simplemente volcar estos
registros en el formato requerido usando el módulo JSON de Python.

importar csv
importar json

salida = []

// abrir archivo de entrada

con open ('Records.csv', 'r') como f:

lector = csv.DictReader (f)

// agregando cada registro en la lista

para registros en lector:

output.append (registros)

// Crear archivo JSON

con open ('RecordsJson.json', 'w') como archivo de salida:

json.dump (salida, archivo de salida, sort_keys = True, sangría =


4)

RecordsJson.json

"Trabajo": "líder",

"Nombre": "mike"

},

"Trabajo": "ingeniero",

"Nombre": "jason"

},

"Trabajo": "dba",

"Nombre": "sonal"
},

"Trabajo": "gerente",

"Nombre": "ken"

Entonces, hemos creado con éxito nuestro archivo JSON. El siguiente paso es llamar a
API en estos registros de solicitud. Como tenemos varios registros en el archivo de
entrada, estaríamos enviando solicitudes una por una.

Llamar a la API en varias solicitudes JSON

Mi enfoque es abrir el archivo de solicitud, leer los registros uno por uno, llamar al
método POST en cada solicitud y capturar la respuesta de cada solicitud. Para llamar a la
API, tenemos el módulo de solicitudes en Python.

solicitudes de importación

importar json

importar csv

// POST API

url = 'https: //reqres.in/api/users'

// Leyendo archivo JSON

con open ('RecordsJson.json', 'r') como archivo:

indata = json.load (infile)

salida = []

// Llamando al método API POST en las solicitudes una por una

para datos en indata:

r = solicitudes.post (url, json = datos)


imprimir (r, rtext)

Producción :

(<Respuesta [201]>, u '{“trabajo”: ”líder”, ”nombre”: ”mike”, ”id”:


”758", ”createdAt”: ”2018–11–30T14: 43: 44.611Z ”} ')

(<Respuesta [201]>, u '{“trabajo”: ”ingeniero”, ”nombre”: ”jason”,


”id”: ”900", ”createdAt”: ”2018–11–30T14: 43: 45.246Z ”} ')

(<Respuesta [201]>, u '{“trabajo”: ”dba”, ”nombre”: ”sonal”, ”id”:


”927", ”createdAt”: ”2018–11–30T14: 43: 45.918Z ”} ')

(<Respuesta [201]>, u '{“trabajo”: ”gerente”, ”nombre”: ”ken”, ”id”:


”166", ”createdAt”: ”2018–11–30T14: 43: 46.651Z ”} ')

¡¡Eso es genial!! Llamamos a API en 3 solicitudes y obtuvimos una respuesta para


todas. En lugar de imprimir esta salida, simplemente la guardaría en un archivo JSON.

// Llamando al método API POST en las solicitudes una por una

para datos en indata:

r = solicitudes.post (url, json = datos)

salida.append (json.loads (r.text))

// Guardando la respuesta en la salida

con open ('Response.json,' w ') como archivo de salida:

json.dump (salida, archivo de salida, sangría = 4)

Response.json:

"Trabajo": "líder",

"Nombre": "mike",
"CreatedAt": "2018–12–03T14: 40: 08.018Z",

"Id": "544"

},

"Trabajo": "ingeniero",

"Nombre": "jason",

"CreatedAt": "2018–12–03T14: 40: 09.096Z",

"Id": "211"

},

"Trabajo": "dba",

"Nombre": "sonal",

“CreatedAt”: “2018–12–03T14: 40: 09.983Z”,

"Id": "46"

},

"Trabajo": "gerente",

"Nombre": "ken",

"CreatedAt": "2018–12–03T14: 40: 11.050Z",

"Id": "437"

Antes de seguir adelante, quiero resaltar un punto. He usado el siguiente


código mientras leía una respuesta de API.

salida.append (json.loads (r.text))


¿Qué pasa si no uso json.loads mientras agrego registros en la lista, cuál sería el
impacto en la salida?

Comprobemos eso también.

Salida cuando se usa la siguiente línea en el código:

salida.append (r.text)

Response.json:

“{\” Trabajo \ ”: \” líder \ ”, \” nombre \ ”: \” mike \ ”, \” id \ ”:


\” 466 \ ”, \” creado en \ ”: \” 2018–12– 03T14: 46: 25.240Z \ ”}”,

“{\” Trabajo \ ”: \” ingeniero \ ”, \” nombre \ ”: \” jason \ ”, \” id


\ ”: \” 302 \ ”, \” creado en \ ”: \” 2018–12– 03T14: 46: 26.112Z \
”}”,

“{\” Trabajo \ ”: \” dba \ ”, \” nombre \ ”: \” sonal \ ”, \” id \ ”:


\” 377 \ ”, \” createdAt \ ”: \” 2018–12– 03T14: 46: 27.109Z \ ”}”,

“{\” Trabajo \ ”: \” gerente \ ”, \” nombre \ ”: \” ken \ ”, \” id \ ”:


\” 130 \ ”, \” creado en \ ”: \” 2018–12– 03T14: 46: 27.988Z \ ”}”

El último paso es seleccionar algunos campos de la respuesta de la API y guardarlos en


un archivo CSV.

Guardar respuesta en archivo CSV

Mi objetivo es elegir la identificación, el trabajo y el nombre de la respuesta y guardarlo


en un archivo csv.

Veamos cómo hacer esto.

con open ('Response.json', 'r') como archivo inresp:


inrespdata = json.load (inrespfile)

con open ('OutResponseCSV.csv', 'w') como archivo de salida:

para datos en inrespdata:

salida = str (datos ['id']) + “,” + str (datos ['trabajo']) + “,” +


str (datos ['nombre']) + ”\ n”

outfile.write (salida)

Como la salida generada por la API está en formato JSON, podemos elegir fácilmente
cualquier valor con solo elegir la clave correspondiente. Apliqué la misma lógica para
elegir la identificación, el trabajo y el nombre del archivo y agregué todos estos valores
después de convertirlo en una cadena.

OutResponseCSV.csv

20, líder, mike

971, ingeniero, jason

92, dba, sonal

482, gerente, ken

También podría gustarte