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

  1. Crear una carpeta en el home del usuario, llamada phpiter.
  2. Dentro de phpiter crear las carpetas html y api.
  3. Como usuario root, ejecutar el siguiente comando de consola:
    echo "127.0.0.1 phpiter.com.ar" >> /etc/hosts
  4. 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

  1. Bajar phpiter.sql desde aquí.
  2. En la consola correr lo siguiente:
    mysql -u root -p < phpiter.sql
  3. Crear el archivo index.php en phpiter/api.
  4. Instalar Slim Framework en index.php recién creado.

Prerequisitos

Ejercicio 2

  1. Crear la api rest en phpiter/api/index.php para cada tabla en la base de datos phpiter.
  2. 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

Made with Slides.com