Ao projetar uma interface RESTful, a semântica dos tipos de solicitação é considerada vital para o design.
- GET - Coleta de lista ou elemento de recuperação
- PUT - Substituir coleção ou elemento
- POST - Criar coleção ou elemento
- DELETE - Bem, erm, exclua coleção ou elemento
No entanto, isso não parece abranger o conceito de "pesquisa".
Por exemplo, ao projetar um conjunto de serviços da web que suportam um site de Pesquisa de emprego, você pode ter os seguintes requisitos:
- Obter anúncio de emprego individual
- GET para
domain/Job/{id}/
- GET para
- Criar anúncio de emprego
- POST para
domain/Job/
- POST para
- Atualizar anúncio de emprego
- COLOQUE para
domain/Job/
- COLOQUE para
- Excluir anúncio de trabalho
- DELETE para
domain/Job/
- DELETE para
"Obter todos os trabalhos" também é simples:
- GET para
domain/Jobs/
No entanto, como a "procura" de emprego se enquadra nessa estrutura?
Você pode afirmar que é uma variação da "coleção de listas" e implementar como:
- GET para
domain/Jobs/
No entanto, as pesquisas podem ser complexas e é totalmente possível produzir uma pesquisa que gere uma cadeia GET longa. Ou seja, referenciando uma pergunta SO aqui , há problemas ao usar cadeias GET com mais de 2000 caracteres.
Um exemplo pode estar em uma pesquisa facetada - continuando o exemplo de "trabalho".
Posso permitir a pesquisa em facetas - "Tecnologia", "Cargo", "Disciplina", além de palavras-chave de texto livre, idade do trabalho, localização e salário.
Com uma interface de usuário fluida e um grande número de tecnologias e cargos, é possível que uma pesquisa possa abranger um grande número de opções de facetas.
Ajustar este exemplo para currículos, em vez de trabalhos, traz ainda mais facetas, e você pode facilmente imaginar uma pesquisa com centenas de facetas selecionadas ou apenas 40 facetas, cada uma com 50 caracteres (por exemplo, títulos de trabalho, nomes de universidades, Nomes do empregador).
Nessa situação, pode ser desejável mover um PUT ou POST para garantir que os dados da pesquisa sejam enviados corretamente. Por exemplo:
- POST para
domain/Jobs/
Mas semanticamente, isso é uma instrução para criar uma coleção.
Você também pode dizer que expressará isso como a criação de uma pesquisa:
- POST para
domain/Jobs/Search/
ou (como sugerido por burninggramma abaixo)
- POST para
domain/JobSearch/
Semanticamente, pode parecer fazer sentido, mas na verdade você não está criando nada, está fazendo um pedido de dados.
Portanto, semanticamente é um GET , mas o GET não é garantido para suportar o que você precisa.
Portanto, a pergunta é: tentando manter o mais fiel possível ao design RESTful, enquanto asseguro que estou mantendo dentro das limitações do HTTP, qual é o design mais apropriado para uma pesquisa?
domain/Jobs?keyword={keyword}
. Isso funciona bem para mim :) Minha esperança é que oSEARCH
verbo se torne um padrão. programmers.stackexchange.com/questions/233158/...