SlideShare a Scribd company logo
1 of 27
Download to read offline
Angular Restmod
wygodny sposób na komunikację z API
Marcin Gajda
Front-End developer
The Software house
Angular Restmod?
● implementuje Active Record
● mapuje dane z REST API na modele
● pozwala korzystać z kolekcji modeli
● automatyzuje tworzenie relacji
REST API – bezstanowy interfejs programistyczny
oparty o model klient - serwer i protokół HTTP.
Relacje?
● zależności między obiektami
● obsługa “1 do 1” oraz “1 do n”
● wsparcie dla modeli “inline”
● automatyczne rzutowanie na typ
● generowanie adresów API
Konfiguracja Restmoda
● system wstawek
● wstawka może składać się z:
○ ogólnej konfiguracji ($config)
○ uchwytów zdarzeń ($hooks)
○ rozszerzeń ($extend)
○ ustawień dla atrybutów
● podział na:
○ konfiguracja globalna
○ konfiguracja “per definicja”
Ogólne ustawienia ($config)
Pozwala na ustawienie m.in:
● nazwy klucza głównego
● źródła metadanych
● głównego adresu API
wow such configurable
Hooki ($hooks)
● niczym Angular interceptors
● pozwalają:
○ modyfikować żądanie przed wysłaniem
○ zmieniać w locie odpowiedź
○ sterować parsowaniem odpowiedzi
○ globalnie reagować na błędy API
Duża ilość do wyboru
● before-create
● after-create
● after-create-error
● before-save
● after-save
● after-save-error
● before-update
● after-update
● after-update-error
● before-destroy
● after-destroy
● after-destroy-error
● before-request
● after-request
● after-request-error
● before-fetch
● before-fetch-many
● after-feed
● after-feed-error
● after-fetch-many
● after-fetch-many-error
● after-init
● after-remove
● before-render
Rozszerzenia ($extend)
● nadpisywanie metod Restmoda
● dodawanie nowych metod
○ do statycznego interfejsu
○ dla modeli
○ dla kolekcji
Sterowanie atrybutami
● wartości domyślne
● maskowanie atrybutów
● ustawienia (de)serializacji
● konfiguracja relacji
Może przykład?
Przykładowy scenariusz
● API udostępnia:
○ informacje o muzykach
○ informacje o płytach
● Dodatkowo można:
○ osobno pobrać historię zespołu
○ szukać artystów po nazwach
● API wymaga tokenu
Globalna konfiguracja
module.config(['restmodProvider',
function (restmodProvider) {
restmodProvider.rebase("MyAPIStyle");
restmodProvider.rebase({ ... })
}
]);
Api Style - globalna konfiguracja która
dostosowuje modele do stylu API
Piszemy API Style:
module.factory('MyAPIStyle', function (restmod) {
return restmod.mixin('DefaultPacker', {
$config: {
primaryKey: "id",
jsonMeta: "meta"
},
$extend: {...}, $hooks: {...}, ...
});
})
Ustawiamy token autoryzacyjny
module.config(['restmodProvider',
function (restmodProvider) {
restmodProvider.rebase({
$hooks: {
'before-request': function (request) {
request.headers["X-Token"] = TOKEN;
return request;
}
}
});
});
})
Rzut oka na /artists
{
artist: {
id: 1,
name: "Django Reinhardt",
image: "/img/reinhardt.png",
tags: [
{value: "guitar"},
{value: "jazz"}
]
},
meta: {...}
}/img/reinhardt.png
GET: /artists/1
Tworzymy definicję modelu Artist
module.factory(‘ArtistModel’, function (restmod) {
restmod.model('/artists')
.mix({
$hooks: {...},
$extend: {...},
$config: {name: 'artist'},
// ...
});
});
Podstawy korzystania z modelu
var django = ModelArtist.$find(1);
// GET: /artists/1
django.$then(function(model){
console.log( model.image );
// > "/img/reinhardt.png"
});
Tworzymy nowy wpis w API...
var newBand = ModelArtist.$create({
name: "Flogging Molly"
});
// POST: /artists
… i potem go edytujemy
newBand.image = "/img/shamrock.jpg";
newBand.$save(); // PUT
newBand.$save(["image"]); // PATCH
Pobieramy kolekcję modeli...
var bands = ModelArtist.$collection();
bands.$fetch();
// GET: /artists
… lub tylko jej fragment
bands = ModelArtist.$search({
name: "Stevie"
}).$refresh();
// GET: /artists?name=Stevie
Dodajemy metodę do modelu...
module.factory("ArtistModel", function (restmod) {
restmod.model('/artists').mix({
$extend: {
Record: {
getImagePath: function(){
return API_PATH + this.image;
}
}
},
$config: {...}, $hooks: {...}, ...
});
});
… i korzystamy z niej
var image = newBand.getImagePath();
// https://localhost/api/img/shamrock.jpg
Oprócz interfejsu Record można także
rozszerzać intrfejsy List, Scope, Static i inne.
Konfigurujemy atrybuty
module.factory(‘ArtistModel’, function (restmod) {
restmod.model('/artists').mix({
image: { init: "/img/default.png" },
albums: { hasMany: "AlbumModel" },
history: { hasOne: "HistoryModel" },
tags: { hasMany: "TagModel" },
$hooks: {...}, $extend: {...}, $config: {...}
});
});
Wykorzystujemy relacje
var albums = django.albums.$fetch();
// GET: /artists/1/albums
var history = django.history.$fetch();
// GET: /artists/1/history
var tags = django.tags;
Zakładając, że zdefiniowaliśmy TagModel, HistoryModel, AlbumModel:
Podsumowanie - wady
● niedopowiedzenia i błędy w dokumentacji
● modele są zawsze związane z kolekcją
● brak wbudowanych metod hurtowych
● tylko jedno wbudowane API style
Podsumowanie - zalety
● sporo możliwości konfiguracyjnych
● wpływ na przebieg działania modułu
● możliwość używania z każdym REST API
● dobrze współpracuje z formularzami
● wsparcie dla relacji
Pytania?
marcin.gajda@tsh.io

