Pergunta

A estrutura Agavi usa a solicitação de put para criar e postar para atualizar informações. Geralmente, em repouso, isso é usado de outra maneira (geralmente se referindo à adição de informações postais enquanto substitui todo o registro de dados).

Se eu entendi corretamente, a questão importante é que a colocação deve ser idempotente, enquanto a postagem não possui esse requisito. Portanto, ferirei como criar um novo registro pode ser idempotente (ou seja, solicitação múltipla não leva a várias criações de um registro) em particular quando geralmente o ORM usa um ID como chave primária e o id de um novo registro não seria conhecido Para o cliente (pois é autococenciado no banco de dados), portanto, não pode fazer parte da solicitação. Como o Agavi mantém o requisito de idempotência à luz disso para a solicitação de put.

Obrigado.

Foi útil?

Solução

O put pode ser usado tanto para criação quanto para atualizar registros completos. A postagem é geralmente usada para atualizações parciais e operações relacionadas, bem como para criar um novo tipo de registro no servidor sem especificar um URL para o recurso (por exemplo, postagem para /artigos /23 /comentários retorna um status de 201 e um local: /Artigos /23/Comentários/283136 Cabeçalho). Portanto, no seu caso (com um ID de sequência/auto -increment), você usaria essa abordagem.

No entanto, o HTML (e, portanto, os formulários da Web) é diferente. Ele só sabe obter e postar, não excluir e colocar. Para exclusão e atualização de operações, ele sobrecarrega o método de postagem.

É por isso que agavi, por padrão, mapas posta para "escrever" e chegar a "ler" - é o caso de uso mais comum, e "Read" e "Write" foram escolhidos porque são relativamente neutros e também representam a segurança da segurança Aspectos do GET vs Post (segurança como em "Get podem ser chamados sem efeitos colaterais" e blá).

Você pode alterar o mapeamento de verbos para a implementação agaviwebrequest em fábricas.xml; Consulte a lista de discussão dos usuários do AGAVI ou o canal IRC se precisar de ajuda com isso (ou pergunte aqui). Muitas pessoas no canal do IRC também são bastante experientes com o design do esquema de URL, caso você precise de mais ajuda para tornar sua API bonita.

Outras dicas

Em vez de pensar em PUT Ao criar, pense nisso como "colocando". Você coloca um recurso em um URI (ou seja, envia um recurso inteiro para um URI).

PUT http://example.com/articles/1

Se você repetir isso (envie o mesmo recurso inteiro para o mesmo URI), obterá o mesmo resultado e não alterou o recurso nesse URI, é isso que o torna idempotente.

Se a implementação de Agavi de PUT é idempotente, então está implementando PUT corretamente. Caso contrário, não é.

O put pode ser usado para criar um recurso, exceto que, se o recurso já existir (ou já tiver sido criado por um put anterior), ele apenas o atualizará. A postagem não deve atualizar os recursos, no entanto, se isso for simples. Observe que os verbos HTTP não têm um mapeamento definido para certas ações necessariamente, pois são úteis para muito mais do que apenas Crud.

Observe também que essa pergunta não tem nada a ver com descanso - apenas o uso adequado do HTTP. Então, remova a etiqueta de restante.

Eu já tive esse problema antes. Isso pode ser resolvido por Alterar as fábricas.xml

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