Este es uno de los capítulos del tutorial Neovim. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.
Una de las utilidades que siempre iban en mi caja de herramientas y que era imprescindible para mi fue Postman. Y me refiero a Postman en pasado, porque he conseguido reemplazar Postman, y lo he reemplazado con un plugin de Neovim implementando en lua. Son varias razones que me han llevado a deshacerme de Postman, y la primera ya te la puedes imaginar, que está implementada utilizando Electron, y la hace realmente pesada. Pero además, con el paso del tiempo, si bien se ha cargado de características interesantes, se ha ido complicando de forma innecesarias. Y esto me ha llevado a reemplazar Postman por un complemento de Neovim que lo hace todo mucho mas sencillo.
Sustituye Postman por Rest en Neovim
Con independencia de las razones para reemplazar Postman, lo cierto, es que siempre me ha gustado la posibilidad de guardar la información correspondiente a las llamadas a una API, directamente en un archivo de texto, sin necesidad de recurrir a herramientas de tercero. La ventaja de esto es básicamente que el texto plano, al igual que un diamante, es para siempre. Esta es una razón adicional para utilizar un complemento como el que te voy a mostrar.
rest.nvim
Tal y como lo definen los propios desarrolladores de este complemento rest.nvim
es un cliente http
implementado en lua
. Al final, se trata de un envoltorio para utilizar curl
sin necesidad de salir de Neovim.
Características
Algunas de las características de este complemento de Neovim son las siguientes,
- Es muy sencillo de utilizar
- Es rápido como el solo
- Ejecuta las peticiones que se encuentran bajo el cursor
- Resaltado de sintaxis para archivos
http
y su salida - Tiene la posibilidad de utilizar variables de entorno en los archivos
http
.
Instalación
La instalación es tremendamente sencilla, mas si utilizar Lazy para gestionar tus complementos. Te recomiendo que le des un vistazo a mis dotfiles para que veas como lo tengo configurado.
Indicarte que necesitas algunos dependencias para el correcto funcionamiento. En concreto,
curl
. Esto es imprescindible, y casi no hacía falta que lo hubiera puesto.jq
para formatear la salida dejson
, aunque es opcional.tidy
te permite formatear la salidahtml
y al igual que el anterior también es opcional.plenary.nvim
, otro complemento para Neovim.
Atajos de teclado
Indicarte que por defecto, este complemento no tiene definido ningún atajo de teclado y tienes que ser tu el que se los defina. En mi caso, utilizo otro complemento whichkey
y en el he definido los siguientes atajos de teclado,
r = {
name = "Rest",
r = { "<Plug>RestNvim", "Run rest" },
p = { "<Plug>RestNvimPreview", "Run rest preview" },
l = { "<Plug>RestNvimLast", "Run rest last" },
},
Así para realizar una petición desde el modo normal utilizo ;rr
, teniendo en cuenta que en mi caso utilizo ;
como tecla leader.
Ejemplos
Te pongo algunos de los ejemplos que puedes encontrar en el propio repositorio de este complemento, para que veas lo sencillo que es configurarlo,
Un get
,
GET https://reqres.in/api/users?page=5
DELETE https://reqres.in/api/users/2
GET /api/users
host: https://reqres.in
POST https://reqres.in/api/users
Content-Type: application/json
{
"name": "morpheus",
"job": "leader",
"array": ["a", "b", "c"],
"object_ugly_closing": {
"some_key": "some_value"
}
}
Para que las siguientes llamadas funcionen correctamente necesitarás tener creado un archivo .env
en el mismo directorio. De esta forma, en la primera llamada se guardarán los resultados en esas variables en el archivo .env
que has creado, y en la segunda llamada se recupera el valor para utilizarlo.
La parte que ves que está comprendida entre %
es código en Lua, y es la que se encarga de guardar los resultados en el archivo .env
que posteriormente se recuperará en la siguiente llamada.
GET https://jsonplaceholder.typicode.com/posts/3
{%
local body = context.json_decode(context.result.body)
context.set_env("userId", body.userId)
context.set_env("postId", body.id)
context.set_env("body", body.body)
%}
###
GET https://jsonplaceholder.typicode.com/posts/{{postId}}
###
El resultado, también lo podríamos mostrar utilizando otros plugins como notify
. Algo como lo que te muestro a continuación,
local body = context.json_decode(context.result.body)
context.set_env("userId", body.userId)
context.set_env("postId", body.id)
context.set_env("body", body.body)
require("notify").notify(body.body, "info")
Uso de esta plugin
Si bien las llamadas las puedes tener en un archivo http
, lo cierto es que lo puedes tener en cualquier tipo de archivo. Por ejemplo, en el documento Markdown, que he utilizado para preparar este artículo, tenía las distintas llamadas de los ejemplos. Pero lo interesante del caso, y así es como lo he hecho, es que estas llamadas las puedes hacer directamente desde ese archivo.
Quiero decir, que finalmente, puedes tener todas las llamadas perfectamente documentadas en un Markdown, y esto es fantástico para recuperar información sobre la que trabajaste hace un tiempo.
El vídeo
Lo mismo que te he contado hasta aquí pero en formato vídeo,
Conclusión
Una de las operaciones que hago con mas frecuencia son las llamadas API, para los servicios que levanto yo, como para servicios de tercero. Tener estas llamadas documentas es algo verdaderamente importante para mi, y poder hacerlas en un archivo de texto plano, es una verdadera comodidad.
Más información,