More Related Content

What's hot

Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktycePHPstokPHPstok
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreSages
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJSSages
 
Objective C
Objective CObjective C
Objective Ckonryd
 
Functional widgets in Rails
Functional widgets in RailsFunctional widgets in Rails
Functional widgets in RailsSebastian Sito
 
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyJavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyRafal Piekarski
 
Architektura ngrx w angular 2+
Architektura ngrx w angular 2+Architektura ngrx w angular 2+
Architektura ngrx w angular 2+Paweł Żurowski
 

What's hot (12)

Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktyce
 
Php P.Jar
Php P.JarPhp P.Jar
Php P.Jar
 
Prezentacja php3
Prezentacja   php3Prezentacja   php3
Prezentacja php3
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Objective C
Objective CObjective C
Objective C
 
Jak działa CPython
Jak działa CPythonJak działa CPython
Jak działa CPython
 
Functional widgets in Rails
Functional widgets in RailsFunctional widgets in Rails
Functional widgets in Rails
 
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyJavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
 
NSOperation(Queue)
NSOperation(Queue) NSOperation(Queue)
NSOperation(Queue)
 
Architektura ngrx w angular 2+
Architektura ngrx w angular 2+Architektura ngrx w angular 2+
Architektura ngrx w angular 2+
 

Similar to Angular Restmod

Angular restmod – wygodny sposób na komunikację z API
Angular restmod – wygodny sposób na komunikację z APIAngular restmod – wygodny sposób na komunikację z API
Angular restmod – wygodny sposób na komunikację z APIThe Software House
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPPiotr Gabryjeluk
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaMaciej Ziarko
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
NK API - Przykłady
NK API - PrzykładyNK API - Przykłady
NK API - Przykładynasza-klasa
 
ASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założeniaASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założeniaBartlomiej Zass
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresLexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresBrainhub
 
Budowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOASBudowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOASMateusz Stępniak
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptJacek Okrojek
 
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...Tomasz Kopacz
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.jsPatryk Jar
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoTomasz Dziuda
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
 
Single Page Applications with CoffeeScript [Polish]
Single Page Applications with CoffeeScript [Polish]Single Page Applications with CoffeeScript [Polish]
Single Page Applications with CoffeeScript [Polish]Andrzej Krzywda
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API3camp
 

Similar to Angular Restmod (20)

