Ember Data and Custom APIs

David Tang
David TangWeb Developer
EMBER DATA AND CUSTOM
APIS
DAVID TANG
Ember Data and Custom APIs
OVERVIEW
▸ Adapters vs Serializers
▸ Built-in Adapters
▸ Common Adapter Customizations
▸ Built-in Serializers
▸ Common Serializer Customizations
▸ Testing it all
Ember Data and Custom APIs
SERIALIZERS
ADAPTERS
TRANSFORMS
MODELS
IDENTITY MAPPING
REST SERIALIZER
JSON SERIALIZER
JSON API SERIALIZER
ACTIVE MODEL ADAPTER
REST ADAPTER
¯_(ツ)_/¯
STORE
SNAPSHOTS
Ember Data and Custom APIs
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
Ember Data and Custom APIs
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
1 of 48

Recommended

Puppet Camp Paris 2016 Data in Modules by
Puppet Camp Paris 2016 Data in ModulesPuppet Camp Paris 2016 Data in Modules
Puppet Camp Paris 2016 Data in ModulesMartin Alfke
1.4K views43 slides
Refactoring Infrastructure Code by
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure CodeNell Shamrell-Harrington
908 views191 slides
PHP 8.1 - What's new and changed by
PHP 8.1 - What's new and changedPHP 8.1 - What's new and changed
PHP 8.1 - What's new and changedAyesh Karunaratne
144 views128 slides
Testing Javascript with Jasmine by
Testing Javascript with JasmineTesting Javascript with Jasmine
Testing Javascript with JasmineTim Tyrrell
5.1K views88 slides
Pytest: escreva menos, teste mais by
Pytest: escreva menos, teste maisPytest: escreva menos, teste mais
Pytest: escreva menos, teste maisErick Wilder
854 views46 slides
JavaScript Unit Testing with Jasmine by
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineRaimonds Simanovskis
4.6K views29 slides

More Related Content

What's hot

Py.test by
Py.testPy.test
Py.testsoasme
6.7K views51 slides
Effective testing with pytest by
Effective testing with pytestEffective testing with pytest
Effective testing with pytestHector Canto
627 views57 slides
Mozilla Web QA - Evolution of our Python WebDriver framework by
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 frameworkdavehunt82
922 views10 slides
APIs and Synthetic Biology by
APIs and Synthetic BiologyAPIs and Synthetic Biology
APIs and Synthetic BiologyUri Laserson
2.8K views67 slides
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks by
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 TechTalksLohika_Odessa_TechTalks
7K views30 slides
Puppet Systems Infrastructure Construction Kit by
Puppet Systems Infrastructure Construction KitPuppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitAlessandro Franceschi
1.6K views22 slides

What's hot(20)

Py.test by soasme
Py.testPy.test
Py.test
soasme6.7K views
Effective testing with pytest by Hector Canto
Effective testing with pytestEffective testing with pytest
Effective testing with pytest
Hector Canto627 views
Mozilla Web QA - Evolution of our Python WebDriver framework by davehunt82
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
davehunt82922 views
APIs and Synthetic Biology by Uri Laserson
APIs and Synthetic BiologyAPIs and Synthetic Biology
APIs and Synthetic Biology
Uri Laserson2.8K views
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks by Lohika_Odessa_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
Intro To Spring Python by gturnquist
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
gturnquist5.8K views
Modules of the twenties by Puppet
Modules of the twentiesModules of the twenties
Modules of the twenties
Puppet848 views
Proxy Deep Dive Voxxed Belgrad 2015 by Sven Ruppert
Proxy Deep Dive Voxxed Belgrad 2015Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015
Sven Ruppert252 views
HTTP and Your Angry Dog by Ross Tuck
HTTP and Your Angry DogHTTP and Your Angry Dog
HTTP and Your Angry Dog
Ross Tuck10.3K views
Puppet: What _not_ to do by Puppet
Puppet: What _not_ to doPuppet: What _not_ to do
Puppet: What _not_ to do
Puppet6.6K views
Python - Getting to the Essence - Points.com - Dave Park by pointstechgeeks
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
pointstechgeeks935 views
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016) by Robert Nelson
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 Nelson1.3K views
Why you should be using the shiny new C# 6.0 features now! by Eric Phan
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 Phan298 views
Puppet camp2021 testing modules and controlrepo by Puppet
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
Puppet1.5K views

