Crea un API REST en PHP, en menos 10 minutos.
Вставка
- Опубліковано 22 вер 2024
- Ahora veremos cómo crear un RESTful web service utilizando PHP y MySQL para consultar y guardar la información. Para que puedas probar este código debes tener instalado PHP y MySQL.
Para tu comodidad puedes descargar todo el código desde este enlace
my.pcloud.com/...
Antes que nada debes de tener claro que es un web service RESTful, si aun tienes dudas, puedes leer un articulo sobre RESTful haciendo clic aquí.
www.codigonara...
Para este ejemplo vamos a asumir que tenemos un blog y necesitamos un servicio RESTful para acceder a los artículos y editarlos, entonces nuestro servicio va realizar estas operaciones:
+ Listar todos los posts (artículos de un blog)
+ Mostrar un post
+ Agregar un post
+ Eliminar un post
+ Actualizar uno o más campos de un post
Transcripción:
Primero necesitamos una base de datos, vamos a utilizar MySql y phpMyAdmin.
00:00:07.700
Primero ingresamos y vamos a crear una nueva base de datos, la vamos a llamar blog y algo muy importante es que aquí en cotejamiento vamos a elegir utf8.
00:00:23.650
Esto va a servir para que podamos ingresar "ñ" y tildes y que no se vean esos caracteres extraños. Creamos la base de datos y ahora necesitamos una tabla, en el video vas a encontrar un archivo comprimido. Al abrirlo, vas a ver un archivo llamado scriptdb.sql, lo abres y copias todo su contenido.
00:00:47.300
Ahora regresas a phpMyAdmin y haces clic en esta pestaña sql y ahora vas a pegar aquí todo el contenido del archivo y haces clic en continuar. Listo esto ha creado una nueva tabla, la vemos acá y aquí está su estructura.
00:01:10.600
Tenemos un ID, un título, un estado, un contenido y el usuario dueño del post.
00:01:19.400
Ahora veamos algo que te va a servir para crear cualquier servicio Rest en php, primero vamos a ir a nuestro directorio www y vamos a crear una carpeta, le voy a colocar rest, puede ser cualquier nombre que tú quieras pero tiene que estar en el directorio www. Ahora abres tu editor de texto favorito, en mi caso voy a utilizar Atom y vamos a abrir ese folder que acabo de crear o carpeta y vamos a crear un archivo llamado index.php, ahora vamos a abrir unas etiquetas de php y vamos a utilizar este código, este código va a servir para regresar una respuesta http con un código, esto es básico para mostrar la respuesta de el resultado de la ejecución de tus servicios RESTful, para probarlo, vamos abrir un navegador y escribimos aquí localhost, una barra inclinada y el nombre de tu carpeta, que mi caso es Rest y aquí estamos viendo un código de error 400, qué es exactamente lo que estábamos queriendo hacer. Como vemos en el código aquí utilizamos la función header y entre paréntesis y comillas, vamos a regresar un estado http en este caso envío 400, qué es el error que acabamos de ver. Ahora vamos a cambiarlo y colocamos 500 y vamos a probar otra vez actualizamos.
00:03:02.900
Y como vemos aquí está el error 500. Ahora veamos cómo mostrar un resultado satisfactorio, qué es el estado 200. Volvemos a cargar y se ve una página en blanco, vamos a hacer clic derecho y elegimos esta opción.
00:03:24.200
Y aquí está las herramientas para desarrollador web. Vamos a ir a Network y ahora tenemos que cargar de nuevo la página.
00:03:35.700
Y como vemos aquí está el estado que regresamos qué es el 200, eso significa que todo está bien. Ahora veamos otra función que te va a servir, es cómo saber qué método está solicitando. Lo hacemos con este "if" y aquí tenemos una variable global que server, el método que se está utilizando y aquí lo comparamos con algo, por ejemplo, post, también podríamos utilizar aquí get, put, delete, etcétera. Aquí vamos a colocar el código que corresponde al tipo de llamado dependiendo del método que se está utilizando, si es post, put, delete, etcétera. Muy bien con esto tenemos la base para poder responder a una petición de nuestro servicio Rest, ahora vamos a lo más importante vamos a crear el servicio Rest para esto copiamos esa carpeta que se llama src, que viene en el archivo comprimido que descargaste vamos a copiarlos y los pegamos en la carpeta de tu directorio www, ahora regresamos a tu editor de texto y cómo ves aquí están estos archivos, vamos a ver uno por uno primero está el archivo config.php que tiene una variable de tipo array, esa tiene estos datos que es el Host en mi caso es localhost, tiene el usuario de la base de datos y la clave de la base de datos y el nombre de nuestra base de datos. Ahora está un archivo de utilidades, aquí hay una función que se llama Connect.
........
Excelente forma de explicar, más claro que nunca, Infinitos agradecimientos, una manera muy buena para quienes medio programamos.
MUCHAS GRACIAS!!!!! , lo has explicado excelentemente, claro y preciso,
No dejes de generar más videos, lo haces muy bien!!
Gracias otra vez!
Excelente al grano sin tanta vuelta me gusto gracias.
Hola, tengo una duda, estoy aprendiendo php pero me surge la duda de que diferencia existe entre hacer una api para consultar o meter datos en la tabla y/o hacer directo la consulta o un append.
Saludos.
Explicas bastante bien bro me subscribo
Con que claridad explicas .. genial!
Gracias, me alegra que te haya gustado el canal
Hola, gracias por la información.
Tengo una duda en cuestión del método de actualizar, no comprendo como mandar los valores si solo tiene un arreglo $fields.
Te agradecería si me pudieses aclarar esa duda por favor, saludos.
Buenas, muchas gracias por el tutorial quedo todo muy claro, para habilitar CORS? como se haria? muchas gracias
si estan pasando esta api a produccion en un cpanel. tienen que agregarle debajo de los "include" del archivo post.php esto:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
pues hay servidores que no permiten la accesibilidad remota
Amigo pero el put recibe get url o Params no url
Muy bueno el video
Me gusto mucho tu video :) sería bueno que explicaras los demás métodos veo que algunos tienen dudas sobre eso
Gran video amigo, me sirvió mucho😁
Que bueno que te haya gustado!
Muy buen vídeo, un ejemplo muy bueno.
Gracias por tu comentario!!
Si uso xammp sería en la carpeta htdocs verdad?
si
Super.. mil gracias
Muy bueno, gracias!!!
Gracias, que bueno que te haya servido
me ayudo un monton muchas gracias
Me alegra que te haya gustado el video, gracias
Muchas gracias por el aporte, seria genial que nos ayudes completando la opcion PUT, porque en mi caso no me funciona con POSTMAN
Me pasaba lo mismo, si funciona, pero se deben enviar los datos a actualizar como parámetros: localhost/example/post.php?id=4&content=Prueba para actualizar (osea al probar en el postman, debe enviarse como en Params)
@@davidbuenano8962 A mi me pasa todo lo contrario, en el Metodo GET no me muetra nada.
Buenos dias, no veo la autenticacion en este API, o si tienen un video donde lo explique ya que siempre una api pide autenticacion o token etc
Un pregunta, Es posible que hallan acceso simultáneos? O de eso se encarga el Apache? Esta bueno el video. Gracias
Hola, si se puede tener accesos simultaneos y si Apache es quien se encarga de eso. Pero Apache no es muy bueno, es mucho mejor usar nginx, cuando tenia mi blog en Apache comenzo a sentirse muy lento, pero con solo cambiar a Nginx mejoro muchisimo.
Gracias amigo me sirvió mucho
Me alegra que te haya servido y gracias por el comentario
esta muy bueno y practico.... gracias
Gracias!! Dios lo bendiga
Si quiero enviarle un RAW Json y no un form data, cómo podría hacerlo?, saludos.
Muchas gracias por tu video, te dejo mi Like y suscripción, sigue así. Saludos
Excelente, super bien, funciona Impecable
si tengo el servidor localhost:8080 ??? en cuales lineas de codigo cambia
Excelente video explicativo...podrías hacer los codigos de error en la Api..por fa
Cordial saludo. Excelente video. Cuál sería el comando para solicitarle a la API un GET/POST desde un navegador, o una app en python/C# y no desde postman? Gracias por compartir sus conocimientos.
mil gracias, excelente video, se gano un suscriptor mas
Muchisimas gracias!!! Excelente video
Disculpen mi ignorancia, esto es un RestFull? ( es que vi otros con frameworks pero no se que diferencia hay ) aparte, como sería esto de la mano con Ajax?
Muchas gracias, por fin me quedo claro como es que funciona esto, pero necesito una ayuda urgente, por que me funciona con algunas tablas y con otras no, me refiero que en algunas tablas solo funciona con el get id, pero no hace el select *, o hay un límite de registros y columnas que puede mostrar, lo busque en google pero nada menciona eso, muchas gracias de antemano
Que tal amigos, a mi me estaba pasando que mis registros tenían "ñ" o tildes, y por lo tanto no me traia registros en mi consulta, esto lo solucione poniendo al inicio
$sql = $dbConn->prepare("SET NAMES 'utf8'");
$sql->execute();
por que mi base tenia otro cotejamiento.
Gracias por tu aporte!
la riegas no dices que ya esta actualiuzado la pagina de pruebas
No olvidar que el campo status solo puede tener dos valores: draft y published
excelente video, muy bien explicado, sigue adelante.
amigo gracias, y gracia spor le codigo necesitaba algo simple dime si esto puedo subirlo a hostgator
Muchas gracias :D
Muchas gracias por tu ayuda
Gracias por comentar, me alegro que te gustara mi video
Porque no puedo entrar a esa página? Me dice que localhost ha rechazado mi conexión
Parece sencillo pero cuando tengas que sacar información de tablas relacionales ahí se complica al usar los INNER JOIN en el Api rest y hacerlo de forma dinámica ya son palabras mayores , porque sólo muestran lo fácil.
Si, esto es para hacer el servicio, ya lo que tu mencionas es programación normal de php que haces regularmente al crear aplicaciones.
Muchas Gracias AMigo podrías ayudarnos en Testear el PUT ? No me sale :(
Estoy en las mismas bro, lo lograste? jaja
pasó 1 año pero nunca está demás preguntar omegalul
en mi caso mi campo id se llama ids y es de tipo bigint, le quite la comilla simple al igualar en el where
$postId = $input['ids'];
$fields = getParams($input);
echo $fields;
$sql = "
UPDATE tabla
SET $fields
WHERE ids=$postId
con estos cambios funciono....
Hola tengo una duda cual es la diferencia en servicio web Json y RestFul, porque en tu video vi el código fuente y me di cuenta que tu servicio web es Json.
Hola, los servicios web tradicional se basan en xml esto hace que usen mas espacio y sean mas complicados. Los servicios restful usan json. Cuando escuches rest, restful, servicio web json, son lo mismo. Cuando escuches servicio web usualmente se refieren a un servicio que usa xml y un wsdl. Aqui hay un articulo en donde esta todo bien explicado. codigonaranja.com/restful-web-service
Gracias por comentar
no me lista nada, tengo una tabla con mas de 1000 filas, pero no lo lista
Buenas, muchas gracias por el tutorial, lo tengo funcionando.
Sin embargo tengo un problema, en mi tabla de la base de datos tengo algunas campos de tipo text y medium text, cuando el contenido de estos campos supera unos 10/15 caracteres todo deja de funcionar. Al hacer un GET se recibe la respuesta correcta (200) pero deja de mandar el contenido de la tabla en JSON, no se recibe nada.
mismo error, todavia.. alguna solucion?
disculpa podrias subirlo de nuevo si no fuera inconveniente
me sale este error cuando lo ejecuto usando postman ?
Parse error: syntax error, unexpected '[' in C:\inetpub\wwwroot
est\src\config.php on line 5
lo he revisado y creo que es por los corchetes? que hago
Hola, que version de PHP estas usando? esa sintaxis es valida a partir de PHP 5.4
Excelente video. Pero no se puede descargar codigo
Hola! implemente tu codigo y funciona siempre y cuando instale postman en la PC, cuando lo ejecuto en el navegador me tira el siguiente error: "Cloud Agent Error: Can not send requests to reserved address. Make sure address is publicly accessible or select a different agent" ¿sabe como lo puedo solucionar? me interesa que mi api rest este en servidor local y sea llamado desde otro dispositivo de la misma red LAN solo que este sea un app web
Hola, es por que si tu servicio o api esta local solo puede ser usado en tu computadora, para que sea accesible desde cualquier parte debe estar publicado en un servidor con una ip publica
Está super bien, solo que me manda HTML en vez de Json :(
HOLA AMIGO MUY BUEN VIDEO TENGO UN PROBLEMA CON EL PUT PONGO LO SIGUIENTE
localhost/rest/post.php?id=3
localhost/rest/post.php?id={3}
VOY AL BODY EN FORMDATA Ó EN RAW
"title": "xxx"
NO ME ACTUALIZA EL REGISTRO ME PODRAS APOYAR
POR FAVOR --> SOLO DALE UN 1
Hola muchas gracias porel tutorial, muy sencillo y bien explicado. Pero tengo un problema con el metodo POST me devuelve este error en los logs:
thrown in /home/rtfgd/public_html/api/post.php on line 44
[26-Jul-2020 22:44:03 Europe/Madrid] PHP Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in /home/rtfgd/public_html/api/post.php:44
Esto es lo que tengo en post
Hola, revise tu código y el problema está en el SQL del método post, tú tienes
$sql = "INSERT INTO restaurants
(memberid, nombre, latitud, longitud, Direccion, cpostal, ciudad)
VALUES
($memberid, $nombre, $latitud, $longitud, $Direccion, $cpostal, $ciudad)";
Pero estás usando variables que no existen, trata de ponerlas como :memberid en lugar $memberid (: en lugar de $), también debes de validar que en el arreglo $_POST vienen todas esas variables. Eso no lo hice en el ejemplo por que trato de mantener todo sencillo, si pongo cada validación, el código sería más difícil de leer.
Si tienes dudas sobre como manejar bases de datos con PDO en PHP, aquí tengo un tutorial en mi blog que te puede ayudar
www.codigonaranja.com/2018/acceso-bases-datos-usando-pdo-php
@@CodigoNaranja Buenas, muchas gracias, si tienes razón lo hice con los 2 puntos y fue cuando me dio ese error. Después probe con los $ y tampoco funcionaba, pero el error es con los : , no entiendo muy bien a que te refieres con que vengan esas variables en $_POST, debo incluirlas en algun lugar más de donde las he incluido?
muchas gracias de nuevo!
Pudiste resolverlo? me sale lo mismo.
Hola,
esa API como se le hace para un carrito de compras con sesiones?