Cómo enviar una solicitud de ELIMINACIÓN a phil sturgeon's - codeigniter-restserver

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.

preguntado el 12 de junio de 12 a las 14:06

+1 para el título "Cómo enviar una solicitud de ELIMINACIÓN usando phil sturgeon" -

Gracias por notarlo, me aseguraré de editarlo :) -

Echa un vistazo a esta esencia: gist.github.com/Ema4rl/aebb63db1c76786c9cba811d69339fd3 -

2 Respuestas

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

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 or haz tu propia pregunta.