SlideShare a Scribd company logo
EMBER DATA AND CUSTOM
APIS
DAVID TANG
OVERVIEW
▸ Adapters vs Serializers
▸ Built-in Adapters
▸ Common Adapter Customizations
▸ Built-in Serializers
▸ Common Serializer Customizations
▸ Testing it all
SERIALIZERS
ADAPTERS
TRANSFORMS
MODELS
IDENTITY MAPPING
REST SERIALIZER
JSON SERIALIZER
JSON API SERIALIZER
ACTIVE MODEL ADAPTER
REST ADAPTER
¯_(ツ)_/¯
STORE
SNAPSHOTS
EMBER DATA OVERVIEW
PERSISTENCE LAYER
ADAPTER (ADAPTER PATTERN)
SERIALIZER
STORE
Communicating with
persistence layer
Format data to and
from persistence layer
Data store (models)
Server, localStorage,
Firebase, Parse, etc
ADAPTERS
PERSISTENCE LAYER
ADAPTER (ADAPTER PATTERN)
SERIALIZER
STORE
Communicating with
persistence layer
Format data to and
from persistence layer
Data store (models)
Server, localStorage,
Firebase, Parse, etc
JSON-API
DS.JSONAPIAdapter
REST
DS.RESTAdapter
Base Adapter
DS.Adapter
BUILT-IN ADAPTERS
COMMON
ADAPTER
CUSTOMIZATIONS
COMMON ADAPTER CUSTOMIZATIONS
HOST AND NAMESPACE
import ENV from 'mycatapp/config/environment';
// app/adapters/application.js
export default DS.RESTAdapter.extend({
host: ENV.APP.apiEndpoint,
namespace: 'api/v1'
});
COMMON ADAPTER CUSTOMIZATIONS
PATH FOR TYPE
export default ApplicationAdapter.extend({
pathForType(modelName) {
return Ember.String.pluralize(modelName);
}
});
POST /api/usersPOST /api/user
GET /api/videoGamesGET /api/video-games
YOUR API EMBER
COMMON ADAPTER CUSTOMIZATIONS
CUSTOMIZING THE URL
▸ urlForCreateRecord
▸ urlForDeleteRecord
▸ urlForFindAll
▸ urlForFindRecord
▸ urlForQuery
▸ urlForQueryRecord
▸ urlForUpdateRecord
SERIALIZERS
PERSISTENCE LAYER
ADAPTER (ADAPTER PATTERN)
SERIALIZER
STORE
Communicating with
persistence layer
Format data to and
from persistence layer
Data store (models)
Server, localStorage,
Firebase, Parse, etc
JSON-API
DS.JSONAPISerializer
JSON
DS.JSONSerializer
REST
DS.RESTSerializer
Base Serializer
DS.Serializer
BUILT-IN SERIALIZERS
JSON
SERIALIZER
JSON SERIALIZER
PAYLOADS AND RESPONSES
{ "id": 1, "name": "David Tang" }
[
{ "id": 2, "name": "Michael Westen" },
{ "id": 3, "name": "Fiona Glenanne" }
]
GET /api/users
GET /api/users/1
JSON SERIALIZER
RELATIONSHIPS
{
"id": 99,
"name": "David Tang",
"pets": [ 1, 2, 3 ],
"company": 7
}
REST
SERIALIZER
REST SERIALIZER
PAYLOADS AND RESPONSES
{
"user": {
"id": 1,
"name": "David Tang",
"pets": [ 1, 2, 3 ],
"company": 7
}
}
GET /api/users/1
REST SERIALIZER
PAYLOADS AND RESPONSES
{
"users": [
{ "id": 1, "name": "Steve McGarret" },
{ "id": 2, "name": "Danny Williams" }
]
}
GET /api/users
REST SERIALIZER
RELATIONSHIPS AND SIDELOADING
{
"user": {
"id": 1, "name": "David Tang", "company": 7
},
"companies": [
{ "id": 7, "name": "Company A" }
]
}
GET /api/users/1
JSON-API
SERIALIZERhttp://thejsguy.com/2015/12/05/which-ember-data-serializer-should-i-use.html
COMMON
SERIALIZER
CUSTOMIZATIONS
Tip: Extend a serializer
that matches your API as
close as possible
COMMON SERIALIZER CUSTOMIZATIONS
NORMALIZING RESPONSES
{
"data": [
{ "id": 1, "name": "Tubby" },
{ "id": 2, "name": "Frisky" },
{ "id": 3, "name": "Tabitha" }
]
}
GET /api/cats
COMMON SERIALIZER CUSTOMIZATIONS
NORMALIZING RESPONSES
// app/serializers/cat.js
export default DS.RESTSerializer.extend({
normalizeResponse(a, b, payload, c, d) {
payload = { cats: payload.data };
return this._super(a, b, payload, c, d);
}
});
COMMON SERIALIZER CUSTOMIZATIONS
NORMALIZING RESPONSES
// app/serializers/cat.js
export default DS.JSONSerializer.extend({
normalizeResponse(a, b, payload, c, d) {
payload = payload.data;
return this._super(a, b, payload, c, d);
}
});
COMMON SERIALIZER CUSTOMIZATIONS
NORMALIZING BY STORE CALL
▸ normalizeCreateRecordResponse
▸ normalizeDeleteRecordResponse
▸ normalizeFindAllResponse
▸ normalizeFindHasManyResponse
▸ normalizeFindRecordResponse
▸ normalizeQueryRecordResponse
▸ normalizeQueryResponse
COMMON SERIALIZER CUSTOMIZATIONS
attrs
// app/serializers/cat.js
export default DS.RESTSerializer.extend({
attrs: {
firstName: 'first_name',
age: 'years'
}
});
{ "id": 1, "first_name": "Tubby", "years": 4 }
COMMON SERIALIZER CUSTOMIZATIONS
RELATIONSHIP ATTRIBUTES
// app/serializers/application.js
export default DS.RESTSerializer.extend({
keyForRelationship(key, relationship) {
if (relationship === 'belongsTo') {
return `${key}_id`;
}
}
});
{ "id": 1, "home_id": 3, "owner_id": 2 }
COMMON SERIALIZER CUSTOMIZATIONS
EMBEDDED RECORDS
{
"id": 5,
"name": "David Tang",
"skills": [
{ "id": 2, "name": "JavaScript" },
{ "id": 9, "name": "Ember" }
]
}
COMMON SERIALIZER CUSTOMIZATIONS
EMBEDDED RECORDS
// app/serializers/user.js
let Mixin = DS.EmbeddedRecordsMixin;
export default DS.JSONSerializer.extend(Mixin, {
attrs: {
skills: { embedded: 'always' }
}
});
COMMON SERIALIZER CUSTOMIZATIONS
SETTING THE PRIMARY KEY
// app/serializers/user.js
export default DS.RESTSerializer.extend({
primaryKey: 'socialSecurityNumber'
});
COMMON SERIALIZER CUSTOMIZATIONS
SERIALIZING DATA ON SAVE
// app/serializers/user.js
export default DS.RESTSerializer.extend({
serialize(snapshot) {
return [
{ name: snapshot.attr('name') }
];
}
});
COMMON SERIALIZER CUSTOMIZATIONS
DS.SNAPSHOT
// snapshot for a user model
snapshot.id;
snapshot.attr('name')
snapshot.hasMany('interests') // interestsSnapshot
snapshot.belongsTo('company') // companySnapshot
TESTING
IT ALL
TESTING
THE DEFAULT SERIALIZER TEST
import { moduleForModel, test } from 'ember-qunit';
moduleForModel('cat', 'Unit | Serializer | cat', {
needs: ['serializer:cat']
});
test('it serializes records', function(assert) {
var record = this.subject();
var serializedRecord = record.serialize();
assert.ok(serializedRecord);
});
TESTING
1. moduleFor() INSTEAD OF moduleForModel()
import { moduleFor, test } from 'ember-qunit';
moduleFor(
'serializer:cat', 'Unit | Serializer | cat', {}
);
test('it serializes records', function(assert) {
let serializer = this.subject();
});
TESTING
2. USE THE STORE
Test serializers and
adapters through the
store with an HTTP
mocking library
TESTING
TESTING WITH THE STORE - 1. SETUP
moduleForModel('cat', 'Unit | Serializer | cat', {
needs: [ 'serializer:cat', 'adapter:cat' ],
beforeEach() {
// next slide
},
afterEach() {
// next slide
}
});
TESTING
TESTING WITH THE STORE - 2. PRETENDER
// beforeEach()
this.server = new Pretender(function() {
this.get('/api/cats', function() {
let response = JSON.stringify(/* data */);
return [ 200, {}, response ];
});
});
this.server.shutdown(); // afterEach()
TESTING
TESTING WITH THE STORE - 3. THE TEST
test('array responses', function(assert) {
let store = this.store();
return store.findAll('cat').then((cats) => {
assert.equal(cats.get('length'), 3);
});
});
TESTING
TESTING THE DATA YOUR SERVER RECEIVES
// app/serializers/cat.js
export default DS.RESTSerializer.extend({
serialize(snapshot) {
/* implementation */
}
});
TESTING
TESTING THE DATA YOUR SERVER RECEIVES
let [ request ] = this.server.handledRequests;
let body = request.requestBody;
let requestPayload = JSON.parse(body);
let expectedJSON = /* JSON */;
assert.deepEqual(requestPayload, expectedJSON);
EMBER DATA RESOURCES
▸ Introduction to Ember Data 2.0 by Christoffer Persson
▸ My Blog - thejsguy.com
▸ Ember Data and Custom APIs - 5 Common Serializer
Customizations
▸ Which Ember Data Serializer Should I Use?
▸ Working with Nested Data in Ember Data Models
▸ Handling Errors with Ember Data
THANKS!THEJSGUY.COM
@SKATERDAV85

