Ao criar um serviço REST com a restrição HATEOAS , é muito fácil anunciar a existência de recursos por meio de vinculação. Você cria um GET
na raiz do meu site e eu respondo com o documento raiz listando todos os recursos de primeira camada:
{
users: { href: "/users" }
questions { href: "/questions" }
}
Os clientes que entenderem como ler esses href
valores poderão executar GET
solicitações sobre eles e descobrir todos os recursos atuais disponíveis no aplicativo.
Isso funciona bem para cenários de pesquisa básica, mas não indica se um recurso é consultável. Por exemplo, pode ser razoável executar:
GET /users?surname=Smith
Existem formatos que possam expressar essa capacidade de consulta com informações suficientes para que um cliente possa formar uma consulta coerente sem o conhecimento prévio necessário do recurso?
Além disso, existe alguma maneira de expressar que um cliente pode executar um POST
para um determinado local com um local esperado. Por exemplo, pode-se esperar que um cliente execute o seguinte para criar um novo recurso de pergunta:
POST /questions
{
title: "Are there strategies for discovering REST services using HATEOAS?",
body: "When building a REST service with the HATEOAS constraint, it's very..."
}
Ao usar o HTML como o formato para consumo humano, podemos expressar muito disso através do uso de formulários e de instruções por escrito para permitir que um ser humano descubra as operações que tem permissão para executar em um serviço.
Existem formatos capazes de coisas semelhantes para os clientes?
Respostas:
Como você saberia que tipo de entradas são aceitáveis? Ou seja, se o seu cliente não tem conhecimento prévio, como você definiria a semântica do "sobrenome"? Você está começando a entrar no território de precisar de algo como OWL .
Eu acho que é mais prático esperar que seus clientes entendam a semântica dos tipos mime conhecidos; digamos, por exemplo, "text / vcard" para pessoas.
fonte
application/atomapp+xml
e disponibilizá-lo para todos os clientes que já entendem esse formato. Provavelmente existem tipos de conteúdo conhecidos suficientes para tornar essa uma solução prática.Você pode publicar detalhes de seus serviços através de uma "WADL"
http://en.wikipedia.org/wiki/Web_Application_Description_Language
É opcional e nem todos os technos REST de back-end suportam isso. Jersey, a implementação java "oficial" do jax-rs, oferece suporte, por exemplo - ela pode ser gerada automaticamente para você.
É bastante raro vê-lo usado.
Eu não sei dos grandes usando. Em geral, você tem uma página da web descrevendo a API.
fonte
A primavera tem algum apoio para isso, assim como o descanso.
fonte