Introducción a la programación en PHP y MySQL
clase 3
Tecnologías:
¿Que es Apache?
Es una implementación open source de un servidor HTTP.
Pedido HTTP
POST /index.php?position=1 HTTP/1.1
Host: mihost.ejemplo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 18
foo=Hola&bar=Mundo
PUT /index.php?position=1 HTTP/1.1
Host: mihost.ejemplo.com
Content-Type: application/json
Content-Length: 28
{"foo":"Hola","bar":"Mundo"}
Respuesta HTTP
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: nombre-cliente
HTTP/1.1 200 OK
Date: Fri, 31 Dec 2003 23:59:59 GMT
Content-Type: text/html
Content-Length: 1221
<html>
<body>
<h1>Página principal de tuHost</h1>
(Contenido)
.
.
.
</body>
</html>
Configuración
- /etc/apache2/apache.conf
- NameVirtualHost
- <VirtualHost>
- ServerName
- ServerAlias
- DocumentRoot
- Alias
- <Directory>
- Allow from
#Necesario sólo para apache v2.2 o menor
NameVirtualHost *:80
#Necesario sólo para apache v2.2 o menor
NameVirtualHost *:80
<VirtualHost *:80>
ServerName app.ejemplo.com
ServerAlias www.app.ejemplo.com
DocumentRoot /path/a/archivos/html
</VirtualHost>
<VirtualHost *:80>
ServerName app.ejemplo.com
ServerAlias www.app.ejemplo.com
DocumentRoot /path/a/archivos/html
Alias /alias /path/a/alias
<Directory /path/a/alias>
Allow from all
</Directory>
</VirtualHost>
Ejercicio 1
- Crear una carpeta en el home del usuario, llamada phpiter.
- Dentro de phpiter crear las carpetas html y api.
- Como usuario root, ejecutar el siguiente comando de consola:
echo "127.0.0.1 phpiter.com.ar" >> /etc/hosts - Crear un archivo index.html dentro de phpiter/html y phpiter/api que tengan textos diferentes.
Prerequisitos
Ejercicio 1
- Crear un VirtualHost para el servidor phpiter.com.ar y www.phpiter.com.ar
- La raíz de los documentos de este virtual host debe ser la carpeta html dentro de phpiter
- Se debe crear un alias llamado /api para la carpeta api dentro de phpiter
- Se debe configurar el directorio api para permitir requerimientos de cualquiera
- Si ingresamos desde un browser a http://phpiter.com.ar deberíamos ver el contenido del index.html dentro de html, y si ingresamos a http://phpiter.com.ar/api deberíamos ver el contenido del index.html dentro de api.
REST
Representational State Transfer (REST)
- Basado en Recursos, no en acciones
- Recursos representado por URIs
- Acciones representadas con verbos HTTP
- GET <==> Select
- POST <==> Insert
- PUT <==> Update
- DELETE <==> Delete
Ejemplo de Recursos
Recurso | GET | POST | PUT | DELETE |
---|---|---|---|---|
/person | Listado de personas | Insertar una nueva persona | Actualizar la lista de personas | Eliminar todas las personas |
/person/123 | Representación de la persona con id 123 | Actualizar datos de la persona con id 123 | Eliminar la persona con id 123 | |
/person/123/comment | Listado de comentarios realizados por la persona 123 | Insertar un nuevo comentario realizado por la persona 123 | Actualizar la lista de comentarios realizados por la persona 123 | Eliminar todos los comentarios realizados por la persona 123 |
/person/123/comment/1 | Represenación del comentario con id 1 realizado por la persona 123 | Actualizar datos del comentario con id 1 realizado por la persona 123 | Eliminar el comentario con id 1 realizado por la persona 123 | |
/comment | Listado de comentarios de todas las personas | Insertar un nuevo comentario (debe incluir el id de la persona) | Actualizar la lista de comentarios de todas las personas | Eliminar todos los comentarios de todas las personas |
/comment/1 | Repressenación del comentario con id 1 | Actualizar datos del comentario con id 1 | Eliminar el comentario con id 1 |
Representational State Transfer (REST)
Slim Framework
<?php
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Slim es un micro framework para PHP que nos facilita la creación de APIs
Slim Framework
<?php
$app = new \Slim\Slim();
$app->post('/books', function () {
//Create book
});
$app->get('/books/:id', function ($id) {
//Show book identified by $id
});
$app->put('/books/:id', function ($id) {
//Update book identified by $id
});
$app->delete('/books/:id', function ($id) {
//Delete book identified by $id
});
$app->run();
Slim Framework
<?php
$app = new \Slim\Slim();
// Obtener el cuerpo del requerimiento HTTP como String.
$body = $app->request->getBody();
// Obtener las variables que vienen en la URI,
// por ej: /index.php?variable1=valor1&variable2=valor2
$valor1 = $app->request->get('variable1');
$todasGet = $app->request->get();
// Obtener las variables que vienen en el cuerpo de una petición POST
// por ej: variable1=valor1&variable2=valor2
$valor1 = $app->request->post('variable1');
$todasPost = $app->request->post();
// Obtener las variables que vienen en el cuerpo de una petición PUT
// por ej: variable1=valor1&variable2=valor2
$valor1 = $app->request->put('variable1');
$todasPut = $app->request->put();
Slim Framework
Instalación
1. Instalar composer en la aplicación
curl -s https://getcomposer.org/installer | php
2. Crear el archivo comoser.json con el siguiente contenido:
{
"require": {
"slim/slim": "2.*"
}
}
3. Instalar a través de composer
php composer.phar install
4. Agregar al index.php de la api
<?php
require 'vendor/autoload.php';
Slim Framework
Instalación
En nuestra configuración de Apache, agregar dentro del tag <Directory>
<VirtualHost *:80>
ServerName app.ejemplo.com
ServerAlias www.app.ejemplo.com
DocumentRoot /path/a/archivos/html
Alias /alias /path/a/alias
<Directory /path/a/alias>
Allow from all
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</Directory>
</VirtualHost>
Ejercicio 2
- Bajar phpiter.sql desde aquí.
- En la consola correr lo siguiente:
mysql -u root -p < phpiter.sql - Crear el archivo index.php en phpiter/api.
- Instalar Slim Framework en index.php recién creado.
Prerequisitos
Ejercicio 2
- Crear la api rest en phpiter/api/index.php para cada tabla en la base de datos phpiter.
- Se deben utilizar los verbos de HTTP de la siguiente manera:
Tipo | GET | POST | PUT | DELETE |
---|---|---|---|---|
recurso/ | Obtener el listado de recursos | Insertar un nuevo recurso | Eliminar todos los recursos | |
recurso/:id | Obtener el detalle de recurso | Modificar datos del recurso | Eliminar el recurso |
¿Preguntas?
Links de Interés
php y mysql - Clase 3
By Agustin Moyano
php y mysql - Clase 3
- 803