Automatizando CURL Requests

Standard

Introducción:

Hola, desde un tiempo para acá, he estado explorando el automatizar muchas tareas a través de bash scripts.

Una de las tareas que es muy repetitiva cuando estamos utilizando REST APIs, es probar y guardar requests usando unos Clientes REST.
A continuación te comparto un par de Clientes REST basados en Chrome que son los que yo utilizo:
– Advance REST Client. https://advancedrestclient.com/
Contando con estas herramientas, es muy común que tengas varios requests que quieras usar permanentemente, para esto puedes utilizar comandos bash en terminal que después puedes automatizar con scripts.
En este post me voy a enfocar en los requests más comunes para probar un API REST que son GET, POST, PUT y DELETE.

¿Qué es curl?

Curl es una herramienta de la línea de comandos y una biblioteca para transferir datos usando una sintaxis de URL.
Soporta muchísimos protocolos y operaciones, los protocolos que yo he usado son HTTP, HTTPS y FTP, y la operación de transferencia de archivos.
maxresdefault
Para los ejemplos vamos a usar la siguiente API REST para pruebas:
En este caso en particular de esta API, solo maneja objetos JSON y ya los regresa con format. (indentado)

GET Request

Ejecutando curl sin parámetros en un recurso URL con GET.
Request
curl -X GET http://jsonplaceholder.typicode.com/posts/1
Si quisiéramos agregar uno o más headers podemos usar el parámetro -H.
curl -X GET -H 'Content-Type: application/json' http://jsonplaceholder.typicode.com/posts/1
curl -X GET -H 'Content-Type: application/json' -H 'Accept: application/json' http://jsonplaceholder.typicode.com/posts/1

Nota. Se usan comillas simples (‘), cuidado al copiar y pegar y que te cambie el tipo de comillas (`)

Response
{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
POST Request para crear un recurso
Ejecutando un POST para crear un recurso de tipo post, el json e línea se le pasa con el parámetro -d.
Request
curl -X POST -H 'Content-Type: application/json' http://jsonplaceholder.typicode.com/posts/ -d '{"userId":1,"title":"titulo","body":"cuerpo"}'
Response
{
  "userId": 1,
  "title": "titulo",
  "body": "cuerpo",
  "id": 101
}

POST Request con archivo JSON

La misma creación se puede ejecutar pasando un archivo JSON como parámetro, esto sirve para JSON más complejos y con formato.
Normalmente, esta es la opción que uso más, para llevar guardar el cuerpo de los requests.
post.json
{
  "userId": 1,
  "title": "titulo",
  "body": "cuerpo"
}
Request
curl -X POST -H 'Content-Type: application/json' http://jsonplaceholder.typicode.com/posts/ --data @post.json
Response
{
  "userId": 1,
  "title": "titulo",
  "body": "cuerpo"
}

DELETE Request

Request para borrar recursos pasando el id en el cuerpo del request.
Request
curl -X DELETE http://jsonplaceholder.typicode.com/posts/101
Response
{}

 PUT Request

Request para actualizar los atributos el objeto de tipo post. En este caso el ejemplo es en línea con -d, pero también soporta el –data para archivos JSON.
Request
curl -X PUT -H 'Content-Type: application/json' http://jsonplaceholder.typicode.com/posts/101 -d '{"userId":1,"title":"titulo","body":"cuerpo"}'
Respuesta
{}
Bonus
A continuación te comparto algunas opciones también son muy útiles y se usan en combinación con los ejemplos que te compartí anteriormente.
Pretty output
No siempre toca el caso de que los response tienen una salida con formato (pretty) para ese caso se puede usar un comando de python llamado mjson.tool.
Request
curl -X GET http://jsonplaceholder.typicode.com/posts/1 | python -mjson.tool
Response
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   292  100   292    0     0    146      0  0:00:02  0:00:01  0:00:01   146
{
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto",
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "userId": 1
}

File Output

Para guardar el response en un archivo lo hacemos con > nombre de archivo.
Request
curl -X GET http://jsonplaceholder.typicode.com/posts/1 | python -mjson.tool > response.json
Response
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   292  100   292    0     0    611      0 --:--:-- --:--:-- --:--:--   612
cat response.json
{
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto",
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "userId": 1
}

HTTPS requests (inseguros)

En el caso de los request a HTTPS no siempre tienen configurados los certificados de seguridad, para que funcionen los requests sin marcarte error en los certificados debes de agregar el parámetro -k.
Request
curl -k --insecure -X GET https://jsonplaceholder.typicode.com/posts/1

Leave a Reply

Your email address will not be published. Required fields are marked *