Viewers also liked

HAL APIs and Ember Data by
HAL APIs and Ember DataHAL APIs and Ember Data
HAL APIs and Ember DataCory Forsyth
2.5K views33 slides
Ember.js at Zendesk by
Ember.js at ZendeskEmber.js at Zendesk
Ember.js at ZendeskDaniel Ribeiro
2.7K views35 slides
Damien piller : Président de migros Neuchatel Fribourg by
Damien piller : Président de migros Neuchatel FribourgDamien piller : Président de migros Neuchatel Fribourg
Damien piller : Président de migros Neuchatel FribourgDamien Piller
456 views1 slide
Actividad construye t by
Actividad construye tActividad construye t
Actividad construye tRaul Eduardo Hernandez Saldierna
293 views3 slides
America by
AmericaAmerica
AmericaEsteban Llerena
132 views6 slides
Presentation1 by
Presentation1Presentation1
Presentation1marich23
157 views7 slides

Viewers also liked(17)

HAL APIs and Ember Data by Cory Forsyth
HAL APIs and Ember DataHAL APIs and Ember Data
HAL APIs and Ember Data
Cory Forsyth2.5K views
Damien piller : Président de migros Neuchatel Fribourg by Damien Piller
Damien piller : Président de migros Neuchatel FribourgDamien piller : Président de migros Neuchatel Fribourg
Damien piller : Président de migros Neuchatel Fribourg
Damien Piller456 views
Presentation1 by marich23
Presentation1Presentation1
Presentation1
marich23157 views
Damien Piller la liberté-ilford vend une partie de son terrain à un promoteur... by Damien Piller
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 Piller1K views
Damien Piller - Changement à la direction de Migros Neuchâtel Fribourg by Damien Piller
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 Piller6.4K views
Portfolio Fran Castillo 2014 by Fran Castillo
Portfolio Fran Castillo 2014Portfolio Fran Castillo 2014
Portfolio Fran Castillo 2014
Fran Castillo1.8K views
Chint cataloge by mirosabev
Chint catalogeChint cataloge
Chint cataloge
mirosabev469 views
Highlights Biennale des Antiquaires 2012 by Tolila Sylvie
Highlights Biennale des Antiquaires 2012Highlights Biennale des Antiquaires 2012
Highlights Biennale des Antiquaires 2012
Tolila Sylvie2.9K views

Similar to Ember Data and Custom APIs

Workshop 17: EmberJS parte II by
Workshop 17: EmberJS parte IIWorkshop 17: EmberJS parte II
Workshop 17: EmberJS parte IIVisual Engineering
856 views54 slides
Ember Data and JSON API by
Ember Data and JSON APIEmber Data and JSON API
Ember Data and JSON APIyoranbe
1.7K views22 slides
Crossing the Bridge: Connecting Rails and your Front-end Framework by
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 FrameworkDaniel Spector
1.3K views65 slides
Spring data ii by
Spring data iiSpring data ii
Spring data ii명철 강
812 views10 slides
Rspec API Documentation by
Rspec API DocumentationRspec API Documentation
Rspec API DocumentationSmartLogic
2.2K views27 slides
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017) by
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
1.6K views94 slides

Similar to Ember Data and Custom APIs(20)

