Usando Racket para consumir una API REST
December 15, 2016
Usando Racket para consumir una API REST
Consumir una API Rest en Racket es uno de los menesteres mas sencillos que un programador de este lenguaje puede imaginar, basta con importar un par de librerías para empezar a escribir el programa. En este post (¿si lo entienden?… post), vamos a usar la API pública de jsonplaceholder como ejemplo:
Método Get
El método mas común en una API REST es el get, el cual te permite tomar toda la información disponible en ese endpoint. De esta forma podemos:
(require json)
(require net/url)
(call/input-url
(string->url "https://jsonplaceholder.typicode.com/albums")
get-pure-port
read-json
)
(call/input-url
(string->url "https://jsonplaceholder.typicode.com/posts/1")
get-pure-port
read-json
)
Método Post
Este es uno de los métodos mas complicados, ya que no basta con usar la Url sino que tambien se debe agregar cierta información en el cuerpo del mensaje.
El cuerpo del mensaje debe estar codificado en alguno de estos estandares:
- application/x-www-form-urlencoded (Por defecto)
- multipart/form-data
- text/plain
Así que si quieres transmitir información binaria o con un tamaño considerable deberias usar multipart/form-data
. De lo contrario, usa application/x-www-form-urlencoded
.
(require json)
(require net/url)
(require net/uri-codec)
(call/input-url
(string->url "https://jsonplaceholder.typicode.com/posts/")
(lambda (url)
(post-pure-port url
(string->bytes/utf-8 (alist->form-urlencoded
(list (cons 'userId "1")
(cons 'title "Soy un titulo")
(cons 'body "Hola mundo"))))))
read-json
)
Métodos PUT, PATCH y DELETE
Los demas métodos se comportan muy parecido a GET y POST pero cambia el nombre de la función que crea el puerto (por ejemplo: put-pure-port, delete-pure-port).
(call/input-url
(string->url "https://jsonplaceholder.typicode.com/posts/1")
(lambda (url)
(put-pure-port url
(string->bytes/utf-8 (alist->form-urlencoded
(list (cons 'userId "1")
(cons 'title "Soy un titulo")
(cons 'body "Hola mundo"))))))
read-json
)
Enviando un archivo
Enviar un archivo no es muy complejo, basta con codificar el cuerpo del post bajo multipart/form-data
, lo veremos en el siguiente tutorial.