Яка перевага використання Restangular над ngResource?


133

ngResourceвже здається дійсно простим втілити речі за допомогою ...

Які переваги / недоліки використання переустановки над ngResource ?

1.1.3 $resourceповерне обіцянки та може бути дотримано за допомогою останніх зобов'язань щодо PR . Чи буде запропонована майбутня підтримка $resourceдля підтримки додаткових дієслів, які робить Restangular? І якщо це станеться, Restangular здається, що він зникне і стане непотрібним.


41
Навіщо закривати? Це справедливе запитання, на яке повинні бути остаточні відповіді. Особливо так рано в грі, коли ви намагаєтеся вирішити, що використовувати для своїх службових дзвінків. Що трапляється через три місяці, коли цей хлопець припиняє підтримку Restangular, оскільки ngResource Google охопив усі функції, яких у нього не було. Тоді, якщо $httpдо angularjs внесені основні зміни випуску, - ви не зможете оновити, тому що дзвінки служби Restangualr очікують "щось інше", і ви в кінцевому підсумку вичерпаєте цю рамку, з якою ви "вирішили піти".
Dan Kanze

1
Перевірте їх тут github.com/mgonto/restangular/blob/master/…
mgonto

@DanKanze: Користувачі середнього рівня SO дуже задоволені подібними питаннями. Це насправді засмучує, оскільки ти точно не питаєш "що краще" ... Єдиною моєю пропозицією було б ретельно формулювати питання в майбутньому, щоб не спокусити "Суб'єктивне гестапо" зійти на тебе з усієї сили.
rinogo

Відповіді:


232

Я творець Restangular.

Я створив розділ README з різницею проти $ ресурсу. Ви можете перевірити їх тут https://github.com/mgonto/restangular/blob/master/README.md#differences-with-resource

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

Припустимо, у вас є щось подібне для автомобілів: / користувачів / 123 / автомобілі / 456

У $ resource вам доведеться створити цю URL-адресу вручну, а також потрібно створити об’єкт $ resource для цього вручну. Перемонтажна допоможе вам у цьому, "запам'ятавши" 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')

Сподіваюся, це допомагає!


45
+1 за те, що ви заскочили на це. Кому краще пояснити тоді хлопець, який сам це збудував ха-ха!
Dan Kanze

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

Я знайшов RequestInterceptor Restangular досить зручним для видалення деяких полів з об'єкта перед тим, як зробити Запит. Більшість веб-сервісів REST, з якими я зараз працюю, не сподівайтеся на ідентифікатор в даних об’єкта в запиті PUT, наприклад, просто в URL-адресі. Як правило, вони не очікують додаткових полів даних, які не можуть бути оновлені PUT (наприклад, ідентифікатор, або слиз, який генерується встановленням заголовка тощо). Я виявив, що це просто зрозуміло з Restangular, поки я не зрозумів, як це зробити з $ ресурсом чисто, але я впевнений, що це можливо якось.

Очевидно, можна також змінити веб-сервіс, щоб просто ігнорувати ці зайві поля, але це не завжди можливо.


3

ngResource не повертає обіцянок в останньому стабільному випуску (наразі 1.0.6). Крім того, схоже, що Restangular розкриває більше дієслів, ніж ngResource (він відкриває PUT, OPTIONS, PATCH тощо).

Якщо вам не потрібні додаткові дієслова і ви знаходитесь у нестабільній гілці AngularJS (що включає обіцянки для ngResource), я не бачу жодної основної причини використовувати перезапуск через ngResource.

Використовуйте все, що вам зручніше.


2
1.1.3 $resourceповерне обіцянки та може бути дотримано за допомогою останніх зобов'язань щодо PR. stackoverflow.com/questions/16429832/… Чи буде надана $resourceпідтримка для підтримки додаткових дієслів? І якщо це станеться, Restangular здається, що він зникне і стане непотрібним.
Dan Kanze

@DanKanze Я не впевнений у майбутній підтримці додаткових дієслів. У більшості випадків використання додаткові дієслова не потрібні, тому я не очікував, що він буде побудований найближчим часом, але це не означає, що це не відбудеться.
rtcherry

2
@DanKanze - я сумніваюся, що це стане неактуальним. Restangular забезпечує набагато кращу підтримку вкладених ресурсів, що є вимогою для деяких розробників. Щось, що Ng-ресурс не підтримує особливо добре. Крім того, ng-ресурс також не дотримується умов RESTful, про що я говорив у своєму блозі.
Оддман

@Oddman хороший момент щодо вкладених ресурсів, особливо корисних для Rails backends.
ardochhigh

1

Далі до вищенаведених відповідей та для нових читачів, як я, зацікавлені ці думки:

"І якщо це станеться, Restangular здається, що він зникне і стане непотрібним".

"Що трапляється через три місяці, коли цей хлопець припиняє підтримку Restangular, тому що ngResource Google охопив усі функції, яких у нього не було".

  • [ запитав 2 роки тому ]

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

В цей час Restangular having 6699 stars and 727 forksзараз рухається вперед до Restangular 2.0, який призначений для підтримки angularJs 2.0 та ES6.


0

Для швидкого простого веб-сайту, який ви хочете вічно запускати з мінімальною підтримкою, я б використовував вбудований кутовий http HttpClient, хто б не працював над проектом, який мені подобається, і мені подобається, і тоді я намагаюся використовувати всі класні технології Я буду використовувати Ngx-Restangular

Крім того, ви повинні знати, що ngx-переустановка працює лише з послугами RESTful, як підказує назва. Тож для сервісів, які надають SOAP, ви не зможете використовувати Ngx-Restangular

https://ngx-restangular.com/

Це було сказано, що я б найбільше часу використовував ngx-restangular, оскільки я завжди намагаюся працювати над проектом, який мені здається здоровим, і намагаюся реалізувати те, що я вважаю найкращим.

Удачі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.