Ember Data and JSON API by yoranbe
Ember Data and JSON APIEmber Data and JSON API
Ember Data and JSON API
yoranbe1.7K views
Crossing the Bridge: Connecting Rails and your Front-end Framework by Daniel Spector
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 Spector1.3K views
Spring data ii by 명철 강
Spring data iiSpring data ii
Spring data ii
명철 강812 views
Rspec API Documentation by SmartLogic
Rspec API DocumentationRspec API Documentation
Rspec API Documentation
SmartLogic2.2K views
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017) by James Titcumb
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 Titcumb1.6K views
DynamicRecord Presentation by linoj
DynamicRecord PresentationDynamicRecord Presentation
DynamicRecord Presentation
linoj403 views
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017) by James Titcumb
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 Titcumb3.1K views
Getting to Grips with SilverStripe Testing by Mark Rickerby
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe Testing
Mark Rickerby5.9K views
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018) by James Titcumb
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 Titcumb637 views
SCR Annotations for Fun and Profit by Mike Pfaff
SCR Annotations for Fun and ProfitSCR Annotations for Fun and Profit
SCR Annotations for Fun and Profit
Mike Pfaff4.7K views
WebNet Conference 2012 - Designing complex applications using html5 and knock... by Fabio Franzini
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 Franzini1.6K views
Quick tour to front end unit testing using jasmine by Gil Fink
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 Fink801 views
Federico Feroldi - Scala microservices by Scala Italy
Federico Feroldi - Scala microservicesFederico Feroldi - Scala microservices
Federico Feroldi - Scala microservices
Scala Italy769 views
Java Web Programming on Google Cloud Platform [2/3] : Datastore by IMC Institute
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 Institute724 views
Tutorial on developing a Solr search component plugin by searchbox-com
Tutorial on developing a Solr search component pluginTutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component plugin
searchbox-com26.2K views
OSGi 4.3 Technical Update: What's New? by bjhargrave
OSGi 4.3 Technical Update: What's New?OSGi 4.3 Technical Update: What's New?
OSGi 4.3 Technical Update: What's New?
bjhargrave2.5K views
Pxb For Yapc2008 by maximgrp
Pxb For Yapc2008Pxb For Yapc2008
Pxb For Yapc2008
maximgrp424 views
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018) by James Titcumb
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 Titcumb197 views

Recently uploaded

Info Session November 2023.pdf by
Info Session November 2023.pdfInfo Session November 2023.pdf
Info Session November 2023.pdfAleksandraKoprivica4
12 views15 slides
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf by
STKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdfSTKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdf
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdfDr. Jimmy Schwarzkopf
19 views29 slides
Microsoft Power Platform.pptx by
Microsoft Power Platform.pptxMicrosoft Power Platform.pptx
Microsoft Power Platform.pptxUni Systems S.M.S.A.
53 views38 slides
Serverless computing with Google Cloud (2023-24) by
Serverless computing with Google Cloud (2023-24)Serverless computing with Google Cloud (2023-24)
Serverless computing with Google Cloud (2023-24)wesley chun
11 views33 slides
Case Study Copenhagen Energy and Business Central.pdf by
Case Study Copenhagen Energy and Business Central.pdfCase Study Copenhagen Energy and Business Central.pdf
Case Study Copenhagen Energy and Business Central.pdfAitana
16 views3 slides
6g - REPORT.pdf by
6g - REPORT.pdf6g - REPORT.pdf
6g - REPORT.pdfLiveplex
10 views23 slides

Recently uploaded(20)

STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf by Dr. Jimmy Schwarzkopf
STKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdfSTKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdf
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf
Serverless computing with Google Cloud (2023-24) by wesley chun
Serverless computing with Google Cloud (2023-24)Serverless computing with Google Cloud (2023-24)
Serverless computing with Google Cloud (2023-24)
wesley chun11 views
Case Study Copenhagen Energy and Business Central.pdf by Aitana
Case Study Copenhagen Energy and Business Central.pdfCase Study Copenhagen Energy and Business Central.pdf
Case Study Copenhagen Energy and Business Central.pdf
Aitana16 views
6g - REPORT.pdf by Liveplex
6g - REPORT.pdf6g - REPORT.pdf
6g - REPORT.pdf
Liveplex10 views
Future of AR - Facebook Presentation by ssuserb54b561
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
ssuserb54b56114 views
"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays11 views
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院 by IttrainingIttraining
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker37 views
STPI OctaNE CoE Brochure.pdf by madhurjyapb
STPI OctaNE CoE Brochure.pdfSTPI OctaNE CoE Brochure.pdf
STPI OctaNE CoE Brochure.pdf
madhurjyapb14 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman33 views
Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software263 views
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2217 views

Ember Data and Custom APIs