Angular restmod – wygodny sposób na komunikację z API
Angular restmod – wygodny sposób na komunikację z APIAngular restmod – wygodny sposób na komunikację z API
Angular restmod – wygodny sposób na komunikację z API
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHP
 
Android i REST
Android i RESTAndroid i REST
Android i REST
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
NK API - Przykłady
NK API - PrzykładyNK API - Przykłady
NK API - Przykłady
 
ASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założeniaASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założenia
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresLexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closures
 
Budowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOASBudowa RESTowego api w oparciu o HATEOAS
Budowa RESTowego api w oparciu o HATEOAS
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
 
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp Trójmiasto
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 
Single Page Applications with CoffeeScript [Polish]
Single Page Applications with CoffeeScript [Polish]Single Page Applications with CoffeeScript [Polish]
Single Page Applications with CoffeeScript [Polish]
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API
 

More from Marcin Gajda

CSS Houdini – niskopoziomowe programowanie w przeglądarce
CSS Houdini – niskopoziomowe programowanie w przeglądarceCSS Houdini – niskopoziomowe programowanie w przeglądarce
CSS Houdini – niskopoziomowe programowanie w przeglądarceMarcin Gajda
 
Worklety i magiczne interfejsy z przyszłości
Worklety i magiczne interfejsy z przyszłościWorklety i magiczne interfejsy z przyszłości
Worklety i magiczne interfejsy z przyszłościMarcin Gajda
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun againMarcin Gajda
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaMarcin Gajda
 
Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?Marcin Gajda
 
Flexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełekFlexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełekMarcin Gajda
 
Angular Restmod (english version)
Angular Restmod (english version)Angular Restmod (english version)
Angular Restmod (english version)Marcin Gajda
 

More from Marcin Gajda (7)

CSS Houdini – niskopoziomowe programowanie w przeglądarce
CSS Houdini – niskopoziomowe programowanie w przeglądarceCSS Houdini – niskopoziomowe programowanie w przeglądarce
CSS Houdini – niskopoziomowe programowanie w przeglądarce
 
Worklety i magiczne interfejsy z przyszłości
Worklety i magiczne interfejsy z przyszłościWorklety i magiczne interfejsy z przyszłości
Worklety i magiczne interfejsy z przyszłości
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
 
Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?
 
Flexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełekFlexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełek
 
Angular Restmod (english version)
Angular Restmod (english version)Angular Restmod (english version)
Angular Restmod (english version)
 

