Diferencia entre revisiones de «Usuario:ManuelRomero/PHP/servicioWeb/rest»
De WikiEducator
< Usuario:ManuelRomero | PHP | servicioWeb
Línea 75: | Línea 75: | ||
La URL es http://localhost/tienda.php | La URL es http://localhost/tienda.php | ||
El URI o recurso es producto.php | El URI o recurso es producto.php | ||
+ | {{Referencias en la web| | ||
+ | * http://programandolo.blogspot.com.es/2013/06/reglas-de-reescritura-parte-1.html | ||
+ | * http://programandolo.blogspot.com.es/2013/06/reglas-de-reescritura-parte-2-directivas.html | ||
+ | * http://programandolo.blogspot.com.es/2013/06/reglas-de-reescritura-parte-3-ejemplos.html | ||
+ | }} | ||
*Una URL amigable es una URL que el cliente va a escribir en el navegador, aunque no existe tal cual en el servidor, sino que el servidor realiza una tradcucción | *Una URL amigable es una URL que el cliente va a escribir en el navegador, aunque no existe tal cual en el servidor, sino que el servidor realiza una tradcucción | ||
Línea 116: | Línea 121: | ||
http://localhost/servicio_rest/productos/1 | http://localhost/servicio_rest/productos/1 | ||
http://localhost/servicio_rest/index.php?url=productos/1 | http://localhost/servicio_rest/index.php?url=productos/1 | ||
+ | ===Haciendo un servicio REST=== | ||
+ | |||
+ | ====La parte del servidor==== | ||
+ | ====La parte del cliente==== | ||
+ | =====curl===== |
Revisión de 01:16 1 feb 2016
REST
- Término introducido por [Roy Fielding] en 2000 (es uno de los principales autores de la especificación HTTP)
- Todos los recursos a los que accedemos en la web son definidos y diseccionados
- Rest define cómo se establece una interacción entre sistemas basada en un navegador web y http
- interfaz
- Como de exponernos al exterior para que puedan interactuar con nosotros
- Cómo recoger los datos para poderlos interpretar
- Como generar una salida para que nos la entiendas
- web
- red de páginas o recursos que se comunica por el protocolo http
(No es una definición, pero sí un concepto importante y una realidad).
Base de Rest
- Rest no es un estándar, es una especificación basada en estándares
- http
- Protocolo sin estado
- Vebos o acciones en la solicitud GET, POST, DELETE, UPDATE y PUSH.
- URL
- Representación de los recursos
- Tipos MIME : text/html , text/xml, text/json,...
|
El protocolo http establece en cada mensaje http un verbo o acción que encabeza la solicitud del mensaje Este puede ser
|
- Estas acciones suelenser comparados con las operaciones asociadas a la tecnología de base de datos,
operaciones CRUD: CREATE, READ, UPDATE, DELETE.
- Existen otra analogías como podemos ver en la tabla siguiente:
Accion | HTTP | SQL | Copy&Paste | UNIX Shell |
---|---|---|---|---|
Create | PUT | Insert | Pegar | > |
Read | GET | Select | Copiar | < |
Update | POST | Update | Pegar | >> |
Delete | DELETE | Delete | Cortar | Del / rm |
Acción HTTP SQL Copy&Paste Unix Shell Create PUT Insert Pegar > Read GET Select Copiar < Update POST Update Pegar después >> Delete DELETE Delete Cortar Del/rm
|
URI y URL's amigables
- Una URL es el localizador de ese recurso, por ejemplo
http://localhost/tienda/producto.php La URL es http://localhost/tienda.php El URI o recurso es producto.php Plantilla:Referencias en la web
- Una URL amigable es una URL que el cliente va a escribir en el navegador, aunque no existe tal cual en el servidor, sino que el servidor realiza una tradcucción
http://programandolo.blogspot.com.es/2013/06/reglas-de-reescritura-parte-1.html#more
- supongamos que en nuestro proyecto tenemos la URL
http://localhost/reescritura/paginaAmigosConfianza.php&dato=pedro
- Es claro ver que a alguien le sería mas claro escribir
http://localhost/reescritura/amigo/pedro
- Para conseguir esto, lo que tendríamos que hacer es establecer una regla en el servidor de modo que traduzca una url en la otra
- Pasos a seguir
- La sobreescritura de direcciones amigables la hace el módulo rewrite' de apache
- Primero miramos a ver si tenemos ese módulo instalado
/usr/sbin/apachectl -t -D DUMP_MODULES
- Nos listará los módulos instalados. Buscamos rewrite
- En caso de no tenerlo instalado lo instalamos
sudo a2enmod rewrite
- Después reiniciamos el servicio
sudo service apache2 restart
- Hay que recordar que para que se apliquen las directivas del fichero .htaccess, debemos tener habilitada para ese directorio (o para todos) la directiva AllowOverride All
<Directory /var/www> AllowOverride All </Directory>
- Ahora escribimos las reglas de
RewriteEngine on RewriteBase /servicio_rest/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ index.php?url=$1 [QSA,NC,L]
- Las reglas de reescritura se deben definir en los ficheros de configuración de Apache (httpd.conf) o, en el caso que este activada la capacidad de reescritura, en un archivo .htaccess localizado en el directorio del servidor web donde se quiere que tenga efecto.
- Estambecemos /servicio_rest como directorio base
- Las tres reglas siguiente establece que directorios (-d), ficheros (-f) y enlaces simbólicos (-l) que ya existen, sobre ellos no sea aplicada las reglas de reescritura.
- El último punto es la reescritura
En este caso tenemos la expresión regunar ^(.+)$
- Se puede leer como cualquier conjunto de caracteres al principio que contenga uno o más caracteres hasta el final
- Esta expresión regular será tomada seguida de el dominio y el directorio establecido como base, es decir después de http://localhost/servicio_rest/ .....
- Posteriormente puedo tomar su contenido en la variable $1
- Nos realiza la transformación siguiente (1) escrible el cliente, (2) lee el servidor
http://localhost/servicio_rest/productos/1 http://localhost/servicio_rest/index.php?url=productos/1