http

Fetch API en JavaScript: peticiones HTTP con promesas

JavaScript es un lenguaje que evoluciona en todos los sentidos.

Hace tiempo se utilizaba XMLHttpRequest para hacer peticiones AJAX en JavaScript del lado del cliente. Tiempo después aparecieron librerías como jQuery que traían una función para hacer más fáciles las peticiones, con $.ajax.

Más tarde salieron librerías como axios, o algunas otras que vienen incorporadas en frameworks.

Recientemente (bueno, hace ya algunos años, pero es más nueva que XMLHttpRequest) ha aparecido la función global fetch en JavaScript que trabaja con promesas y permite hacer peticiones HTTP de todo tipo de una manera fácil y rápida.

En este post voy a mostrar una guía de cómo trabajar con fetch en JavaScript para hacer peticiones GET, POST (con datos en el cuerpo), PUT y DELETE, además de solicitar HTML o JSON.

También veremos cómo enviar un formulario con fetch. Recuerda que ya vimos cómo subir un archivo usando fetch.

Continue reading…

Enrutador y Middleware en Go con Gorilla Mux

En un post anterior vimos cómo responder peticiones HTTP con rutas en Go, pero las mismas no eran tan simples cuando se trataba de variables en la URL o métodos HTTP.

Hoy vamos a ver un enrutador o router de Go, que permite definir rutas y métodos HTTP para responder a ellos, de una manera fácil.

El enrutador, llamado Mux (que es de las herramientas de Gorilla) permite:

  • Definir middleware en las rutas, es decir, aplicar funciones que se ejecutan antes de cada petición HTTP y que permiten detener la ejecución o loguear determinadas cosas
  • Definición de rutas con verbos HTTP
  • Lectura de parámetros GET
  • Lectura de variables dentro de la url. Por ejemplo si definimos algo como usuario/{id} y se consulta a usuario/1 podemos obtener el valor 1 accediendo a la variable
  • Variables dentro de la URL con expresiones regulares

En resumen, Mux es un router de Go que soporta además Middleware. Veamos algunos ejemplos del mismo.

Si quieres ver el código final míralo en GitHub.

Nota: si usas PHP te recomendo Phroute.

Continue reading…

Petición POST, GET, PUT y DELETE en Go con net/http

Golang es un lenguaje utilizado del lado del servidor debido a su simplicidad de uso, potencia y velocidad.

Sin embargo, con Go también se pueden hacer peticiones HTTP. Es decir, Go también puede funcionar como cliente HTTP, no solo como servidor.

Como sabemos, hay 4 métodos básicos para las peticiones HTTP: POST para enviar datos, GET para obtener, PUT para actualizar y DELETE para eliminar.

Peticiones HTTP con Go y net http

En este post veremos ejemplos de cómo hacer estas 4 peticiones con Go usando el paquete net/http para lograr hacer una petición GET, POST, PUT y DELETE usando Golang.

También vamos a ver cómo escribir y enviar encabezados o el código de respuesta (200 para OK, 500 de error, 405 de no permito, etcétera)

El sitio web que vamos a usar para probar será httpbin.org, el cual sirve como espejo para probar que realmente estamos haciendo las peticiones y enviando datos.

Continue reading…

Archivo movido y procesado

Aprende a usar curl

Curl es una gran herramienta para hacer peticiones y enviar datos usando HTTP. Desconozco todas sus funciones pero puedo asegurar que sirve perfectamente para probar las APIs que creamos en cualquier lenguaje de programación con el paradigma REST.

Es por eso que hoy veremos cómo usar CURL para probar nuestras API’s y hacer otras peticiones que nos ayudarán a depurar nuestros programas de la web. A lo largo de este tutorial te mostraré, entre otras cosas, lo siguiente:

  • Enviar encabezados
  • Especificar verbo HTTP
  • Enviar datos o JSON
  • Enviar datos como formulario
  • Subir un archivo
  • Enviar el contenido de un archivo

Nota: curl está disponible para Windows y me parece que viene preinstalado en Linux.

Continue reading…

Probando petición HTTP GET con Java y JSONPlaceholder

Petición HTTP GET en Java para consumir HTML o JSON

Obtener respuesta de URL con Java y HttpUrlConnection

