Pergunta

Olhando ao redor, eu não posso nomear uma única aplicação web (não o serviço web) que usa nada além de solicitações GET e POST. Existe uma razão específica para isso? Será que alguns navegadores (ou servidores) não suporta quaisquer outros tipos de solicitações? Ou isso é apenas por razões históricas? Eu gostaria de fazer uso de PUT e solicitações DELETE para fazer a minha vida um pouco mais fácil no lado do servidor, mas estou relutante em porque ninguém mais faz.

Foi útil?

Solução

Na verdade, uma boa quantidade de pessoas usam PUT e DELETE, principalmente para APIs não-navegador. Alguns exemplos são o Atom Publishing Protocol e as APIs de dados do Google:

Além disso, você não vê PUT / DELETE no uso comum, porque a maioria dos navegadores fazer PUT não suporte e DELETE através de formulários. HTML5 parece estar a fixar este:

A forma como ele funciona para aplicativos de navegador é: as pessoas projetar aplicativos RESTful com PUT e DELETE em mente, então "túnel" esses pedidos através de posts do browser. Por exemplo, veja esta questão SO sobre como Ruby on Rails faz isso usando campos ocultos:

Assim, você não estaria em sua própria concepção a sua aplicação com o maior conjunto de HTTP verbos em mente.

EDIT: By the way, se você está curioso sobre o porquê de PUT / DELETE estão ausentes do navegador baseado mensagens forma, verifica-se não há nenhuma boa razão real técnico. Leitura em torno esta discussão na lista de discussão resto-discuss, especialmente os comentários de Roy Fielding, é interessante para algum contexto:

EDIT: Há alguns comentários sobre se as bibliotecas AJAX apoiar todos os métodos. Ele vem para baixo para a implementação do navegador real de XMLHttpRequest. Pensei que alguém pode encontrar este link útil, que testa seu navegador para ver como compatível com o HttpRequest objeto é com várias opções de HTTP.

Infelizmente, eu não sei de uma referência que recolhe esses resultados.

Outras dicas

Muito simplesmente, o HTML 4.01 form elemento só permite que os valores "POST" e "GET" em seu atributo method

Alguns servidores proxy com as políticas de segurança difíceis pode soltá-los. Estou usando PUT e DELETE de qualquer maneira.

Eu li que alguns navegadores não suportam outros métodos HTTP corretamente, embora eu não posso nomear qualquer específicos.

Rails, em particular, vai arrumar suas formas com um parâmetro de método para definir explicitamente esse mesmo se o navegador não suporta esses métodos. Isso parece uma precaução razoável se você estiver indo para fazer isso.

Eu digo usar todos os recursos de HTTP, os navegadores que se dane, lol. Talvez ela vai inspirar utilização mais completa e adequada do protocolo HTTP avançar. Há mais acontecendo na rede do que apenas posts e GETs. Sobre o tempo implementações navegador reflete isso.

Isso depende do seu browser e biblioteca Ajax. Por exemplo jQuery suportes todos os métodos HTTP mesmo que o navegador não pode. Veja por exemplo o jQuery "ajax" documentação no atributo "tipo".

O quadro Restlet Java permite que você coloque túnel e solicitações de exclusão através de operações HTML POST. Para fazer isso, basta adicionar method = put ou método = excluir a sua cadeia de consulta do URI, por exemplo:

http://www.example.com/user=xyz?method=delete ...

Este é o mesmo que no rubi abordagem trilhos (como descrito por @ars acima).

Pessoalmente, eu realmente não vejo qualquer finalidade para usar PUT ou DELETE em uma aplicação web. Todas as operações que um aplicativo executa são ler ou escrever, saída aka entrada. Por que você precisa para distinguir a natureza da operação no cabeçalho do pedido HTTP? Eu poderia fazer chamadas Ajax com o mesmo url da forma / objeto / object_id e fazer várias operações como de exclusão, atualização, obter o valor, ou criar. Basta olhar para o URL, eu não tenho idéia qual é. Usando GET e POST somente, meus urls será:

/ objeto / id / delete

/ objeto / id / criar

/ objeto / id / atualização

/ objeto / id -> GET implícita

etc.

Com base na minha experiência limitada, este é muito mais limpo do que escondidas tipos de solicitação de cabeçalho em muitos casos. Não estou dizendo que nunca se deve usar PUT ou DELETE, apenas dizendo, usá-los apenas se for absolutamente necessário.

Consulte "RESTful Web API", de Leonard Richardson para ler mais sobre os diferentes casos de uso e convenções relativas aos métodos de solicitação HTTP em uma API RESTful web.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top