More Related Content

What's hot

Py.test
Py.testPy.test
Py.test
soasme
 
Effective testing with pytest
Effective testing with pytestEffective testing with pytest
Effective testing with pytest
Hector Canto
 
Mozilla Web QA - Evolution of our Python WebDriver framework
Mozilla Web QA - Evolution of our Python WebDriver frameworkMozilla Web QA - Evolution of our Python WebDriver framework
Mozilla Web QA - Evolution of our Python WebDriver framework
davehunt82
 
APIs and Synthetic Biology
APIs and Synthetic BiologyAPIs and Synthetic Biology
APIs and Synthetic Biology
Uri Laserson
 
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalksSelenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Lohika_Odessa_TechTalks
 
Puppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitPuppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction Kit
Alessandro Franceschi
 
Isolated development in python
Isolated development in pythonIsolated development in python
Isolated development in python
Andrés J. Díaz
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
gturnquist
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
Puppet
 
Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015
Sven Ruppert
 
HTTP and Your Angry Dog
HTTP and Your Angry DogHTTP and Your Angry Dog
HTTP and Your Angry Dog
Ross Tuck
 
Puppet: What _not_ to do
Puppet: What _not_ to doPuppet: What _not_ to do
Puppet: What _not_ to do
Puppet
 
Python - Getting to the Essence - Points.com - Dave Park
Python - Getting to the Essence - Points.com - Dave ParkPython - Getting to the Essence - Points.com - Dave Park
Python - Getting to the Essence - Points.com - Dave Park
pointstechgeeks
 
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Robert Nelson
 
