¿Cómo permitir que otros incorporen datos a tu servidor a través de HTTP POST?
Añadir datos a un servidor mediante HTTP POST es una habilidad esencial para cualquier desarrollador web. A través de este método, posibilitamos que otros usuarios o aplicaciones integren nuevos datos en nuestro sistema. Empecemos por entender cómo hacerlo de manera eficaz utilizando el lenguaje de programación PHP.
¿Qué es HTTP POST y por qué es importante?
HTTP POST es uno de los métodos de petición más utilizados en la web. Se emplea principalmente para enviar datos al servidor, generalmente para crear o actualizar recursos. A diferencia de GET, que solicita datos, POST permite enviar datos más complejos y extensos, ya que no hay restricciones en el tamaño de la URL.
¿Cómo interpretar los datos en formato JSON?
Al establecer una API, decidimos que los datos se recibirán en formato JSON, una práctica común debido a su simplicidad y amplio soporte en diversos lenguajes. Este formato permite estructurar la información de manera más comprensible y fácil de manipular. Al recibir un POST, la información se captura y maneja en PHP a través de la variable php://input, que nos proporciona el contenido completo del cuerpo de la petición.
Aquí un ejemplo de cómo podríamos procesar estos datos:
Imaginemos que gestionamos una colección de libros. Queremos permitir añadir un nuevo libro a través de la API. Una vez decodificados los datos JSON recibidos, podemos integrarlos en nuestra estructura existente y devolver información útil como el ID del nuevo libro añadido.
functionaddNewBook($books,$newBookData){$books[]=$newBookData;end($books);returnkey($books);// Devuelve el ID del nuevo libro creado.}// Asumiendo que $books es nuestra colección existente y $newBookData el nuevo libro.$newBookId=addNewBook($books,$data);
¿Cómo verificar la correcta inserción del nuevo libro?
Para comprobar que el nuevo libro se ha añadido correctamente, devolvemos el ID generado. Esto proporciona una indicación clara de que la operación fue exitosa. Posteriormente, podríamos verificar el contenido de toda la colección si fuera necesario:
echojson_encode($books);
¿Cómo realizar una petición POST con curl?
Para practicar, puedes simular peticiones POST utilizando curl, una herramienta de línea de comandos versátil y poderosa. La siguiente instrucción realiza una solicitud POST hacia nuestro servidor local:
Este comando utiliza el modificador -X POST para definir el tipo de solicitud y -d para incluir los datos JSON que se envían al servidor.
Con estas pautas, has aprendido a manejar incorporaciones de datos mediante HTTP POST, enriqueciendo y extendiendo las capacidades de tu servidor. Continúa explorando y experimentando con estos conceptos para fortalecer tus habilidades de desarrollo web. ¡Adelante!
Incorporación de Datos a Servidor mediante API REST en PHP
Incorporación de Datos a Servidor mediante API REST en PHP
Recursos
Resumen
¿Cómo permitir que otros incorporen datos a tu servidor a través de HTTP POST?
Añadir datos a un servidor mediante HTTP POST es una habilidad esencial para cualquier desarrollador web. A través de este método, posibilitamos que otros usuarios o aplicaciones integren nuevos datos en nuestro sistema. Empecemos por entender cómo hacerlo de manera eficaz utilizando el lenguaje de programación PHP.
¿Qué es HTTP POST y por qué es importante?
HTTP POST es uno de los métodos de petición más utilizados en la web. Se emplea principalmente para enviar datos al servidor, generalmente para crear o actualizar recursos. A diferencia de GET, que solicita datos, POST permite enviar datos más complejos y extensos, ya que no hay restricciones en el tamaño de la URL.
¿Cómo interpretar los datos en formato JSON?
Al establecer una API, decidimos que los datos se recibirán en formato JSON, una práctica común debido a su simplicidad y amplio soporte en diversos lenguajes. Este formato permite estructurar la información de manera más comprensible y fácil de manipular. Al recibir un POST, la información se captura y maneja en PHP a través de la variable php://input, que nos proporciona el contenido completo del cuerpo de la petición.
Aquí un ejemplo de cómo podríamos procesar estos datos:
Imaginemos que gestionamos una colección de libros. Queremos permitir añadir un nuevo libro a través de la API. Una vez decodificados los datos JSON recibidos, podemos integrarlos en nuestra estructura existente y devolver información útil como el ID del nuevo libro añadido.
function addNewBook($books, $newBookData) {
$books[] = $newBookData;
end($books);
return key($books); // Devuelve el ID del nuevo libro creado.
}
// Asumiendo que $books es nuestra colección existente y $newBookData el nuevo libro.
$newBookId = addNewBook($books, $data);
¿Cómo verificar la correcta inserción del nuevo libro?
Para comprobar que el nuevo libro se ha añadido correctamente, devolvemos el ID generado. Esto proporciona una indicación clara de que la operación fue exitosa. Posteriormente, podríamos verificar el contenido de toda la colección si fuera necesario:
echo json_encode($books);
¿Cómo realizar una petición POST con curl?
Para practicar, puedes simular peticiones POST utilizando curl, una herramienta de línea de comandos versátil y poderosa. La siguiente instrucción realiza una solicitud POST hacia nuestro servidor local:
Este comando utiliza el modificador -X POST para definir el tipo de solicitud y -d para incluir los datos JSON que se envían al servidor.
Con estas pautas, has aprendido a manejar incorporaciones de datos mediante HTTP POST, enriqueciendo y extendiendo las capacidades de tu servidor. Continúa explorando y experimentando con estos conceptos para fortalecer tus habilidades de desarrollo web. ¡Adelante!
El problema con CMD de Windows está en que no soporta comillas simples, por lo tanto, debemos sustituir su uso por comillas dobles.
Para incluir los datos en json tenemos dos opciones:
Podemos usar el caracter de escape backslash ( \ ) antes de cada comilla dentro de los datos JSON:
Para los que usan Windows, pueden usar el la consola de Ubuntu TLS para windows, que esta disponible en la store, asi se facilitan 10 años la vida y no tienen que hacer inventos raros para que funcione.
pd: pasense a linux, el mundo de programador es mas bonito desde este lado jaja
Apuntes:
Para el caso de POST, debemos validar dentro de la sentencia switch en el caso de que el verbo en la petición sea POST. Debemos asumir que los datos enviados, vengan en formato JSON, tipo de datos que definiríamos en primera instancia al crear nuestro web service.
Al momento de hacer la consulta mediante CURL, usamos a diferencia de GET, el modificador X luego del curl, seguido de esto, especificamos con ‘POST’, seguido escribimos la URL, el puerto y el identificador al que queremos agregar el elemento (en este caso books). Finalmente escribimos el modificador -d y escribimos la cadena JSON con los datos que vamos a almacenar.
Para los que no les funcionó con el CMD de Windows, prueben de esta manera:
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
// Middlewares para recibir JSON a traves del API en express
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// Parametros permitidos para "resource_type"
const allowedResources = [
'books',
'authors',
'genres'
];
// Array de objetos que contienen los libros
const books = [
{ title: 'Lo que el viento se llevo', id_author: 2, id_genre: 2 },
{ title: 'La Iliada', id_author: 1, id_genre: 1 },
{ title: 'La odisea', id_author: 1, id_genre: 1 }
];
app.get('/', (req, res) => {
// Obtiene "resource_type" de los parámetros del URL
const resourceType = req.query.resource_type;
// Verifica si existe este parámetro en nuestro arreglo de permitidos
if(allowedResources.indexOf(resourceType) === -1) {
// Devuelve error si no se encuentra
return res.json({ status: 'Failed', error: 'missing or invalid param: resource_type' });
}
// Si sale todo bien, devuelve un ok junto a los libros
res.json({ status: 'ok', books });
});
app.post('/books', (req, res) => {
// Verifica si se envian datos por formulario
if(req.body) {
// Verifica si falta "title", "id_author" o "id_genre"
if(!req.body.title || !req.body.id_author || !req.body.id_genre) {
// Devuelve error si falta alguno
return res.json({ status: 'failed', error: 'missing or invalid: data' });
}
// Inserta un nuevo objeto al array, y devuelve el id insertado
// (característica javascript)
const insertCount = books.push({
title: req.body.title,
id_author: req.body.id_author,
id_genre: req.body.id_genre
})
// Devuelve ok y el id insertado si todo salió bien
res.json({ status: 'ok', insert_id: insertCount - 1, books })
} else {
// Devuelve un error si no se envian datos por formulario
return res.json({ status: 'Failed', error: 'error no data' });
}
})
// Iniciador del servidor, en el puerto 5000
app.listen(5000, () => {
console.log('server on port 5000');
});