Cómo enviar una solicitud de ELIMINACIÓN a phil sturgeon's - codeigniter-restserver
Frecuentes
Visto 7,844 veces
12
Como dice el título, estoy usando Codeigniter con phil sturgeon - framework codeigniter-restserver.
He seguido el tutorial sobre Nettus y todo funciona bien Excepto cuando se envía una solicitud de ELIMINACIÓN.
Código:
<?php
require(APPPATH.'libraries/REST_Controller.php');
class Client extends REST_Controller{
function user_get()
{
$data = array('returned:'=> $this->get('id'));
$this->response($data);
}
function user_post()
{
$data = array('returned:'=> $this->post('id'));
$this->response($data);
}
function user_put()
{
$data = array('returned:'=> $this->put('id'));
$this->response($data);
}
function user_delete()
{
$data = array('returned from delete:'=> $this->delete('id'));
$this->response($data);
}
}
Estoy usando un complemento FF llamado prueba de recursos HTTP para enviar la solicitud, pero cuando envío una solicitud DELETE con esta URL: http://localhost/api/client/user/id/1
, obtengo {"devuelto desde eliminar:":falso}
Como nota al margen : Encontré esto post y usando el encabezado 'X-HTTP-Method-Override' y enviándolo como una solicitud posterior, pude obtener la identificación, pero prefiero una forma en la que el cliente no tenga que agregar este encabezado.
2 Respuestas
15
De acuerdo con la especificación HTTP, DELETE no puede enviar parámetros. Puede tener cosas en la URL, por lo que podría cambiar esto a:
public function user_delete($id)
{
$this->response(array(
'returned from delete:' => $id,
));
}
Respondido el 12 de junio de 12 a las 14:06
Gracias Phil, gran FW por cierto :). Así que supongo que el tutorial de Nettuts no está actualizado ya que el código es de allí. También la URL debe ser: localhost/api/cliente/usuario/1 (quitar el /id/) - Tomer
solo un comentario, pero ¿no deberías usar algo más como localhost/api/client/user/delete/1
¿o algo? - gorelativo
ftom2: Internet es un archivo, no todos los artículos se mantienen para siempre y no podría hacerlo aunque quisiera. - phil esturión
Mike: ¿Por qué harías eso? Twitter ha contaminado la mente de las personas sobre lo que es una API REST. Agregar "eliminar" no solo es demasiado detallado (un encabezado HTTP llamado "DELETE" ya lo está haciendo) sino que es enormemente inseguro. Si usa cualquier URL GET disponible para acciones destructivas, entonces se expone a todo un mundo de ridículos problemas de seguridad y eliminación accidental de contenido. - phil esturión
Gracias @PhilSturgeon: su biblioteca me ha sido muy útil. Espero que actualicen ese tuto más temprano que tarde, porque probablemente sea frustrante para más de unas pocas personas. - mariachimike
0
Tuve el mismo problema y este trabajo para mí
1 -> en REST_Controller.php reemplace la función predeterminada _parse_delete() por:
protected function _parse_delete()
{
$this->_delete_args = $_DELETE;
$this->request->format and $this->request->body = file_get_contents('php://input');
// Set up out DELETE variables (which shouldn't really exist, but sssh!)
parse_str(file_get_contents('php://input'), $this->_delete_args);
}
¡Eso es todo! no más necesidad de " usuario_borrar($ Id) ""
Respondido 24 Jul 14, 23:07
Echa un vistazo a esta esencia: gist.github.com/Ema4rl/aebb63db1c76786c9cba811d69339fd3 - ema4rl
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php codeigniter rest or haz tu propia pregunta.
+1 para el título "Cómo enviar una solicitud de ELIMINACIÓN usando phil sturgeon" - fire
Gracias por notarlo, me aseguraré de editarlo :) - Tomer
Echa un vistazo a esta esencia: gist.github.com/Ema4rl/aebb63db1c76786c9cba811d69339fd3 - Ema4rl