Hay una delgada línea entre elegir una interfaz de programación de aplicaciones (API) y decidir si puede trabajar con ella o no. La mayoría de las API REST tienen una arquitectura genérica y subprocesan una ruta de solicitud común. Pero algunas API se desvían del estándar. En consecuencia, se vuelven difíciles de usar.
Por lo tanto, antes de construir todo su software en una API, debe realizar controles de calidad y asegurarse de que funcione correctamente. Entonces, ¿qué es la prueba de API y cómo se puede probar una API?
¿Qué son las pruebas de API?
Las pruebas de API implican la evaluación inicial de la funcionalidad, seguridad, escalabilidad, velocidad y más de una API para ver si es ideal para el programa que quiere usarla. Pero superficialmente, puede implicar pruebas para ver si envía las respuestas adecuadas cuando realiza solicitudes a través de sus diversos puntos finales.
Dependiendo de su estructura, mientras prueba una API, realizará solicitudes (Obtener, Publicar, Actualizar o Eliminar) a sus puntos finales relevantes. Hay muchas métricas para verificar durante las pruebas de API. Pero en un nivel principiante, desea validar la integridad de una API a partir de su código de estado y asegurarse de que obtenga y acepte los datos correctos.
Con ese fin, como cualquier solicitud web, una API puede devolver el código de estado 200, 400 o 500 o incluso otros.
La mayoría de las API utilizan respuestas JSON para servir sus cargas útiles. Dependiendo del objetivo, otros pueden aceptar y responder con cargas útiles XML, multiparte o HTML.
Cómo probar una API usando Python y JavaScript
Aunque hay muchas herramientas de prueba de API de interfaz gráfica de usuario (GUI) en Internet, puede evaluar una API de manera más crítica con scripts escritos.
Una API indica en su documentación el tipo de solicitudes que permite y les proporciona puntos finales relevantes. Por lo tanto, puede tomarlos y probarlos utilizando los métodos de solicitud adecuados.
Relacionado: ¿Qué es la API REST y cómo puede obtener datos para su aplicación o sitio web?
A diferencia de la fase de producción real, las pruebas API son rudimentarias. Por lo tanto, no necesita tanta especificidad como lo haría mientras ejecuta la API para producción. Aunque existen diferentes tipos de pruebas de API, nos centraremos más en las pruebas de validación de respuesta en este artículo.
Probaremos una API de tienda falsa en este tutorial usando la biblioteca de solicitudes de recuperación de JavaScript y Python . Mientras hacemos esto, probaremos los puntos finales para obtener, publicar, actualizar y eliminar datos.
Cómo probar un punto final de API Get con JavaScript
Como lo usaría en producción, puede probar una API en JavaScript usando Axios o el método de búsqueda .
Para obtener el estado de respuesta de la API usando fetch :
fetch('https://fakestoreapi.com/products', ).then(res =>{ console.log(res) })
La solicitud anterior devuelve un estado 200 si es una respuesta válida. Una vez que realice una solicitud exitosa, puede solicitar datos en tiempo real desde la API.
Obtengamos los datos de esta API:
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ console.log(response) }).catch(err => console.log(err))
La respuesta al código de recuperación anterior se ve así:
Para obtener el precio de todos los productos, por ejemplo, puede utilizar la función de mapa :
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ response.map(data =>{ console.log(data.price) }) // console.log(response) }).catch(err => console.log(err))
Lo anterior registra la siguiente salida:
Probar un punto final Get con Python
Como se mencionó anteriormente, Python también usa la biblioteca de solicitudes para acceder a los datos de una API.
Para comprobar el estado de la respuesta en este caso:
import requests data = requests.get('https://fakestoreapi.com/products') print(data.status_code)
El registro de datos como hicimos anteriormente devuelve un estado correspondiente. Sin embargo, son 200 en este caso.
Ahora obtengamos los mismos datos con Python que cuando usamos JavaScript:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() print(myData)
El resultado de lo anterior se ve así:
Puede obtener datos específicos utilizando el bucle for .
Para obtener precios de productos, por ejemplo:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() indexes = 0 for i in myData: goods = myData[indexes] indexes +=1 print(goods["price"])
Así es como se ve la salida:
Prueba de un punto final de publicación con JavaScript
Después de probar y ver que la solicitud Get funciona, según su objetivo y lo que ofrece la API, es posible que desee verificar si también puede insertar datos en ella.
A diferencia de cómo realiza una solicitud de obtención , una solicitud de publicación acepta una carga útil. Además, deberá especificar que se trata de una solicitud de publicación:
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products', { method: "Post", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload to JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
El código anterior registra el código de estado de respuesta y la nueva información insertada cuando lo ejecuta. Esto le indica si su solicitud se aprobó o no. Normalmente, si el código de estado es 200, su API tiene un punto final válido que devuelve la respuesta adecuada.
Prueba de solicitud de publicación con Python
También puede probar un punto final después de una API de Python usando requests.post . Como lo hizo mientras usaba la recuperación de JavaScript , también debe especificar la carga útil aquí:
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.post('https://fakestoreapi.com/products', data = payload ) print(Posted.status_code) print(Posted.json())
Al igual que JavaScript, el código Python anterior también registra el código de estado de respuesta y los nuevos datos especificados dentro de la carga útil .
Prueba de los puntos finales Put
Actualizar los datos de la API requiere el mismo proceso que publicarlos y obtenerlos en ambos idiomas.
Para hacer esto usando la recuperación de JavaScript , solo necesita reemplazar Publicar con Put :
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products/19', { method: "Put", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload into JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Si prestas atención al punto final de la API, verás que esta vez incluye el ID del producto. Así es como la API sabe qué datos desea actualizar en este caso.
No obstante, algunas API pueden usar otros métodos para diseñar sus puntos finales. Entonces eso no es un estándar.
Para probar la actualización de los datos de la API con Python, usa request.put en su lugar:
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.put('https://fakestoreapi.com/products/19', data = payload ) print(Posted.status_code) print(Posted.json())
Los ejemplos anteriores, si tienen éxito, inserta los nuevos datos en la posición 19 como lo indica el punto final de la API.
Prueba de la solicitud de eliminación
Eliminar datos de una API es tan fácil como realizar una solicitud Get. Esto se debe a que, a diferencia de Publicar y Poner, no es necesario especificar ninguna carga útil. Todo lo que necesita es eliminar el punto final.
Nuestra API elegida aquí usa la ID del producto para rastrear sus datos. Entonces, eliminar un producto es fácil:
fetch('https://fakestoreapi.com/products/19', { method: "Delete", headers:{ 'Content-Type': 'application/json' } } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Solo necesitas unas pocas líneas de código para lograr lo mismo usando Python:
import requests Posted = requests.delete('https://fakestoreapi.com/products/19', ) print(Posted.status_code) print(Posted.json())
Ambos ejemplos anteriores registran el código de estado de respuesta y los datos que pertenecen a la identificación consultada (19 en este caso).
¿Son estos métodos de prueba genéricos?
Si bien solo nos hemos centrado en una única API en esta publicación, los métodos utilizados para probar los puntos finales de CRUD no son diferentes cuando se trata de otras API. La única diferencia, por supuesto, podría estar en las reglas que rodean cada estructura de API y las pautas para solicitar datos. Una vez que los descifra para una API elegida, puede usar el método apropiado, como se describe aquí, para probar sus puntos finales correspondientes.
Por lo tanto, dado que cada API tiene reglas para conectarse a ella, durante las pruebas, algunas pueden proporcionar parámetros adicionales para que los incluya en los encabezados de su solicitud. Dichos parámetros generalmente incluyen un token de acceso u otros como se proporciona en la documentación.