Why you should be using the shiny new C# 6.0 features now!
Why you should be using the shiny new C# 6.0 features now!Why you should be using the shiny new C# 6.0 features now!
Why you should be using the shiny new C# 6.0 features now!
Eric Phan
 
Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
Puppet
 
RSpec 2 Best practices
RSpec 2 Best practicesRSpec 2 Best practices
RSpec 2 Best practices
Andrea Reginato
 
Intro to Terraform
Intro to TerraformIntro to Terraform
Intro to Terraform
Josh Michielsen
 
Orleankka Intro Circa 2015
Orleankka Intro Circa 2015Orleankka Intro Circa 2015
Orleankka Intro Circa 2015
Yevhen Bobrov
 
Metadata-driven Testing
Metadata-driven TestingMetadata-driven Testing
Metadata-driven Testing
Workhorse Computing
 

What's hot (20)

Py.test
Py.testPy.test
Py.test
 
Effective testing with pytest
Effective testing with pytestEffective testing with pytest
Effective testing with pytest
 
Mozilla Web QA - Evolution of our Python WebDriver framework
Mozilla Web QA - Evolution of our Python WebDriver frameworkMozilla Web QA - Evolution of our Python WebDriver framework
Mozilla Web QA - Evolution of our Python WebDriver framework
 
APIs and Synthetic Biology
APIs and Synthetic BiologyAPIs and Synthetic Biology
APIs and Synthetic Biology
 
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalksSelenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
 
Puppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitPuppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction Kit
 
Isolated development in python
Isolated development in pythonIsolated development in python
Isolated development in python
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015
 
HTTP and Your Angry Dog
HTTP and Your Angry DogHTTP and Your Angry Dog
HTTP and Your Angry Dog
 