En este tutorial vamos a ver cómo hacer una petición HTTP de tipo GET con Java. Es decir, obtener la respuesta HTTP (ya sea HTML, JSON, texto, etcétera) que se obtiene al visitar una URL.

No vamos a usar ninguna librería externa ni paquetes de terceros, solamente URL, HttpUrlConnection y algunos búferes.

Esto será simple pero a partir de esto podremos hacer peticiones más grandes.

Continue reading…

Ejemplo de respuesta de la API de JsonPlaceholder

Petición HTTP GET simple en Node.js con request

Node, JavaScript del lado del servidor, provee un modo para comunicarse a través de http: el módulo http. Sin embargo, este módulo es un poco largo de usar, así que se han creado varios módulos o paquetes y uno de ellos es request.

El módulo de request tiene otra envoltura llamada request-promise, el cual es como request pero usando promesas.

En fin, vamos a ver cómo hacer una petición GET HTTP usando Node y el módulo request. Será un ejemplo sencillo y básico pero que servirá para ejemplos más avanzados.

Continue reading…

Servir fuera de la carpeta raíz

Servidor web completo en Go

Vamos a ver cómo crear un servidor web en el lenguaje de programación Go, también conocido como Golang. Lo que haremos será crear un servidor simple que responderá a peticiones GET, es decir, a las direcciones URL y que servirá archivos.

Explicado de otra manera, nuestro server hará esto:

  • Responder a peticiones dependiendo de la URL
  • Leer parámetros que pasamos por la URL
  • Servir un directorio y archivos, por ejemplo HTML, imágenes, vídeos, etcétera; algo así como lo hace el buen Apache o el servidor en Python.

No necesitaremos librerías extras ni frameworks, pues el maravilloso lenguaje provee todo lo que necesitamos.

Por cierto, si no lo tienes, mira cómo instalar Go en Windows.

Este tutorial es completo, explicaré a detalle cada cosa, te aseguro que aunque es un poco largo te enseñará lo robusto que es el lenguaje Go en cuanto a la web.

¿Interesado en algo más robusto? conoce mux.

Continue reading…

Codificar y decodificar URI en Android

Introducción

A veces, en las peticiones HTTP de tipo GET necesitamos mandar valores en la URL. Dichos valores deben codificarse primero.

En PHP tenemos la función urlencode, en Javascript tenemos a encodeURIComponent, y hoy veremos cómo codificar una URI en Android.

¿Qué es codificar una URI?

Es quitar todos aquellos símbolos que no sean letras, números, o cosas como _-!.~'()*.

Aquel carácter que no sea uno de esos símbolos, será codificado. Por ejemplo, veamos esto:

Tenemos una cadena: sup_2018-04-26T12:10:07

Codificada se ve así: sup_2018-04-26T12%3A10%3A07

Como podemos observar, se remplazaron los dos puntos por %3A. Y no sólo se remplazan estos, se remplazan todos aquellos que no cumplan las reglas mencionadas arriba.

Codificar URI en Android

Para codificar una cadena que irá en una URL podemos utilizar Uri.encode. Primero importamos la clase:

import android.net.Uri;

Luego podemos llamar a su método estático llamado encode. Recibe un argumento de tipo cadena. Un ejemplo de código sería este:

String normal = "sup_2018-04-26T12:10:07";
String codificada = Uri.encode(normal); // sup_2018-04-26T12%3A10%3A07

Con eso podemos codificar. Y si, del lado del servidor deseamos decodificar, podemos usar el método que el lenguaje proporcione.

En PHP existe urldecode, por ejemplo.

Decodificar uri en Android

Si queremos hacer el proceso inverso, llamamos a Uri.decode con una cadena codificada. Por ejemplo, así:

String codificada = "sup_2018-04-26T12%3A10%3A07";
String normal = Uri.decode(codificada);  // sup_2018-04-26T12:10:07

Con eso terminamos por hoy.

Axios y PHP: ejemplos de peticiones AJAX

Introducción

Si queremos hacer peticiones AJAX utilizando Javascript y PHP sin complicarnos las cosas, podemos utilizar una librería que es muy popular en el mundo de VueJS.

Pero hoy no hablaremos de éste framework, sino de axios: una librería para hacer peticiones HTTP asíncronas.

Es muy fácil de configurar y provee algunos métodos que a cualquier desarrollador le vendrían bien.

