Qual é a vantagem de usar Restangular sobre ngResource?

133

ngResourceparece realmente simples de implementar coisas com ...

Quais são as vantagens / desvantagens do uso do Restangular sobre o ngResource ?

1.1.3 $resourceretornará promessas e pode ser implementado usando o mais recente commit de PR . Será oferecido suporte futuro $resourcepara apoiar verbos adicionais que o Restangular faz? E se isso acontecer, Restangular parece que desaparecerá e se tornará irrelivante.

Dan Kanze
fonte
41
Por que fechar? Esta é uma pergunta válida que deve ter respostas definitivas. Especialmente no início do jogo, quando você está tentando decidir o que usar nas chamadas de serviço. O que acontece em três meses quando esse cara deixa de apoiar o Restangular porque o ngResource do Google alcançou todos os recursos que estavam faltando. Então, se grandes $httpalterações de versão forem feitas no angularjs --- você não poderá atualizar porque as chamadas de serviço do Restangualr estarão esperando "outra coisa" e você acabará estripando essa estrutura que "decidiu seguir".
Dan Kanze 15/05
1
Confira aqui github.com/mgonto/restangular/blob/master/…
mgonto 23/13
@ DanKanze: Usuários de SO de nível médio estão muito satisfeitos com perguntas como esta. É realmente frustrante, já que você definitivamente não está perguntando "o que é melhor" ... Minha única sugestão seria formular cuidadosamente perguntas no futuro para não atrair a "Gestapo subjetiva" a descer sobre você com todo o seu poder.
rinogo 23/03

Respostas:

232

Eu sou o criador do Restangular.

Eu criei uma seção no README com as diferenças contra o recurso $. Você pode vê-los aqui https://github.com/mgonto/restangular/blob/master/README.md#differences-with-resource

De qualquer forma, em resumo, além dos recursos adicionais e da abordagem baseada em promessas, a idéia é que o Restangular também possa manipular todos os seus URLs, para que você não precise saber nada sobre eles.

Suponha que você tenha algo parecido com isto para carros: / users / 123 / cars / 456

Em $ resource, você precisaria construir esse URL manualmente e também o objeto $ resource para isso manualmente. Restangular ajuda você a "lembrar" os URLs.

Então, se você faz em algum lugar

Restangular.one("users", 123).get().then(function(user) {
  $scope.user = user;
});

// Some other code

//Automatically does the request to /users/123/cars as it remembers in which object you're asking it.
$scope.user.getList('cars')

Espero que isto ajude!

mgonto
fonte
45
+1 por pular sobre isso. Quem melhor para explicar então o cara que construiu ele mesmo haha!
Dan Kanze 23/05
27
como é .one('users', 123)mais ou menos "conhecedor" do seu URL '/users/123'? (apenas brincando de advogado do diabo) Parece que '/foo/123/bar/123'é muito mais fácil do que isso .one('foo', 123).one('bar', 123).
precisa
5
A idéia é que, em algum momento, você apenas saiba o nome da entidade e o ID. Então você primeiro faz algo mentir var user = Restangular.one('users', 123).getList(). Posteriormente no código ou em algum outro controlador, você faz user.getList('buildings'). Aqui, você só sabe o próximo tipo que é edifícios, mas ele consulta /users/123/buildings/, para que você não tem que saber a URL completa de todos os tempos
mgonto
3
Bom, mas unilateral. A possível "irrelevância" do Restangular foi sugerida neste tópico em relação aos aprimoramentos recentes de $resource- não sugiro que se torne irrelevante por qualquer meio, apenas que foi mencionado. Quaisquer desvantagens factuais ou truques que devemos estar cientes?
youri
3
não há muito do que está naquele README desatualizado com uma versão mais atual do ngresource? (isto é / a utilização de promessas, decorar objecto resposta via transformResponse)
surtyaar
8

Achei o RequestInterceptor do Restangular bastante útil para remover alguns campos do objeto antes de fazer a solicitação. A maioria dos serviços web REST com os quais estou trabalhando não espera o ID nos dados do objeto em uma solicitação PUT, por exemplo, apenas no URL. Geralmente eles não esperam campos de dados extras que não possam ser atualizados por PUT (como o ID ou uma lesma que é gerada pela configuração do título etc.). Eu achei isso simples com Restangular, enquanto eu ainda não descobri como fazê-lo com $ resource de uma maneira limpa, mas tenho certeza que é possível de alguma forma.

Obviamente, também é possível alterar o serviço da web para ignorar esses campos extras, mas isso nem sempre é possível.

awdng
fonte
3

O ngResource não retorna promessas na versão estável mais recente (atualmente 1.0.6). Além disso, parece que Restangular expõe mais verbos que ngResource (expõe PUT, OPTIONS, PATCH, etc).

Se você não precisa dos verbos adicionais e está no ramo instável do AngularJS (que inclui promessas para o ngResource), não vejo nenhum motivo importante para usar o Restangular sobre o ngResource.

Use o que você se sentir confortável.

rtcherry
fonte
2
1.1.3 $resourceretornará promessas e pode ser implementado usando o mais recente commit de PR. stackoverflow.com/questions/16429832/… Será oferecido suporte futuro para $resourcedar suporte a verbos adicionais? E se isso acontecer, Restangular parece que desaparecerá e se tornará irrelivante.
Dan Kanze 15/05
@ DanKanze Não tenho certeza sobre o suporte futuro para verbos adicionais. Para a maioria dos casos de uso, os verbos adicionais não são necessários; portanto, eu não esperaria que isso fosse criado em breve, mas isso não significa que isso não aconteça.
Rtcherry
2
@ DanKanze - duvido que se torne irrelevante. Restangular fornece suporte muito melhor a recursos aninhados, o que é um requisito para alguns desenvolvedores. Algo que o recurso Ng não suporta particularmente bem. Além disso, o ng-resource também não segue as convenções RESTful, algo sobre o qual falei no meu blog.
Oddman
Oddman é um bom argumento sobre recursos aninhados, especialmente útil para back-ends do Rails.
ardochhigh
1

Como acompanhamento das respostas acima e para novos leitores, como eu, interessados ​​nesses pensamentos:

"E se isso acontecer, Restangular parece que desaparecerá e se tornará irrelivante."

"O que acontece em três meses quando esse cara deixa de apoiar o Restangular porque o ngResource do Google alcançou todos os recursos que estavam faltando".

  • [ perguntado 2 anos atrás ]

Na minha opinião, a única garantia de sobrevivência de uma biblioteca de código aberto é a comunidade construída em torno dela. um melhor exemplo seria o mariaDB e o WebScaleSQL, que nasceram como uma bifurcação crescente do excelente sistema de gerenciamento de banco de dados relacional MySQL.

No momento da redação, o Restangular having 6699 stars and 727 forksagora está avançando para o Restangular 2.0, que deve suportar angularJs 2.0 e ES6.

Salem Ouerdani
fonte
0

Para um site simples e rápido que você deseja executar para sempre com o suporte mínimo, eu usaria o http HttpClient angular embutido, seja quem for quando estiver trabalhando em um projeto que adoro e que esteja gostando e tentando usar todas as tecnologias interessantes Vou usar Ngx-Restangular

Além disso, você deve saber que o ngx-restangular funciona apenas com serviços RESTful, como o nome sugere. Portanto, para serviços que fornecem SOAP, você não poderá usar o Ngx-Restangular

https://ngx-restangular.com/

Dito isto, eu usaria ngx-restangular na maioria das vezes, pois sempre tento trabalhar no projeto que acho interessante e tentar implementar o que acho melhor.

Boa sorte!

Nour Lababidi
fonte