Angular Restmod

  • 1. Angular Restmod wygodny sposób na komunikację z API Marcin Gajda Front-End developer The Software house
  • 2. Angular Restmod? ● implementuje Active Record ● mapuje dane z REST API na modele ● pozwala korzystać z kolekcji modeli ● automatyzuje tworzenie relacji REST API – bezstanowy interfejs programistyczny oparty o model klient - serwer i protokół HTTP.
  • 3. Relacje? ● zależności między obiektami ● obsługa “1 do 1” oraz “1 do n” ● wsparcie dla modeli “inline” ● automatyczne rzutowanie na typ ● generowanie adresów API
  • 4. Konfiguracja Restmoda ● system wstawek ● wstawka może składać się z: ○ ogólnej konfiguracji ($config) ○ uchwytów zdarzeń ($hooks) ○ rozszerzeń ($extend) ○ ustawień dla atrybutów ● podział na: ○ konfiguracja globalna ○ konfiguracja “per definicja”
  • 5. Ogólne ustawienia ($config) Pozwala na ustawienie m.in: ● nazwy klucza głównego ● źródła metadanych ● głównego adresu API wow such configurable
  • 6. Hooki ($hooks) ● niczym Angular interceptors ● pozwalają: ○ modyfikować żądanie przed wysłaniem ○ zmieniać w locie odpowiedź ○ sterować parsowaniem odpowiedzi ○ globalnie reagować na błędy API
  • 7. Duża ilość do wyboru ● before-create ● after-create ● after-create-error ● before-save ● after-save ● after-save-error ● before-update ● after-update ● after-update-error ● before-destroy ● after-destroy ● after-destroy-error ● before-request ● after-request ● after-request-error ● before-fetch ● before-fetch-many ● after-feed ● after-feed-error ● after-fetch-many ● after-fetch-many-error ● after-init ● after-remove ● before-render
  • 8. Rozszerzenia ($extend) ● nadpisywanie metod Restmoda ● dodawanie nowych metod ○ do statycznego interfejsu ○ dla modeli ○ dla kolekcji
  • 9. Sterowanie atrybutami ● wartości domyślne ● maskowanie atrybutów ● ustawienia (de)serializacji ● konfiguracja relacji Może przykład?
  • 10. Przykładowy scenariusz ● API udostępnia: ○ informacje o muzykach ○ informacje o płytach ● Dodatkowo można: ○ osobno pobrać historię zespołu ○ szukać artystów po nazwach ● API wymaga tokenu
  • 11. Globalna konfiguracja module.config(['restmodProvider', function (restmodProvider) { restmodProvider.rebase("MyAPIStyle"); restmodProvider.rebase({ ... }) } ]); Api Style - globalna konfiguracja która dostosowuje modele do stylu API
  • 12. Piszemy API Style: module.factory('MyAPIStyle', function (restmod) { return restmod.mixin('DefaultPacker', { $config: { primaryKey: "id", jsonMeta: "meta" }, $extend: {...}, $hooks: {...}, ... }); })
  • 13. Ustawiamy token autoryzacyjny module.config(['restmodProvider', function (restmodProvider) { restmodProvider.rebase({ $hooks: { 'before-request': function (request) { request.headers["X-Token"] = TOKEN; return request; } } }); }); })
  • 14. Rzut oka na /artists { artist: { id: 1, name: "Django Reinhardt", image: "/img/reinhardt.png", tags: [ {value: "guitar"}, {value: "jazz"} ] }, meta: {...} }/img/reinhardt.png GET: /artists/1
  • 15. Tworzymy definicję modelu Artist module.factory(‘ArtistModel’, function (restmod) { restmod.model('/artists') .mix({ $hooks: {...}, $extend: {...}, $config: {name: 'artist'}, // ... }); });
  • 16. Podstawy korzystania z modelu var django = ModelArtist.$find(1); // GET: /artists/1 django.$then(function(model){ console.log( model.image ); // > "/img/reinhardt.png" });
  • 17. Tworzymy nowy wpis w API... var newBand = ModelArtist.$create({ name: "Flogging Molly" }); // POST: /artists
  • 18. … i potem go edytujemy newBand.image = "/img/shamrock.jpg"; newBand.$save(); // PUT newBand.$save(["image"]); // PATCH
  • 19. Pobieramy kolekcję modeli... var bands = ModelArtist.$collection(); bands.$fetch(); // GET: /artists
  • 20. … lub tylko jej fragment bands = ModelArtist.$search({ name: "Stevie" }).$refresh(); // GET: /artists?name=Stevie
  • 21. Dodajemy metodę do modelu... module.factory("ArtistModel", function (restmod) { restmod.model('/artists').mix({ $extend: { Record: { getImagePath: function(){ return API_PATH + this.image; } } }, $config: {...}, $hooks: {...}, ... }); });
  • 22. … i korzystamy z niej var image = newBand.getImagePath(); // https://localhost/api/img/shamrock.jpg Oprócz interfejsu Record można także rozszerzać intrfejsy List, Scope, Static i inne.
  • 23. Konfigurujemy atrybuty module.factory(‘ArtistModel’, function (restmod) { restmod.model('/artists').mix({ image: { init: "/img/default.png" }, albums: { hasMany: "AlbumModel" }, history: { hasOne: "HistoryModel" }, tags: { hasMany: "TagModel" }, $hooks: {...}, $extend: {...}, $config: {...} }); });
  • 24. Wykorzystujemy relacje var albums = django.albums.$fetch(); // GET: /artists/1/albums var history = django.history.$fetch(); // GET: /artists/1/history var tags = django.tags; Zakładając, że zdefiniowaliśmy TagModel, HistoryModel, AlbumModel:
  • 25. Podsumowanie - wady ● niedopowiedzenia i błędy w dokumentacji ● modele są zawsze związane z kolekcją ● brak wbudowanych metod hurtowych ● tylko jedno wbudowane API style
  • 26. Podsumowanie - zalety ● sporo możliwości konfiguracyjnych ● wpływ na przebieg działania modułu ● możliwość używania z każdym REST API ● dobrze współpracuje z formularzami ● wsparcie dla relacji