Para explicarlo mejor, haremos 4 operaciones HTTP: GET, POST, PUT y DELETE. Del lado del servidor utilizaremos PHP sin ningún framework. Vamos allá.

Lado del servidor

Supondremos que todas las peticiones serán realizadas a un mismo archivo PHP, y qué este se encargará de ver cuál método se está llamando. Y para efectos prácticos vamos a imaginar que es una API para gestionar usuarios y ventas.

El código para responder a cada solicitud queda como se ve a continuación. Simplemente leemos cuál es el método de petición, dependiendo de ello evaluamos la ruta, y respondemos. Este es un método que aunque sirve, es un poco difícil de mantener.

Sin embargo, esto sólo es ilustrativo para no confundir al lector. Si queremos algo más robusto para manejar las rutas en PHP, podemos leer este post.

Obviamente en lugar de un echo, llamaríamos a una función, una función de un controlador, conectaríamos a la base de datos o cualquier cosa.

JSON para comunicarse

Estamos utilizando JSON para realizar la comunicación. Prefiero este método a cualquier otro, ya que podemos mandar un objeto, un objeto con arreglos, un arreglo de objetos, etcétera (cualquiera cosa que esté en formato JSON) y después, al decodificarlo del lado del servidor, conservará su estructura, así como los tipos de datos: los strings serán strings, los flotantes flotantes, y lo mismo para los booleanos y enteros.

Es por ello que con PHP utilizamos json_decode para decodificar los datos. Y luego, cuando respondemos, hacemos un json_encode. Así, respondemos y recibimos en el mismo formato.

Lado del cliente

Por defecto, Axios serializa los datos. Así que ya no tenemos que utilizar JSON.stringify (o cualquier método que usemos).

Si no utilizáramos Axios, Javascript provee dos funciones para trabajar con JSON: JSON.stringify para codificar, y JSON.parse para el proceso contrario.

Pero en este caso Axios sabe que JSON es un buen formato, así que él mismo codifica y decodifica los datos. Es decir, cuando hacemos una petición, codifica internamente los datos antes de enviarlos. Y cuando recibe la respuesta, antes de mandarla, la decodifica.

El código para hacer las peticiones queda así:

Ejecutando aplicación

Sólo fueron dos peticiones, pero al ejecutar el código pasa esto:

Lo que comprueba que realmente se están recibiendo los datos es la segunda impresión en la consola. Ya que dice que guardamos al usuario Luis, y ese nombre lo estamos recibiendo en PHP e imprimiéndolo para regresarlo.

Notas

Peticiones

En el ejemplo sólo llamé al método POST y GET. Como pudimos ver, con POST accedemos a los datos desde la variable obtenida de php://input.

Lo mismo podemos hacer con PUT, recordemos que los datos viajarán en el cuerpo, no en la URL. Aunque sí podemos poner algo como un id en la dirección.

Finalmente, quiero aclarar que en PHP podemos hacer un echo igualmente de un objeto o arreglo, no debemos limitarnos a una cadena. Y tampoco debemos limitarnos a un “echo”. Podemos hacer un printf o cualquier cosa que imprima datos. O igualmente podemos no imprimir nada.

ES6

Por cierto, utilicé sintaxis moderna de Javascript. Por ejemplo, let, funciones flecha y const. Estos estándares todavía no están soportados en todos los navegadores, pero sí en la mayoría. Puedes rescribirlos si gustas.

En lugar de let y const sería var. Y en lugar de la función flecha, sería una función anónima.

 

Conclusión

Si combinamos esta librería del lado del cliente con una librería como Phroute del lado del servidor, podemos armar una API robusta con la arquitectura cliente servidor utilizando la comunicación REST.

(429) Too Many Requests Laravel – Solución y explicación

Introducción

Cuando estamos consumiendo una api creada con Laravel, puede que nos aparezca el error que dice “(429) Too Many Requests“. Aquí explicaré por qué pasa y qué solución tenemos para ello.

Básicamente esto aparece porque estamos haciendo muchas peticiones en un corto periodo de tiempo; por ejemplo, hacer 100 peticiones en menos de un minuto.

Es una forma que tiene Laravel para protegernos. Ya que de esta forma bloqueamos el acceso a un usuario malicioso que haga miles de peticiones para que nuestro servidor caiga. Si pasa el límite, sólo se le responderá con el código http 429.

Continue reading…