Estou tentando converter um conjunto de serviços baseados em SOAP em uma API RESTful.
Comecei identificando recursos analisando os nomes das operações e obtive o recurso Subscription
.
Quando preciso atualizar o estado da assinatura, não posso simplesmente enviar uma POST
solicitação ao servidor, porque não tenho acesso direto aos recursos, mas preciso chamar algumas operações no estilo RPC para atualizar suas propriedades. Além disso, somente e somente se eu estiver alterando o estado da assinatura para "ativo", será necessária uma chamada adicional para um serviço externo.
Nesses casos, qual é a melhor prática para lidar com operações subjacentes?
A solução que eu encontrei é usar parâmetros de consulta, para que, se eu precisar chamar o serviço de ativação, possa usar algo como:
POST /subscriptions/{subscriptionid}/?activate=true
Considerando que não posso atualizar diretamente meus campos de objeto de inscrição, existe alguma prática recomendada para lidar com esse tipo de conversão?
Atualização 1:
Eu posso colocar no corpo da minha solicitação POST alguns valores, por exemplo "state": "active"
e verificar dentro do meu serviço as operações adequadas a serem acionadas.
fonte
Respostas:
Você precisa assistir a essa palestra de Jim Webber.
Pense em "mensagens"; envie uma mensagem para o seu domínio, descrevendo o que você deseja que aconteça. O efeito colateral da mensagem é que seu modelo de domínio realmente altera seu estado. O "recurso" é a fila de mensagens.
A ortografia do nome do recurso não importa para as máquinas; mas as pessoas tendem a ficar exigentes quando os identificadores que você usa quebram da convenção de que recursos são "substantivos".
Além disso, estamos falando de um recurso subordinado
/subscriptions/{subscriptionid}
, portanto, a convenção (consulte a RFC 3986 ) exige expressar esse relacionamento com um segmento de caminho, em vez de usar a parte da consulta.Portanto, essas grafias podem ser razoáveis
fonte
Se for um sinalizador booleano para ativar / desativar coisas, eu diria que o padrão é usar JSON:
Isso é facilmente estendido se você deseja oferecer suporte a mais propriedades. Outra abordagem está fornecendo seu próprio terminal:
Pessoalmente, eu usaria isso apenas se o
active
estado desse evento precisar / tiver propriedades que você possa passar / obter no JSON, como um ID de usuário ou configuração.Se não for um valor booleano, mas apenas uma ação que você precisa disparar, mas não precisa / possui nenhum feedback de status (exceto um OK imediato 200), eu usaria um ponto de extremidade como esse para acioná-lo como um RPC:
Em caso de dúvida, leia o seguinte: http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful (consulte "E as ações que não se encaixam no mundo das operações CRUD? ")
fonte
O REST não é funcional.
Activate
é um verbo e não pode ser um estado,Active
é um estado.Como o RESTful não é funcional, você não pode dizer ao serviço RESTful o que fazer, mas pode adicionar trabalho para a fila de um serviço.
Veja isso:
Esta solicitação é RESTful e suporta todos os benefícios do RESTful (como desempenho, ácido ...)
fonte