libreria - PUT y DELETE del protocolo HTTP y su uso en PHP
rest api put example php (5)
Introducción
He leído lo siguiente:
El Protocolo de transferencia de hipertexto (HTTP) es la vida de la web. Se usa cada vez que transfiere un documento o realiza una solicitud AJAX. Pero HTTP es sorprendentemente un relativo desconocido entre algunos desarrolladores web.
Los verbos HTTP comprenden una parte importante de nuestra restricción de "interfaz uniforme" y nos proporcionan la contraparte de la acción del recurso basado en sustantivos. Los verbos HTTP primarios o más utilizados (o métodos, como se los llama correctamente) son POST, GET, PUT y DELETE .
¿Eh?
Bueno, llegamos al punto en que perdí la noción de las cosas.
PUT
Y
DELETE
, dicen.
Solo he oído hablar de
POST
y
GET
y nunca vi algo como
$_PUT
o
$_DELETE
pasando en ningún código PHP que haya visto.
Mi pregunta
Para qué son estos métodos (PUT) y (DELETE) y si es posible usarlos en PHP, ¿cómo lo haría?
Nota: Sé que esto no es realmente un problema, pero siempre aprovecho una oportunidad de aprendizaje si veo una y me gustaría aprender a usar estos métodos en PHP si es posible.
¿Cuáles son estos métodos (PUT) y (DELETE)
Se describen en la especificación HTTP .
En pocas palabras, y simplificando un poco,
PUT
es para cargar un archivo a una URL y
DELETE
es para eliminar un archivo de una URL.
nunca vi algo como
$_PUT
o$_DELETE
pasando en cualquier código PHP que haya visto
$_POST
y
$_GET
se denominan terriblemente superglobales.
$_POST
es para datos analizados desde el cuerpo de la solicitud.
$_GET
es para datos analizados desde la URL.
No hay nada que vincule estrictamente los datos en ninguno de esos lugares (especialmente la URL) a un método de solicitud particular.
Las solicitudes DELETE solo se preocupan por la ruta de la URL, por lo que no hay datos para analizar.
Las solicitudes PUT generalmente se preocupan por todo el cuerpo de la solicitud (no una versión analizada) a la que accedería con
file_get_contents(''php://input'');
.
para y si es posible usarlos en PHP, ¿cómo lo haría?
Debería asignar la URL a un script PHP (por ejemplo, con la reescritura de URL ), probar el método de solicitud , determinar con qué URL estaba tratando realmente y luego escribir código para realizar la acción adecuada.
¿Cuáles son estos métodos (PUT) y (DELETE) para ...
Hay muchas palabras que gastar para explicar esto, y no estoy lo suficientemente capacitado para hacerlo, pero como ya se publicó, un resumen rápido de lo que describe la especificación HTTP .
El protocolo básicamente dice esto:
-
use GET cuando necesite acceder a un recurso y recuperar datos , y no tenga que modificar o alterar el estado de estos datos.
-
use POST cuando necesite enviar algunos datos al servidor. Ex. desde un formulario para guardar estos datos en alguna parte.
-
use HEAD cuando necesite acceder a un recurso y recuperar solo los encabezados de la respuesta , sin ningún dato de recurso.
-
use PUT cuando necesite reemplazar el estado de algunos datos que ya existen en ese sistema.
-
use DELETE cuando necesite eliminar un recurso (relativo al URI que ha enviado) en ese sistema.
-
use OPTIONS cuando necesite obtener las opciones de comunicación de un recurso, por lo tanto, para verificar los métodos permitidos para ese recurso . Ex. lo usamos para la solicitud de CORS y las reglas de permisos.
- Puede leer sobre los dos métodos restantes en ese documento, lo siento, nunca lo he usado.
Básicamente, un protocolo es un conjunto de reglas que debe usar desde su aplicación para cumplirlo.
... y si es posible usarlos en PHP, ¿cómo lo haría?
Desde su aplicación, debe recuperar qué método se usó con
$_SERVER[''REQUEST_METHOD'']
y reaccionar en consecuencia.
Algunas aplicaciones que se ocupan de navegadores que no admiten los métodos PUT o DELETE usan este truco, un campo oculto del html, con el valor de ej .:
<input name="_method" type="hidden" value="delete" />
Entonces, desde la aplicación, ahora puede reconocer esto como una solicitud DELETE.
Siga una descripción simple de cómo PHP maneja los parámetros:
Cuando usted (su navegador, su cliente) solicita un recurso a un servidor HTTP, debe usar uno de los métodos que acepta el protocolo (HTTP). Entonces necesitas pasar:
- UN MÉTODO
- Un Uri del recurso
- Encabezados de solicitud, como User-Agent, Host, Content-Length, etc.
- (Cuerpo opcional de la solicitud)
entonces una solicitud debería verse así:
GET /something/index.php?maybe=aparameter
Ahora, dentro de su aplicación, PHP toma los parámetros de esta solicitud GET y los inserta en una matriz superglobal (accesible desde su aplicación).
Entonces puede acceder a
$_GET[''maybe'']
que devuelve ''aparameter`.
En el caso de una solicitud POST, solicita el recurso al servidor HTTP de manera similar pero con una diferencia importante. Usted proporciona los datos dentro del cuerpo de la solicitud:
POST /something/index.php
(body) maybe=aparameter
Ahora, dentro de su aplicación, PHP de esta solicitud POST toma los parámetros e los inserta en una matriz superglobal (accesible desde su aplicación).
Entonces puede acceder a
$_POST[''maybe'']
que devuelve ''aparameter`.
Por favor, preste mucha atención también al Código de estado de respuesta (por ejemplo, si recibió una solicitud PUT y ha actualizado ese recurso sin error, debe devolver un estado 204 -Sin contenido-) .
El lugar más adecuado para usar estos métodos (PUT y DELETE) es REST API. Cuando usamos métodos http para definir el modo de operación, por ejemplo, si desea obtener recursos, puede usar lo siguiente:
GET http://api.example.com/employee/<any_id>
para agregar un nuevo elemento:
POST http://api.example.com/employee/
para actualizar o editar:
PUT http://api.example.com/employee/
Eliminar un recurso existente:
DELETE http://api.example.com/employee/1
etc.
Ahora, en el lado de
PHP
, solo necesita leer qué método
HTTP
utilizó para poder realizar una acción de acuerdo con eso.
Hay muchas bibliotecas disponibles que pueden hacer eso por usted.
Forma de usar los datos PUT de PHP:
$method = $_SERVER[''REQUEST_METHOD''];
if (''PUT'' === $method) {
parse_str(file_get_contents(''php://input''), $_PUT);
var_dump($_PUT); //$_PUT contains put fields
}
Los
$_GET
y
$_POST
PHP están mal nombrados.
$_GET
se usa para acceder a los valores de los parámetros de la cadena de consulta, y
$_POST
permite acceder al cuerpo de la solicitud.
El uso de parámetros de cadena de consulta no se limita a solicitudes GET, y otros tipos de solicitudes además de POST pueden venir con un cuerpo de solicitud.
Si desea averiguar el verbo utilizado para solicitar la página, use
$_SERVER[''REQUEST_METHOD'']
.