В чем преимущество использования Restangular над ngResource?

133

ngResourceуже кажется действительно простым для реализации вещей с ...

Каковы преимущества / недостатки использования Restangular по сравнению с ngResource ?

1.1.3 $resourceбудет возвращать обещания и может быть реализовано с использованием последнего PR-коммита . Будет ли предложена поддержка в будущем $resourceдля поддержки дополнительных глаголов, которые делает Restangular? И если это произойдет, то Restangular кажется, что оно исчезнет и станет неактуальным.

Дэн Канзе
источник
41
Зачем закрывать? Это правильный вопрос, на который должны быть даны окончательные ответы. Особенно в начале игры, когда вы пытаетесь решить, что использовать для звонков. Что происходит через три месяца, когда этот парень отказывается от поддержки Restangular, потому что Google ngResource догнал все функции, которые ему не хватало. Затем, если $httpв angularjs будут внесены существенные изменения - вы не сможете выполнить обновление, потому что вызовы службы Restangualr будут ожидать «чего-то другого», и вы в конечном итоге будете потрошить эту платформу, с которой «решили пойти».
Дан Канзе
1
Проверьте их здесь github.com/mgonto/restangular/blob/master/…
mgonto
@DanKanze: пользователи SO среднего уровня довольны такими вопросами. Это действительно расстраивает, так как вы определенно не спрашиваете «что лучше» ... Мое единственное предложение - тщательно формулировать вопросы в будущем, чтобы не соблазнять «Субъективное гестапо» обрушиться на вас в полной мере.
Риного

Ответы:

232

Я создатель Restangular.

Я создал раздел в README с отличиями от $ resource. Вы можете проверить их здесь https://github.com/mgonto/restangular/blob/master/README.md#differences-with-resource

В любом случае, в итоге, помимо дополнительных функций и подхода, основанного на обещаниях, идея заключается в том, что Restangular также может обрабатывать все ваши URL-адреса, так что вам не нужно ничего знать о них.

Предположим, что у вас есть что-то подобное для автомобилей: / users / 123 / cars / 456

В $ resource вам нужно будет создать этот URL-адрес вручную, а также вам придется создать объект $ resource для этого вручную. Restangular помогает вам в этом, «запоминая» URL-адреса.

Так что если вы делаете в каком-то месте

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')

Надеюсь это поможет!

mgonto
источник
45
+1 за участие в этом. Кто лучше объяснит, тот парень, который построил это сам, ха-ха!
Дан Канзе
27
как можно .one('users', 123)более или менее "знать" о вашем URL, чем '/users/123'? (просто играет адвоката Дьявола) Кажется, '/foo/123/bar/123'это намного проще, чем .one('foo', 123).one('bar', 123).
Бен Леш,
5
Идея в том, что в какой-то момент вы просто знаете имя сущности и идентификатор. Итак, вы сначала делаете что-то, ложь var user = Restangular.one('users', 123).getList(). Позже в коде или в другом контроллере вы делаете user.getList('buildings'). Здесь вы просто знаете следующий тип, который представляет собой здания, но он запрашивает /users/123/buildings/, поэтому вам не нужно знать полный URL-адрес все время
mgonto
3
Хорошо, но односторонний. Возможная «нерелевантность» Restangular была предложена в этой теме в связи с недавними улучшениями $resource- я не имею в виду, что это станет неактуальным каким-либо образом, просто это было упомянуто. Какие-нибудь фактические недостатки или ошибки, о которых мы должны знать?
youri
3
Не много ли в этом README устаревшей более новой версии ngresource? (т.е. использование обещаний, оформление объекта ответа через transformResponse)
surtyaar
8

Я обнаружил, что Restign RequestInterceptor весьма удобен для удаления некоторых полей из объекта перед выполнением запроса. Большинство веб-сервисов REST, с которыми я сейчас работаю, не ожидают идентификатор в данных объекта в запросе PUT, например, только в URL. Как правило, они не ожидают дополнительных полей данных, которые не могут быть обновлены PUT (например, идентификатор или слаг, который создается путем установки заголовка и т. Д.). Я обнаружил, что это просто с Restangular, хотя я не понял, как сделать это с помощью $ resource, но я уверен, что это возможно как-то.

Очевидно, можно также изменить веб-сервис, чтобы просто игнорировать эти дополнительные поля, но это не всегда возможно.

awdng
источник
3

ngResource не возвращает обещания в последней стабильной версии (в настоящее время 1.0.6). Кроме того, похоже, что Restangular выставляет больше глаголов, чем ngResource (оно выставляет PUT, OPTIONS, PATCH и т. Д.).

Если вам не нужны дополнительные глаголы и они находятся в нестабильной ветке AngularJS (которая включает в себя обещания для ngResource), я не вижу какой-либо серьезной причины использовать Restangular над ngResource.

Используйте то, что вам удобно.

rtcherry
источник
2
1.1.3 $resourceбудет возвращать обещания и может быть реализовано с использованием последнего PR-коммита. stackoverflow.com/questions/16429832/… Будет ли предложена будущая поддержка для $resourceподдержки дополнительных глаголов? И если это произойдет, то Restangular кажется, что оно исчезнет и станет неактуальным.
Дан Канзе
@DanKanze Я не уверен в будущей поддержке дополнительных глаголов. Для большинства случаев использования дополнительные глаголы не нужны, поэтому я не ожидаю, что они будут созданы в ближайшее время, но это не значит, что этого не произойдет.
rtcherry
2
@DanKanze - я сомневаюсь, что это станет неактуальным. Restangular обеспечивает гораздо лучшую поддержку для вложенных ресурсов, что является обязательным требованием для некоторых разработчиков. То, что Ng-ресурс не поддерживает особенно хорошо. Кроме того, ng-ресурс также не следует соглашениям RESTful, о чем я говорил в своем блоге.
Оддман
Хороший комментарий @Oddman о вложенных ресурсах, особенно полезный для бэкэндов Rails.
ardochhigh
1

В качестве ответа на приведенные выше ответы и для новых читателей, таких как я, интересующихся этими мыслями:

«И если это произойдет, то Restangular кажется, что оно исчезнет и станет нерелевантным».

«Что произойдет через три месяца, когда этот парень откажется от поддержки Restangular, потому что Google ngResource догнал все функции, которые ему не хватало».

  • [ спросил 2 года назад ]

По моему мнению, единственной гарантией выживания библиотеки с открытым исходным кодом является сообщество, построенное вокруг нее. лучшим примером будет mariaDB и WebScaleSQL, которые оба были рождены как растущая ветвь великолепной системы управления реляционными базами данных MySQL.

В это время записи Restangular having 6699 stars and 727 forksтеперь продвигается к Restangular 2.0, которое предназначено для поддержки angularJs 2.0 и ES6.

Салем Урдани
источник
0

Для быстрого простого веб-сайта, который вы хотите запустить навсегда при минимальной поддержке, я бы использовал встроенный угловой http HttpClient, кто бы ни работал, когда я работаю над проектом, который мне нравится, и я наслаждаюсь и пытаюсь использовать все классные технологии, тогда Я буду использовать Ngx-Restangular

Также вы должны знать, что ngx-restangular работает с сервисами RESTful только в соответствии с его именем. Поэтому для сервисов, которые предоставляют SOAP, вы не сможете использовать Ngx-Restangular.

https://ngx-restangular.com/

При этом я буду использовать ngx-restangular большую часть времени, так как я всегда стараюсь работать над проектом, который я нахожу классным, и пытаюсь реализовать то, что я считаю лучшим.

Удачи!

Нур Лабабиди
источник