Puppet: What _not_ to do
Puppet: What _not_ to doPuppet: What _not_ to do
Puppet: What _not_ to do
 
Python - Getting to the Essence - Points.com - Dave Park
Python - Getting to the Essence - Points.com - Dave ParkPython - Getting to the Essence - Points.com - Dave Park
Python - Getting to the Essence - Points.com - Dave Park
 
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
 
Why you should be using the shiny new C# 6.0 features now!
Why you should be using the shiny new C# 6.0 features now!Why you should be using the shiny new C# 6.0 features now!
Why you should be using the shiny new C# 6.0 features now!
 
Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
RSpec 2 Best practices
RSpec 2 Best practicesRSpec 2 Best practices
RSpec 2 Best practices
 
Intro to Terraform
Intro to TerraformIntro to Terraform
Intro to Terraform
 
Orleankka Intro Circa 2015
Orleankka Intro Circa 2015Orleankka Intro Circa 2015
Orleankka Intro Circa 2015
 
Metadata-driven Testing
Metadata-driven TestingMetadata-driven Testing
Metadata-driven Testing
 

Viewers also liked

HAL APIs and Ember Data
HAL APIs and Ember DataHAL APIs and Ember Data
HAL APIs and Ember Data
Cory Forsyth
 
Damien piller : Président de migros Neuchatel Fribourg
Damien piller : Président de migros Neuchatel FribourgDamien piller : Président de migros Neuchatel Fribourg
Damien piller : Président de migros Neuchatel Fribourg
Damien Piller
 
Actividad construye t
Actividad construye tActividad construye t
Actividad construye t
Raul Eduardo Hernandez Saldierna
 
America
AmericaAmerica
Presentation1
Presentation1Presentation1
Presentation1
marich23
 
Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur...
Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur...Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur...
Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur...
Damien Piller
 
CW Autism Parent Fact Sheet 2015
CW Autism Parent Fact Sheet 2015CW Autism Parent Fact Sheet 2015
CW Autism Parent Fact Sheet 2015Christina Weathers
 
Damien Piller - Changement à la direction de Migros Neuchâtel Fribourg
Damien Piller - Changement à la direction de Migros Neuchâtel FribourgDamien Piller - Changement à la direction de Migros Neuchâtel Fribourg
Damien Piller - Changement à la direction de Migros Neuchâtel Fribourg
Damien Piller
 
Estadística general Medidas de tendencia central
Estadística general Medidas de tendencia centralEstadística general Medidas de tendencia central
Estadística general Medidas de tendencia central
Daliana Belandria Publicista
 
Portfolio Fran Castillo 2014
Portfolio Fran Castillo 2014Portfolio Fran Castillo 2014
Portfolio Fran Castillo 2014
Fran Castillo
 
Chint cataloge
Chint catalogeChint cataloge
Chint cataloge
mirosabev
 
Ejm taller practico
Ejm taller practicoEjm taller practico
Ejm taller practico
DIPLOMADO INNOVATIC
 
Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012
Tolila Sylvie
 

Viewers also liked (17)

HAL APIs and Ember Data
HAL APIs and Ember DataHAL APIs and Ember Data
HAL APIs and Ember Data
 
Ember.js at Zendesk
Ember.js at ZendeskEmber.js at Zendesk
Ember.js at Zendesk
 
Damien piller : Président de migros Neuchatel Fribourg
Damien piller : Président de migros Neuchatel FribourgDamien piller : Président de migros Neuchatel Fribourg
Damien piller : Président de migros Neuchatel Fribourg
 
Actividad construye t
Actividad construye tActividad construye t
Actividad construye t
 
America
AmericaAmerica
America
 
Presentation1
Presentation1Presentation1
Presentation1
 
Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur...
Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur...Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur...
Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur...
 
CW Autism Parent Fact Sheet 2015
CW Autism Parent Fact Sheet 2015CW Autism Parent Fact Sheet 2015
CW Autism Parent Fact Sheet 2015
 
Damien Piller - Changement à la direction de Migros Neuchâtel Fribourg
Damien Piller - Changement à la direction de Migros Neuchâtel FribourgDamien Piller - Changement à la direction de Migros Neuchâtel Fribourg
Damien Piller - Changement à la direction de Migros Neuchâtel Fribourg
 
arca south
arca southarca south
arca south
 
