Tenho um serviço da web que aceita parâmetros JSON e tenho URLs específicos para métodos, por exemplo:
http://IP:PORT/API/getAllData?p={JSON}
Definitivamente, não é REST, pois não é sem estado. Leva os cookies em consideração e tem sua própria sessão.
É RPC? Qual é a diferença entre RPC e REST?
web-services
rest
rpc
Mazmart
fonte
fonte
Respostas:
Você não pode fazer uma separação clara entre REST ou RPC apenas olhando o que você postou.
Uma restrição do REST é que ele precisa ser sem estado. Se você tem uma sessão, então você tem estado, então não pode chamar seu serviço de RESTful.
O fato de você ter uma ação em seu URL (ou seja
getAllData
) é uma indicação para RPC. No REST, você troca representações e a operação que você executa é ditada pelos verbos HTTP. Além disso, em REST, a negociação de conteúdo não é realizada com um?p={JSON}
parâmetro.Não sei se o seu serviço é RPC, mas não é RESTful. Você pode aprender sobre a diferença online. Aqui está um artigo para você começar: Desmascarando os mitos de RPC e REST . Você sabe melhor o que está dentro do seu serviço, então compare suas funções com o que é RPC e tire suas próprias conclusões.
fonte
Considere o seguinte exemplo de APIs HTTP que modelam os pedidos feitos em um restaurante.
Colocar uma ordem:
Recuperando um pedido:
Atualizando um pedido:
Exemplo retirado de sites.google.com/site/wagingguerillasoftware/rest-series/what-is-restful-rest-vs-rpc
fonte
Como já foi dito, uma diferença importante é que REST é centrado no substantivo e RPC é centrado no verbo. Eu só queria incluir esta tabela clara de exemplos que demonstram que:
Notas
(por exemplo
GET /persons/1234
), enquanto RPC tende a usar parâmetros de consulta para entradas de função(por exemplo
GET /readPerson?personid=1234
).GET /persons?height=tall
).POST /signup
ouPOST /persons
inclui dados que descrevem a nova pessoa).fonte
É RPC usando http . Uma implementação correta de REST deve ser diferente de RPC. Ter uma lógica para processar dados, como um método / função, é RPC. getAllData () é um método inteligente. REST não pode ter inteligência, deve ser dados de despejo que podem ser consultados por uma inteligência externa .
A maioria das implementações que tenho visto atualmente são RPC, mas muitos os chamam por engano de REST. REST com HTTP é o salvador e SOAP com XML, o vilão. Então sua confusão é justificada e você está certo, não é REST.
O protocolo Http não faz uma implementação de REST. Tanto REST (GET, POST, PUT, PATCH, DELETE) e RPC (GET + POST) podem ser desenvolvidos através de HTTP (ex: através de um projeto de API web no Visual Studio).
Tudo bem, mas o que é REST então? O modelo de maturidade de Richardson é fornecido abaixo (resumido). Apenas o nível 3 é RESTful.
por exemplo: nível 3 (HATEOAS):
O link indica que este objeto pode ser atualizado desta forma e adicionado desta forma.
O link indica que este objeto só pode ser lido e é assim que o fazemos.
Claramente, o envio de dados não é suficiente para se tornar REST, mas como consultar os dados, também deve ser mencionado. Mas, novamente, por que as 4 etapas? Por que não pode ser apenas a Etapa 4 e chamá-la de REST? Richardson apenas nos deu uma abordagem passo a passo para chegar lá, só isso.
PS: REST é muito popular, então é o teste automatizado, mas quando se trata de exemplos do mundo real ... bem ...
fonte
REST é melhor descrito para trabalhar com os recursos, enquanto RPC é mais sobre as ações.
REST significa Transferência de Estado Representacional. É uma maneira simples de organizar as interações entre sistemas independentes. Os aplicativos RESTful normalmente usam solicitações HTTP para postar dados (criar e / ou atualizar), ler dados (por exemplo, fazer consultas) e excluir dados. Portanto, o REST pode usar HTTP para todas as quatro operações CRUD (Criar / Ler / Atualizar / Excluir).
O RPC é basicamente usado para se comunicar entre os diferentes módulos para atender às solicitações do usuário. por exemplo, em uma pilha aberta, como a nova, o aspecto e o nêutron trabalham juntos ao inicializar uma máquina virtual.
fonte
Eu argumentaria assim:
Minha entidade possui / possui os dados? Então RPC: aqui está uma cópia de alguns dos meus dados, manipule a cópia dos dados que envio para você e devolva-me uma cópia do seu resultado.
A entidade chamada possui / possui os dados? Em seguida, REST: (1) mostre-me uma cópia de alguns de seus dados ou (2) manipule alguns de seus dados.
Em última análise, trata-se de qual "lado" da ação possui / mantém os dados. E sim, você pode usar a verborragia REST para se comunicar com um sistema baseado em RPC, mas ainda estará realizando atividades RPC ao fazer isso.
Exemplo 1: Eu tenho um objeto que está se comunicando com um armazenamento de banco de dados relacional (ou qualquer outro tipo de armazenamento de dados) por meio de um DAO. Faz sentido usar o estilo REST para essa interação entre meu objeto e o objeto de acesso a dados que pode existir como uma API. Minha entidade não possui / mantém os dados, o banco de dados relacional (ou armazenamento de dados não relacional) sim.
Exemplo 2: eu preciso fazer muita matemática complexa. Não quero carregar um monte de métodos matemáticos em meu objeto, só quero passar alguns valores para outra pessoa que pode fazer todos os tipos de matemática e obter um resultado. Então, o estilo RPC faz sentido, porque o objeto / entidade matemática irá expor ao meu objeto um monte de operações. Observe que todos esses métodos podem ser expostos como APIs individuais e posso chamar qualquer um deles com GET. Posso até afirmar que é RESTful porque estou chamando via HTTP GET, mas, na verdade, é RPC. Minha entidade possui / mantém os dados, a entidade remota está apenas realizando manipulações nas cópias dos dados que enviei para ela.
fonte
No HTTP, ambos acabam sendo apenas
HttpRequest
objetos e ambos esperam umHttpResponse
objeto de volta. Acho que podemos continuar codificando com essa descrição e nos preocuparmos com outra coisa.fonte
Existem várias respostas boas aqui. Eu ainda recomendaria este blog do google, pois ele faz um ótimo trabalho ao discutir as diferenças entre RPC e REST e captura algo que não li em nenhuma das respostas aqui.
Eu citaria um parágrafo do mesmo link que se destacou para mim:
fonte
É assim que eu os entendo e os uso em diferentes casos de uso:
Exemplo: gerenciamento de restaurante
caso de uso para REST : gerenciamento de pedidos
Para gerenciamento de recursos, REST é limpo. Um ponto final com ações predefinidas. Pode ser visto uma forma de expor um banco de dados (Sql ou NoSql) ou instâncias de classe para o mundo.
Exemplo de implementação:
Exemplo de framework: Falcon para python.
caso de uso para RPC : gerenciamento de operação
Para trabalhos analíticos, operacionais, não responsivos, não representativos e baseados em ações, o RPC funciona melhor e é muito natural pensar funcional.
Exemplo de implementação:
Exemplo de estrutura: Flask para python
fonte