REST URL design
November 12, 2014 · View on GitHub
Informações Gerais
Proposta de URLs para aplicações RESTful
:app-name - nome da aplicação
:rest - contexto, parte da URL que identifica a comunicação em REST
:version - versionamento (uso recomendado, porém não é obrigatório)
:resource - nome do recurso exposto (entidade), sendo este nome no plural
GET, UPDATE, DELETE
http://:app-name/:rest/:version/:resource/:id
:id - identificador do recurso
-
GET - recurpera o recurso do respectivo identificador
-
UPDATE - atualiza o recurso do respectivo identificador, sendo a representação do recurso enviado no corpo da requisição
-
DELETE - solicita a remoção do respectivo recurso pelo seu identificador
GET, POST
http://:app-name/:rest/:version/:resource
-
GET - recupera uma listagem dos recursos
-
POST - um novo recurso a ser inserido, enviado no corpo da requisição
GET
Respectivos parâmetros que podem ser enviados.
Paginação
http://:app-name/:rest/:version/:resource?page=1&size=10
-
page - identifica o índice inicial para listagem [ valor padrão sugerido: 1 ]
-
size - quantidade de itens que irão retornar na requisição [ valor padrão sugerido: 10 ]
-
seleção de itens na base de dados:
índice inicial = ((page-1) * size)
quantidade de itens selecionados = size
- modelo de retorno:
{
data: {type: Array}, // itens da página
count: {type: Number}, // quantidade de itens na base
page: {type: Number}, // página atual
pages: {type: Number} // quantidade de páginas
}
- Atenção: é altamente recomendável definir valores iniciais, caso uma requisição de paginação venha sem parâmetros, isto previne de recuperar todos os itens do banco de dados (mantenha em mente, provavelmente sua base irá crescer além de 100, 1000, ... registros).
Consulta e paginação
http://:app-name/:rest/:version/:resource?q=:query
http://:app-name/:rest/:version/:resource?q=:query&page=1&size=10
:query - parâmetro de consulta ou expressão de consulta
Observação: necessário uma implementação no servidor para tratar o processamento desta query.
Utilidades
http://:app-name/:rest/:version/:resource?action=:option
A idéia dessa proposta de URL é ter um recurso flexível para disponibilizar funcionalidades
:option - opção de ação solicitada. Implementações sugeridas:
- template - retorna uma amostra do recurso com seus respectivos atributos (é interessante também informar os tipos dos atributos)
Desnormalização
Além das URLs acima, outras URLs podem ser implementadas para adicionar mais funcionalidades.