El año pasado, en la universidad, veía una materia que se llama Web Services, los cuales son una serie de mecanismos para comunicar dos dispositivos electrónicos sobre Internet. Uno de los temas dentro de esa asignatura era REST (Representational State Transfer), que resulta ser un web service que trabaja sobre el servidor Apache y emplea todas sus bondades. Últimamente, se puede leer mucho sobre frameworks de desarrollo ágil de software que cuentan con algo llamado CRUD (Create Read Update and Delete), una serie de verbos para crear aplicaciones y servicios web, que a su vez facilitan el manejo de información en bases de datos. Pues, ese CRUD está ligado a REST.
Resulta y acontece que para esa época de estudio, encontré un buen artículo que explica las muchas diferencias entre los varios métodos que ofrece el protocolo HTTP, de los cuales REST hace uso, pero como está en Inglés, no sería tan fácil compartirlo, así que a continuación, viene una pequeña adaptación el Español. Sigue leyendo para que conozcas un poco más sobre estos métodos.
Métodos HTTP
El navegador emplea normalmente los métodos HTTP más usados por los desarrolladores, GET y POST. Para los que no saben, el método GET lo usamos cuando escribimos en la barra de direcciones del navegador un enlace válido, al presionar enter, el navegador envía una petición al servidor por medio del método GET. Por otro lado, cuando nos damos de alta en un sitio web o hacemos un pago a través de Internet, el navegador usará el método POST.
Además de GET y POST, están también PUT, DELETE, HEAD y OPTIONS, los cuales plantearé uno a uno enseguida.
GET
Se usa para obtener información del servidor, puede ser algún archivo HTML, una imagen, un archivo de texto, un XML, etc. Este método solo debe usarse para obtener información del servidor de acuerdo a los estándares de HTTP. El método GET no debe cambiar el estado del servidor, es decir, no debe hacer ninguna modificación a cualquier archivo que en éste se encuentre. En términos de CRUD, GET sería el Read (Leer).
POST
Se podría decir que es el método HTTP más empleado, eso en parte a que permite hacer variedad de operaciones del CRUD, aunque por estándar, es el encargado de crear un nuevo recurso y, por consiguiente, modificar el estado del servidor. En términos de CRUD, el método POST se confunde en ocasiones con el método PUT, aunque la diferencia radica en una cualidad que se llama idempotencia.
¿En qué consiste la idempotencia? Sencillo, se trata de la capacidad que tenga un ente (este caso el método) de realizar una misma operación varias veces, y obtener el mismo resultado que si solo se hiciese una vez.
Teniendo en cuenta que es la idempotencia, se dice que el método POST no es idempotente, en cambio sí lo es el método PUT. Dice el artículo original, que POST cada vez que hace una operación cambia el estado del servidor, por ejemplo, si en un formulario de comentarios de un blog, presionamos dos veces el botón «Comentar», habrás creado dos veces el mismo comentario en el servidor y para cada nuevo petición POST, se creará un nuevo comentario en el servidor. Por esto es que se liga al método POST con la acción del CRUD, CREATE (Crear, Registrar).
PUT
No es tan usado como lo son GET y POST. Su uso podría darse en el caso de que, por ejemplo, quisieras hacer una operación que haga una acción sobre el estado del servidor, pero que la siguiente vez que suceda, no cambie ese estado. El ejemplo que da el autor del artículo que traduzco se basa en la operación de actualización.
Queremos actualizar un archivo que ha sido subido al servidor, dicha subida ocasionó un cambio en el estado del servidor. Cuando vuelvas a subir el mismo archivo al servidor, el archivo viejo será reemplazado por el que acabas de cargar.
Teniendo esto en cuenta, podemos relacionar el método PUT con la acción del CRUD, UPDATE (actualizar).
DELETE
No tiene mucho que explicar. Teniendo en cuenta los estándares de HTTP, el método DELETE es el único que debe ser usado para borrar un recurso del servidor, sin embargo, algunos desarrolladores emplean los métodos GET o POST para esa labor. En cuanto a CRUD, DELETE sería la acción, que lleva su mismo nombre, DELETE (borrar).
HEAD
Se usa para obtener la cabecera de respuesta que devuelve el servidor al hacer una petición sobre éste. Similar a GET, ambos no cambian el estado del servidor, aunque HEAD solo devuelve los metadatos. Se puede usar para saber si cierto recurso está en el servidor.
OPTIONS
Este método se usa para saber que otros métodos HTTP están disponibles, para determinado recurso, en el servidor. Por ejemplo, para saber si alguna imagen acepta los métodos GET o POST, haces la petición REST sobre ese recurso y en la cabecera de respuesta, obtendrás la respuesta Allow con los métodos que pueden usarse sobre dicho recurso.
Cierre
La idea de este artículo es compartir, y traducir, el texto original, el cual considero muy bueno, sobre los métodos que se usan en una aplicación RESTful. Todo esto, en aras de brindar información de consulta en español. Como siempre, si hay algo mal, deja el comentario para estar al tanto. Espero les sirva a quien lea esto.
Por lo usual aparte de crear contenido con POST, yo lo usaba también para hacer consultas «GET» extensas.
es decir si los parámetros que determinaban una respuesta eran muy extensos (ya sea por valor de parámetros extensos o cantidad de parámetros exuberantes ) enviaba un JSON a través de POST para recibir dicha respuesta.
así evitaba una URL demasiado extensa.
aunque he conocido puristas que transformaban un JSON a String y lo pasaban como parámetro GET lo cual hacía mucho mas extensa la URL.
¡Excelente Artículo, Muchas Gracias por la gran labor en la dedicación de la traducción!
XD
Tenia rato buscando, informacion acerca de esto.
EXECELENTE INFORMACION
Excelente, muy bien explicado.
Muy bueno!
Gracias creo que ahora sí me quedó claro 🙂
Excelente, tenia rato buscado información sobre esto, muchas gracias!.
gracias Francisco!
Reblogueó esto en El Blog de FoxCarlosy comentado:
Conoce un poco sobre los Metodos HTTP en REST