Estadística general Medidas de tendencia central
Estadística general Medidas de tendencia centralEstadística general Medidas de tendencia central
Estadística general Medidas de tendencia central
 
Portfolio Fran Castillo 2014
Portfolio Fran Castillo 2014Portfolio Fran Castillo 2014
Portfolio Fran Castillo 2014
 
Chint cataloge
Chint catalogeChint cataloge
Chint cataloge
 
Guia diseño redes subterraneas3
Guia diseño redes subterraneas3Guia diseño redes subterraneas3
Guia diseño redes subterraneas3
 
Ejm taller practico
Ejm taller practicoEjm taller practico
Ejm taller practico
 
NHM-DFW-0616-v4 (3)
NHM-DFW-0616-v4 (3)NHM-DFW-0616-v4 (3)
NHM-DFW-0616-v4 (3)
 
Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012
 

Similar to Ember Data and Custom APIs

Workshop 17: EmberJS parte II
Workshop 17: EmberJS parte IIWorkshop 17: EmberJS parte II
Workshop 17: EmberJS parte II
Visual Engineering
 
Ember Data and JSON API
Ember Data and JSON APIEmber Data and JSON API
Ember Data and JSON API
yoranbe
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
Daniel Spector
 
Spring data ii
Spring data iiSpring data ii
Spring data ii
명철 강
 
Rspec API Documentation
Rspec API DocumentationRspec API Documentation
Rspec API Documentation
SmartLogic
 
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
James Titcumb
 
DynamicRecord Presentation
DynamicRecord PresentationDynamicRecord Presentation
DynamicRecord Presentation
linoj
 
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
James Titcumb
 
Getting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe Testing
Mark Rickerby
 
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)
James Titcumb
 
SCR Annotations for Fun and Profit
SCR Annotations for Fun and ProfitSCR Annotations for Fun and Profit
SCR Annotations for Fun and Profit
Mike Pfaff
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
Gil Fink
 
Postman On Steroids
Postman On SteroidsPostman On Steroids
Postman On Steroids
Sara Tornincasa
 
Federico Feroldi - Scala microservices
Federico Feroldi - Scala microservicesFederico Feroldi - Scala microservices
Federico Feroldi - Scala microservices
Scala Italy
 
Java Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : DatastoreJava Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : Datastore
IMC Institute
 
Tutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component pluginTutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component plugin
searchbox-com
 
OSGi 4.3 Technical Update: What's New?
OSGi 4.3 Technical Update: What's New?OSGi 4.3 Technical Update: What's New?
OSGi 4.3 Technical Update: What's New?
bjhargrave
 
Pxb For Yapc2008
Pxb For Yapc2008Pxb For Yapc2008
Pxb For Yapc2008
maximgrp
 
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)
James Titcumb
 

Similar to Ember Data and Custom APIs (20)

Workshop 17: EmberJS parte II
Workshop 17: EmberJS parte IIWorkshop 17: EmberJS parte II
Workshop 17: EmberJS parte II
 
Ember Data and JSON API
Ember Data and JSON APIEmber Data and JSON API
Ember Data and JSON API
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
 
Spring data ii
Spring data iiSpring data ii
Spring data ii
 
Rspec API Documentation
Rspec API DocumentationRspec API Documentation
Rspec API Documentation
 
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
 
DynamicRecord Presentation
DynamicRecord PresentationDynamicRecord Presentation
DynamicRecord Presentation
 
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
 
Getting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe Testing
 
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)
 
SCR Annotations for Fun and Profit
SCR Annotations for Fun and ProfitSCR Annotations for Fun and Profit
SCR Annotations for Fun and Profit
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
 
Postman On Steroids
Postman On SteroidsPostman On Steroids
Postman On Steroids
 
Federico Feroldi - Scala microservices
Federico Feroldi - Scala microservicesFederico Feroldi - Scala microservices
Federico Feroldi - Scala microservices
 
Java Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : DatastoreJava Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : Datastore
 
Tutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component pluginTutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component plugin
 
OSGi 4.3 Technical Update: What's New?
OSGi 4.3 Technical Update: What's New?OSGi 4.3 Technical Update: What's New?
OSGi 4.3 Technical Update: What's New?
 
Pxb For Yapc2008
Pxb For Yapc2008Pxb For Yapc2008
Pxb For Yapc2008
 
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)
 

Recently uploaded

Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
UiPathCommunity
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 

Recently uploaded (20)

Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 

Ember Data and Custom APIs