SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
Boxcars and
Cabooses
When one more XHR is too much
Peter Chittum
Developer Evangelist
@pchittum
github.com/pchittum
Cleaning up your CRUDdy API
Forward Looking Statement
Safe harbor statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if
any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-
looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of
product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of
management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments
and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our
service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth,
interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any
possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and
motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-
salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial
results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for
the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor
Information section of our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may
not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently
available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.
?
Agile and elastic platform that developers love
Smarter infrastructure lets you build apps that scale
Open and extensible
Modern language support and ecosystem of 150+ add-ons
Connected to Force.com
Sync customer apps with business processes
Build Customer-Facing Apps with Heroku
Force.com - Employee Facing Apps
​ 
Apps
HR Product
Supply
Chain
ITFinanceOps
Multi Tenant
150k customers
40 Prod POD’s
40 Prod DB’s
Pre-Built Apps
​ AppExchange is the #1 Business App Marketplace
Customized for Salesforce
Trusted and Secure
Reviewed by Peers
Over 2,800 apps 3 million installs
It’s About the API
Comprehensive Suite of APIs and Toolkits
Web Service
Endpoint
Web Service
Endpoint
Apex
WS/REST
Outbound
Messaging
Business Logic
Sync Bulk API
Streaming
API Topic
CRUD
Data
Bayeux
Client
Applications and Middleware
Java SDK Ruby gem
PHP
Toolkit
Mobile
SDK
3rd Party
Adapters
Apex
Callouts
​ Overall site peak day
•  >4 Billion transactions
•  200-250 milliseconds average
•  ~30% of transactions via API
requests
Salesforce’s Daily API Performance
Yesterday: ??? ​ Source: trust.salesforce.com
Automatic REST Endpoint Creation
​ POST
/services/data/v35.0/sobjects/Account
BODY: {
"Name" : "CodeMotion Amsterdam",
"BillingCountry" : "Netherlands"
}
Create Record
​ POST
/services/data/v35.0/sobjects/Account
BODY: {
"Name" : "CodeMotion Amsterdam",
"BillingCountry" : "Netherlands"
}
Fetch Record
​ GET
/services/data/v35.0/sobjects/Account/0012400000NBMWyAAP
SUCCESS RESPONSE: {
"attributes" : {"type" : "Account”,"url" : "...”},
"Id" : "0012400000NBMWyAAP",
"Name" : "CodeMotion Amsterdam",
"BillingCountry" : "Netherlands",
...
}
Query Endpoint
​ GET
/services/data/v35.0/query?q=SELECT ... FROM Account WHERE ...
SUCCESS RESPONSE: { "totalSize" : 2,
"done" : true,
"records" : [
{"attributes" : {"type" : "Account","url" : "..."},
"Id" : "0012400000NBMWyAAP",
"Name" : "Test 123",...},
{...}, ...]}
Describe (Discover)
​ GET
/services/data/v35.0/sobjects/Account/describe
SUCCESS RESPONSE: {
...
"queryable" : true,
"searchable" : true,
"updateable" : true,
...
}
Limits
​ GET
/services/data/v35.0/limits
SUCCESS RESPONSE: {
...
"DailyBulkApiRequests": {"Max" : 5000,"Remaining" : 5000},
"DailyStreamingApiEvents": {"Max" : 10000,"Remaining" : 9996},
"DataStorageMB" : {"Max" : 5,"Remaining" : 5},
...
}
Many Requests Many Server Trips
POST Record
GET Server Gen Data
GET API Limits
Composite Batch REST API
.../composite/batch
POST Batch
{
"batchRequests":[
{POST},
{GET},
{GET}
]
}
Sample Batch Request
​ POST: <salesforcedomain>/services/data/v35.0/composite/batch
​ {"batchRequests" : [
​  {"method" : "POST",
​  "url" : "v35.0/sobjects/account/",
​  "richInput" : {"Name" : "NewName", "Industry" : "Tech"}},
​  {"method" : "GET",
​  "url" : "v35.0/query?q=select id, name, industry from account
​  order by createddate desc limit 10"},
​  {"method" : "GET",
​  "url" : "v35.0/limits"
​  }]
​ }
Sample Batch Response Object
​ {
​  "hasErrors": false,
​  "results": [
​  { "statusCode": 201, "result": {...} },
​  { "statusCode": 200, "result": {...} },
​  { "statusCode": 200, "result": {...} }
​  ]
​ }
Batch Request Behavior
•  Resource which accepts multiple REST calls to execute
•  Up to 25 sub-requests
•  URI, Method, and optional Body
•  Sub-requests can be unrelated API calls
•  Sub-requests are executed serially, in order, and as the running user
•  Commit each subrequest on completion
•  Optional parameter: haltOnError
•  Do not continue after error occurs
•  But check subrequests for errors
Hierarchy
Parent/Child Related Data
POST Account
POST related Contacts
POST related Cases
RESP: Account ID
RESP: Contact IDs
RESP: Case IDs
Composite Tree REST API
.../composite/tree/entity
POST Tree
”records":[
{parent1},
{parent2},
{parent3}
]
Sample Tree Request
​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account
​ {"records" :[
​  {"attributes": {"type":"Account", "referenceId":"ref1"},
​  "name" : "CodeMotion", "phone" : "1234567890",
​  "type" : "Customer", "industry" : "Events",
​  "Contacts" : {
​  "records" : [
​  {"attributes": {"type":"Contact", "referenceId":"ref2"},
​  "lastname" : "Smith", "title" : "Organizer"},
​  ...]},
​  "Cases" : {
​  "records" : [
​  {"attributes": {"type":"Case", "referenceId":"ref3"},
​  "" : "", "" : "", "" : ""}
​  ...]}, }}, ...] }
Sample Tree Request: Many Records
​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account
​ {"records" :[
​  {"attributes": {"type":"Account", "referenceId":"ref1"},
​  "name" : "CodeMotion", "phone" : "1234567890",
​  "type" : "Customer", "industry" : "Events",
​  "Contacts" : {
​  "records" : [
​  {"attributes": {"type":"Contact", "referenceId":"ref2"},
​  "lastname" : "Smith", "title" : "Organizer"},
​  ...]},
​  "Cases" : {
​  "records" : [
​  {"attributes": {"type":"Case", "referenceId":"ref3"},
​  "" : "", "" : "", "" : ""}
​  ...]}, }}, ...] }
Sample Tree Request: Parent Record
​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account
​ {"records" :[
​  {"attributes": {"type":"Account", "referenceId":"ref1"},
​  "name" : "CodeMotion", "phone" : "1234567890",
​  "type" : "Customer", "industry" : "Events",
​  "Contacts" : {
​  "records" : [
​  {"attributes": {"type":"Contact", "referenceId":"ref2"},
​  "lastname" : "Smith", "title" : "Organizer"},
​  ...]},
​  "Cases" : {
​  "records" : [
​  {"attributes": {"type":"Case", "referenceId":"ref3"},
​  "" : "", "" : "", "" : ""}
​  ...]}, }}, ...] }
Sample Tree Request: Child Records
​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account
​ {"records" :[
​  {"attributes": {"type":"Account", "referenceId":"ref1"},
​  "name" : "CodeMotion", "phone" : "1234567890",
​  "type" : "Customer", "industry" : "Events",
​  "Contacts" : {
​  "records" : [
​  {"attributes": {"type":"Contact", "referenceId":"ref2"},
​  "lastname" : "Smith", "title" : "Organizer"},
​  ...]},
​  "Cases" : {
​  "records" : [
​  {"attributes": {"type":"Case", "referenceId":"ref3"},
​  "" : "", "" : "", "" : ""}
​  ...]}, }}, ...] }
Sample Tree Request: Client Ids
​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account
​ {"records" :[
​  {"attributes": {"type":"Account", "referenceId":"ref1"},
​  "name" : "CodeMotion", "phone" : "1234567890",
​  "type" : "Analyst", "industry" : "Events",
​  "Contacts" : {
​  "records" : [
​  {"attributes": {"type":"Contact", "referenceId":"ref2"},
​  "lastname" : "Smith", "title" : "Organizer"},
​  ...]},
​  "Cases" : {
​  "records" : [
​  {"attributes": {"type":"Case", "referenceId":"ref3"},
​  "" : "", "" : "", "" : ""}
​  ...]}, }}, ...] }
Demo
The (Near) Future
​ Extension of Batch and Composite
​ Outputs from one sub request to be used as inputs for the another
Possible Future Features
​ Parameter-based values
​ Basic orchestration baked into /batch
​ Updates on /tree
The Client Problem
Aura and Lightning Component Framework
Lightning
Component
Framework
Lightning Component Design Principles
•  Component author namespacing
•  Automatic component-based CSS namespacing
•  Everything is a component
•  Allow for programmatic or point-and-click UI composition
•  Enable Salesforce, customers, and partners to build composite UIs
•  Works on any form factor
The Composite App
Many Components Many Server Trips
XMLHttpRequest
XMLHttpRequest
XMLHttpRequest
Actions: Interact with the Server
•  Apex Method Surfaced to Lightning Components
•  @AuraEnabled annotation
Boxcarring: Many Actions, One XHR
ActionService
Caboose: Postpone High Volume Actions
ActionService
•  Defer High-Volume Actions
•  Action.setCaboose()
Action Service: Server Side API
​ Apex: Code on Force.com
Action Service Client API
Upcoming Features
​ Integration of offline data store with Action service
​ Ability to prioritize actions
Takeaways
​ Minimize server requests
​ Optimize CRUD-based APIs with aggregation
​ Optimize creation of hierarchical data
​ Client-side libraries to support request batching
​ Meetup: bit.ly/ams-sf-devs
​ startups.salesforce.com
​ trailhead.com
Q & A
Peter Chittum
Developer Evangelist
@pchittum
github.com/pchittum
​ Learn: developer.salesforce.com/trailhead
​ Meetup: bit.ly/ams-sf-devs
Thank
you

Contenu connexe

Tendances

Lightning connect sap_integration_df2015
Lightning connect sap_integration_df2015Lightning connect sap_integration_df2015
Lightning connect sap_integration_df2015Dreamforce
 
Boxcars and Cabooses: When One More XHR Is Too Much
Boxcars and Cabooses: When One More XHR Is Too MuchBoxcars and Cabooses: When One More XHR Is Too Much
Boxcars and Cabooses: When One More XHR Is Too MuchPeter Chittum
 
SAP and Salesforce Integration
SAP and Salesforce IntegrationSAP and Salesforce Integration
SAP and Salesforce IntegrationGlenn Johnson
 
Introduction to External Objects and the OData Connector
Introduction to External Objects and the OData ConnectorIntroduction to External Objects and the OData Connector
Introduction to External Objects and the OData ConnectorSalesforce Developers
 
Sap integration salesforce_presentation
Sap integration salesforce_presentationSap integration salesforce_presentation
Sap integration salesforce_presentationSalesforce Deutschland
 
Elevate london dec 2014.pptx
Elevate london dec 2014.pptxElevate london dec 2014.pptx
Elevate london dec 2014.pptxPeter Chittum
 
Unlock SAP - Release the potential of your existing backend systems with Sale...
Unlock SAP - Release the potential of your existing backend systems with Sale...Unlock SAP - Release the potential of your existing backend systems with Sale...
Unlock SAP - Release the potential of your existing backend systems with Sale...Salesforce Deutschland
 
Wave Analytics: Developing Predictive Business Intelligence Apps
Wave Analytics: Developing Predictive Business Intelligence AppsWave Analytics: Developing Predictive Business Intelligence Apps
Wave Analytics: Developing Predictive Business Intelligence AppsSalesforce Developers
 
ERP/CRM Integration Series: Integration Salesforce with Alfresco
ERP/CRM Integration Series: Integration Salesforce with AlfrescoERP/CRM Integration Series: Integration Salesforce with Alfresco
ERP/CRM Integration Series: Integration Salesforce with AlfrescoZia Consulting
 
Two-Way Integration with Writable External Objects
Two-Way Integration with Writable External ObjectsTwo-Way Integration with Writable External Objects
Two-Way Integration with Writable External ObjectsSalesforce Developers
 
February 2020 Salesforce API Review
February 2020 Salesforce API ReviewFebruary 2020 Salesforce API Review
February 2020 Salesforce API ReviewLydon Bergin
 
Hybrid IT: The Importance of Integration to Salesforce Success
Hybrid IT: The Importance of Integration to Salesforce SuccessHybrid IT: The Importance of Integration to Salesforce Success
Hybrid IT: The Importance of Integration to Salesforce SuccessDarren Cunningham
 
Web applications portfolio
Web applications portfolioWeb applications portfolio
Web applications portfolioRavi S
 
Perpetual Analytics - Health in Motion
Perpetual Analytics - Health in MotionPerpetual Analytics - Health in Motion
Perpetual Analytics - Health in Motionmrosenthal
 
YETI Simplifies Salesforce/SAP Integration with enosiX by Gerald Schlechter &...
YETI Simplifies Salesforce/SAP Integration with enosiX by Gerald Schlechter &...YETI Simplifies Salesforce/SAP Integration with enosiX by Gerald Schlechter &...
YETI Simplifies Salesforce/SAP Integration with enosiX by Gerald Schlechter &...Salesforce Admins
 
Enterprise and Social Integration Using Force.com
Enterprise and Social Integration Using Force.comEnterprise and Social Integration Using Force.com
Enterprise and Social Integration Using Force.comSalesforce Developers
 
Expert Hour: Salesforce integration tools - why, what & how?
Expert Hour:  Salesforce integration tools - why, what & how?Expert Hour:  Salesforce integration tools - why, what & how?
Expert Hour: Salesforce integration tools - why, what & how?Geraldine Gray
 
Developing Offline Mobile Apps With Salesforce Mobile SDK SmartStore
Developing Offline Mobile Apps With Salesforce Mobile SDK SmartStoreDeveloping Offline Mobile Apps With Salesforce Mobile SDK SmartStore
Developing Offline Mobile Apps With Salesforce Mobile SDK SmartStoreSalesforce Developers
 

Tendances (20)

Salesforce and sap integration
Salesforce and sap integrationSalesforce and sap integration
Salesforce and sap integration
 
Lightning connect sap_integration_df2015
Lightning connect sap_integration_df2015Lightning connect sap_integration_df2015
Lightning connect sap_integration_df2015
 
Boxcars and Cabooses: When One More XHR Is Too Much
Boxcars and Cabooses: When One More XHR Is Too MuchBoxcars and Cabooses: When One More XHR Is Too Much
Boxcars and Cabooses: When One More XHR Is Too Much
 
SAP and Salesforce Integration
SAP and Salesforce IntegrationSAP and Salesforce Integration
SAP and Salesforce Integration
 
Introduction to External Objects and the OData Connector
Introduction to External Objects and the OData ConnectorIntroduction to External Objects and the OData Connector
Introduction to External Objects and the OData Connector
 
Sap integration salesforce_presentation
Sap integration salesforce_presentationSap integration salesforce_presentation
Sap integration salesforce_presentation
 
Elevate london dec 2014.pptx
Elevate london dec 2014.pptxElevate london dec 2014.pptx
Elevate london dec 2014.pptx
 
Unlock SAP - Release the potential of your existing backend systems with Sale...
Unlock SAP - Release the potential of your existing backend systems with Sale...Unlock SAP - Release the potential of your existing backend systems with Sale...
Unlock SAP - Release the potential of your existing backend systems with Sale...
 
Wave Analytics: Developing Predictive Business Intelligence Apps
Wave Analytics: Developing Predictive Business Intelligence AppsWave Analytics: Developing Predictive Business Intelligence Apps
Wave Analytics: Developing Predictive Business Intelligence Apps
 
ERP/CRM Integration Series: Integration Salesforce with Alfresco
ERP/CRM Integration Series: Integration Salesforce with AlfrescoERP/CRM Integration Series: Integration Salesforce with Alfresco
ERP/CRM Integration Series: Integration Salesforce with Alfresco
 
Two-Way Integration with Writable External Objects
Two-Way Integration with Writable External ObjectsTwo-Way Integration with Writable External Objects
Two-Way Integration with Writable External Objects
 
Web Log Files
Web Log FilesWeb Log Files
Web Log Files
 
February 2020 Salesforce API Review
February 2020 Salesforce API ReviewFebruary 2020 Salesforce API Review
February 2020 Salesforce API Review
 
Hybrid IT: The Importance of Integration to Salesforce Success
Hybrid IT: The Importance of Integration to Salesforce SuccessHybrid IT: The Importance of Integration to Salesforce Success
Hybrid IT: The Importance of Integration to Salesforce Success
 
Web applications portfolio
Web applications portfolioWeb applications portfolio
Web applications portfolio
 
Perpetual Analytics - Health in Motion
Perpetual Analytics - Health in MotionPerpetual Analytics - Health in Motion
Perpetual Analytics - Health in Motion
 
YETI Simplifies Salesforce/SAP Integration with enosiX by Gerald Schlechter &...
YETI Simplifies Salesforce/SAP Integration with enosiX by Gerald Schlechter &...YETI Simplifies Salesforce/SAP Integration with enosiX by Gerald Schlechter &...
YETI Simplifies Salesforce/SAP Integration with enosiX by Gerald Schlechter &...
 
Enterprise and Social Integration Using Force.com
Enterprise and Social Integration Using Force.comEnterprise and Social Integration Using Force.com
Enterprise and Social Integration Using Force.com
 
Expert Hour: Salesforce integration tools - why, what & how?
Expert Hour:  Salesforce integration tools - why, what & how?Expert Hour:  Salesforce integration tools - why, what & how?
Expert Hour: Salesforce integration tools - why, what & how?
 
Developing Offline Mobile Apps With Salesforce Mobile SDK SmartStore
Developing Offline Mobile Apps With Salesforce Mobile SDK SmartStoreDeveloping Offline Mobile Apps With Salesforce Mobile SDK SmartStore
Developing Offline Mobile Apps With Salesforce Mobile SDK SmartStore
 

En vedette

Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...Codemotion
 
Engage and retain users in the mobile world
Engage and retain users in the mobile worldEngage and retain users in the mobile world
Engage and retain users in the mobile worldCodemotion
 
Everything you always wanted to know about highly available distributed datab...
Everything you always wanted to know about highly available distributed datab...Everything you always wanted to know about highly available distributed datab...
Everything you always wanted to know about highly available distributed datab...Codemotion
 
Maker Experience: user centered toolkit for makers
Maker Experience: user centered toolkit for makersMaker Experience: user centered toolkit for makers
Maker Experience: user centered toolkit for makersCodemotion
 
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016Codemotion
 
The rise and fall and rise of Virtual Reality - Adriaan Rijkens - Codemotion...
The rise and fall and rise of Virtual Reality -  Adriaan Rijkens - Codemotion...The rise and fall and rise of Virtual Reality -  Adriaan Rijkens - Codemotion...
The rise and fall and rise of Virtual Reality - Adriaan Rijkens - Codemotion...Codemotion
 
NoSQL on the move
NoSQL on the moveNoSQL on the move
NoSQL on the moveCodemotion
 
Software environmentalism - Tudor Girba - Codemotion Amsterdam 2016
Software environmentalism - Tudor Girba - Codemotion Amsterdam 2016Software environmentalism - Tudor Girba - Codemotion Amsterdam 2016
Software environmentalism - Tudor Girba - Codemotion Amsterdam 2016Codemotion
 
Demistifying the 3D Web
Demistifying the 3D WebDemistifying the 3D Web
Demistifying the 3D WebCodemotion
 
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016Codemotion
 
Customize and control connected devices
Customize and control connected devicesCustomize and control connected devices
Customize and control connected devicesCodemotion
 
If security is hard, you are doing it wrong - Fabio Locati - Codemotion Amste...
If security is hard, you are doing it wrong - Fabio Locati - Codemotion Amste...If security is hard, you are doing it wrong - Fabio Locati - Codemotion Amste...
If security is hard, you are doing it wrong - Fabio Locati - Codemotion Amste...Codemotion
 
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016Codemotion
 
F# for the curly brace developer - Michael Newton - Codemotion Amsterdam 2016
F# for the curly brace developer - Michael Newton - Codemotion Amsterdam 2016F# for the curly brace developer - Michael Newton - Codemotion Amsterdam 2016
F# for the curly brace developer - Michael Newton - Codemotion Amsterdam 2016Codemotion
 
Welcome to Mordor - Daniel Kahn - Codemotion Amsterdam 2016
Welcome to Mordor - Daniel Kahn - Codemotion Amsterdam 2016Welcome to Mordor - Daniel Kahn - Codemotion Amsterdam 2016
Welcome to Mordor - Daniel Kahn - Codemotion Amsterdam 2016Codemotion
 
Sinfonier: How I turned my grandmother into a data analyst - Fran J. Gomez - ...
Sinfonier: How I turned my grandmother into a data analyst - Fran J. Gomez - ...Sinfonier: How I turned my grandmother into a data analyst - Fran J. Gomez - ...
Sinfonier: How I turned my grandmother into a data analyst - Fran J. Gomez - ...Codemotion
 
React Native - Unleash the power of React in your device - Eduard Tomàs - Cod...
React Native - Unleash the power of React in your device - Eduard Tomàs - Cod...React Native - Unleash the power of React in your device - Eduard Tomàs - Cod...
React Native - Unleash the power of React in your device - Eduard Tomàs - Cod...Codemotion
 
Distributed Companies: A WordPress.com Team Perspective - Davide Casali - Cod...
Distributed Companies: A WordPress.com Team Perspective - Davide Casali - Cod...Distributed Companies: A WordPress.com Team Perspective - Davide Casali - Cod...
Distributed Companies: A WordPress.com Team Perspective - Davide Casali - Cod...Codemotion
 
OrientDB - the 2nd generation of (MultiModel) NoSQL - Luigi Dell Aquila - Cod...
OrientDB - the 2nd generation of (MultiModel) NoSQL - Luigi Dell Aquila - Cod...OrientDB - the 2nd generation of (MultiModel) NoSQL - Luigi Dell Aquila - Cod...
OrientDB - the 2nd generation of (MultiModel) NoSQL - Luigi Dell Aquila - Cod...Codemotion
 
Microsoft &lt;3 Open Source: Un anno dopo!
Microsoft &lt;3 Open Source: Un anno dopo!Microsoft &lt;3 Open Source: Un anno dopo!
Microsoft &lt;3 Open Source: Un anno dopo!Codemotion
 

En vedette (20)

Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
 
Engage and retain users in the mobile world
Engage and retain users in the mobile worldEngage and retain users in the mobile world
Engage and retain users in the mobile world
 
Everything you always wanted to know about highly available distributed datab...
Everything you always wanted to know about highly available distributed datab...Everything you always wanted to know about highly available distributed datab...
Everything you always wanted to know about highly available distributed datab...
 
Maker Experience: user centered toolkit for makers
Maker Experience: user centered toolkit for makersMaker Experience: user centered toolkit for makers
Maker Experience: user centered toolkit for makers
 
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
Living on the Edge (Service) - Mark Heckler - Codemotion Amsterdam 2016
 
The rise and fall and rise of Virtual Reality - Adriaan Rijkens - Codemotion...
The rise and fall and rise of Virtual Reality -  Adriaan Rijkens - Codemotion...The rise and fall and rise of Virtual Reality -  Adriaan Rijkens - Codemotion...
The rise and fall and rise of Virtual Reality - Adriaan Rijkens - Codemotion...
 
NoSQL on the move
NoSQL on the moveNoSQL on the move
NoSQL on the move
 
Software environmentalism - Tudor Girba - Codemotion Amsterdam 2016
Software environmentalism - Tudor Girba - Codemotion Amsterdam 2016Software environmentalism - Tudor Girba - Codemotion Amsterdam 2016
Software environmentalism - Tudor Girba - Codemotion Amsterdam 2016
 
Demistifying the 3D Web
Demistifying the 3D WebDemistifying the 3D Web
Demistifying the 3D Web
 
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016
Death to Icon Fonts - Seren Davies - Codemotion Amsterdam 2016
 
Customize and control connected devices
Customize and control connected devicesCustomize and control connected devices
Customize and control connected devices
 
If security is hard, you are doing it wrong - Fabio Locati - Codemotion Amste...
If security is hard, you are doing it wrong - Fabio Locati - Codemotion Amste...If security is hard, you are doing it wrong - Fabio Locati - Codemotion Amste...
If security is hard, you are doing it wrong - Fabio Locati - Codemotion Amste...
 
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016
Angular2 and Redux - up & running - Nir Kaufman - Codemotion Amsterdam 2016
 
F# for the curly brace developer - Michael Newton - Codemotion Amsterdam 2016
F# for the curly brace developer - Michael Newton - Codemotion Amsterdam 2016F# for the curly brace developer - Michael Newton - Codemotion Amsterdam 2016
F# for the curly brace developer - Michael Newton - Codemotion Amsterdam 2016
 
Welcome to Mordor - Daniel Kahn - Codemotion Amsterdam 2016
Welcome to Mordor - Daniel Kahn - Codemotion Amsterdam 2016Welcome to Mordor - Daniel Kahn - Codemotion Amsterdam 2016
Welcome to Mordor - Daniel Kahn - Codemotion Amsterdam 2016
 
Sinfonier: How I turned my grandmother into a data analyst - Fran J. Gomez - ...
Sinfonier: How I turned my grandmother into a data analyst - Fran J. Gomez - ...Sinfonier: How I turned my grandmother into a data analyst - Fran J. Gomez - ...
Sinfonier: How I turned my grandmother into a data analyst - Fran J. Gomez - ...
 
React Native - Unleash the power of React in your device - Eduard Tomàs - Cod...
React Native - Unleash the power of React in your device - Eduard Tomàs - Cod...React Native - Unleash the power of React in your device - Eduard Tomàs - Cod...
React Native - Unleash the power of React in your device - Eduard Tomàs - Cod...
 
Distributed Companies: A WordPress.com Team Perspective - Davide Casali - Cod...
Distributed Companies: A WordPress.com Team Perspective - Davide Casali - Cod...Distributed Companies: A WordPress.com Team Perspective - Davide Casali - Cod...
Distributed Companies: A WordPress.com Team Perspective - Davide Casali - Cod...
 
OrientDB - the 2nd generation of (MultiModel) NoSQL - Luigi Dell Aquila - Cod...
OrientDB - the 2nd generation of (MultiModel) NoSQL - Luigi Dell Aquila - Cod...OrientDB - the 2nd generation of (MultiModel) NoSQL - Luigi Dell Aquila - Cod...
OrientDB - the 2nd generation of (MultiModel) NoSQL - Luigi Dell Aquila - Cod...
 
Microsoft &lt;3 Open Source: Un anno dopo!
Microsoft &lt;3 Open Source: Un anno dopo!Microsoft &lt;3 Open Source: Un anno dopo!
Microsoft &lt;3 Open Source: Un anno dopo!
 

Similaire à Boxcars and Cabooses: When one more XHR is too much - Peter Chittum - Codemotion Amsterdam 2016

New Powerful API Enhancements for Summer '15
New Powerful API Enhancements for Summer '15 New Powerful API Enhancements for Summer '15
New Powerful API Enhancements for Summer '15 Salesforce Developers
 
OData: A Standard API for Data Access
OData: A Standard API for Data AccessOData: A Standard API for Data Access
OData: A Standard API for Data AccessPat Patterson
 
Business Mashups Best of the Web APIs
Business Mashups Best of the Web APIsBusiness Mashups Best of the Web APIs
Business Mashups Best of the Web APIsdreamforce2006
 
All Aboard the Boxcar! Going Beyond the Basics of REST
All Aboard the Boxcar! Going Beyond the Basics of RESTAll Aboard the Boxcar! Going Beyond the Basics of REST
All Aboard the Boxcar! Going Beyond the Basics of RESTPat Patterson
 
Intro to AppExchange - Building Composite Apps
Intro to AppExchange - Building Composite AppsIntro to AppExchange - Building Composite Apps
Intro to AppExchange - Building Composite Appsdreamforce2006
 
Real Time Integration with Salesforce Platform Events
Real Time Integration with Salesforce Platform EventsReal Time Integration with Salesforce Platform Events
Real Time Integration with Salesforce Platform EventsSalesforce Developers
 
S-Controls for Dummies
S-Controls for DummiesS-Controls for Dummies
S-Controls for Dummiesdreamforce2006
 
S-Controls for Dummies
S-Controls for DummiesS-Controls for Dummies
S-Controls for Dummiesdreamforce2006
 
Integrating with salesforce
Integrating with salesforceIntegrating with salesforce
Integrating with salesforceMark Adcock
 
If you can write a Salesforce Formula you can use the command line
If you can write a Salesforce Formula you can use the command lineIf you can write a Salesforce Formula you can use the command line
If you can write a Salesforce Formula you can use the command linePeter Chittum
 
Best api features of 2016
Best api features of 2016Best api features of 2016
Best api features of 2016Peter Chittum
 
How We Built AppExchange and our Communities on the App Cloud (Platform)
How We Built AppExchange and our Communities on the App Cloud (Platform)How We Built AppExchange and our Communities on the App Cloud (Platform)
How We Built AppExchange and our Communities on the App Cloud (Platform)Dreamforce
 
MuleSoftマイクロサービスとデプロイメントパターン
MuleSoftマイクロサービスとデプロイメントパターンMuleSoftマイクロサービスとデプロイメントパターン
MuleSoftマイクロサービスとデプロイメントパターンMitch Okamoto
 
Design Patterns Every ISV Needs to Know (October 15, 2014)
Design Patterns Every ISV Needs to Know (October 15, 2014)Design Patterns Every ISV Needs to Know (October 15, 2014)
Design Patterns Every ISV Needs to Know (October 15, 2014)Salesforce Partners
 
Force.com Integration Using Web Services With .NET & PHP Apps
Force.com Integration Using Web Services With .NET & PHP AppsForce.com Integration Using Web Services With .NET & PHP Apps
Force.com Integration Using Web Services With .NET & PHP AppsSalesforce Developers
 
Modern Architectures: Integration Stories from the Field
Modern Architectures: Integration Stories from the FieldModern Architectures: Integration Stories from the Field
Modern Architectures: Integration Stories from the FieldDreamforce
 
Next Generation Web Services
Next Generation Web ServicesNext Generation Web Services
Next Generation Web Servicesdreamforce2006
 

Similaire à Boxcars and Cabooses: When one more XHR is too much - Peter Chittum - Codemotion Amsterdam 2016 (20)

New Powerful API Enhancements for Summer '15
New Powerful API Enhancements for Summer '15 New Powerful API Enhancements for Summer '15
New Powerful API Enhancements for Summer '15
 
Exploring the Salesforce REST API
Exploring the Salesforce REST APIExploring the Salesforce REST API
Exploring the Salesforce REST API
 
OData: A Standard API for Data Access
OData: A Standard API for Data AccessOData: A Standard API for Data Access
OData: A Standard API for Data Access
 
Business Mashups Best of the Web APIs
Business Mashups Best of the Web APIsBusiness Mashups Best of the Web APIs
Business Mashups Best of the Web APIs
 
All Aboard the Boxcar! Going Beyond the Basics of REST
All Aboard the Boxcar! Going Beyond the Basics of RESTAll Aboard the Boxcar! Going Beyond the Basics of REST
All Aboard the Boxcar! Going Beyond the Basics of REST
 
Intro to AppExchange - Building Composite Apps
Intro to AppExchange - Building Composite AppsIntro to AppExchange - Building Composite Apps
Intro to AppExchange - Building Composite Apps
 
Real Time Integration with Salesforce Platform Events
Real Time Integration with Salesforce Platform EventsReal Time Integration with Salesforce Platform Events
Real Time Integration with Salesforce Platform Events
 
S-Controls for Dummies
S-Controls for DummiesS-Controls for Dummies
S-Controls for Dummies
 
S-Controls for Dummies
S-Controls for DummiesS-Controls for Dummies
S-Controls for Dummies
 
Integrating with salesforce
Integrating with salesforceIntegrating with salesforce
Integrating with salesforce
 
If you can write a Salesforce Formula you can use the command line
If you can write a Salesforce Formula you can use the command lineIf you can write a Salesforce Formula you can use the command line
If you can write a Salesforce Formula you can use the command line
 
Salesforce platform session 2
 Salesforce platform session 2 Salesforce platform session 2
Salesforce platform session 2
 
Best api features of 2016
Best api features of 2016Best api features of 2016
Best api features of 2016
 
How We Built AppExchange and our Communities on the App Cloud (Platform)
How We Built AppExchange and our Communities on the App Cloud (Platform)How We Built AppExchange and our Communities on the App Cloud (Platform)
How We Built AppExchange and our Communities on the App Cloud (Platform)
 
Introduction to Apex for Developers
Introduction to Apex for DevelopersIntroduction to Apex for Developers
Introduction to Apex for Developers
 
MuleSoftマイクロサービスとデプロイメントパターン
MuleSoftマイクロサービスとデプロイメントパターンMuleSoftマイクロサービスとデプロイメントパターン
MuleSoftマイクロサービスとデプロイメントパターン
 
Design Patterns Every ISV Needs to Know (October 15, 2014)
Design Patterns Every ISV Needs to Know (October 15, 2014)Design Patterns Every ISV Needs to Know (October 15, 2014)
Design Patterns Every ISV Needs to Know (October 15, 2014)
 
Force.com Integration Using Web Services With .NET & PHP Apps
Force.com Integration Using Web Services With .NET & PHP AppsForce.com Integration Using Web Services With .NET & PHP Apps
Force.com Integration Using Web Services With .NET & PHP Apps
 
Modern Architectures: Integration Stories from the Field
Modern Architectures: Integration Stories from the FieldModern Architectures: Integration Stories from the Field
Modern Architectures: Integration Stories from the Field
 
Next Generation Web Services
Next Generation Web ServicesNext Generation Web Services
Next Generation Web Services
 

Plus de Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 

Plus de Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Dernier

MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 

Dernier (20)

MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 

Boxcars and Cabooses: When one more XHR is too much - Peter Chittum - Codemotion Amsterdam 2016

  • 1. Boxcars and Cabooses When one more XHR is too much Peter Chittum Developer Evangelist @pchittum github.com/pchittum Cleaning up your CRUDdy API
  • 2. Forward Looking Statement Safe harbor statement under the Private Securities Litigation Reform Act of 1995: This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward- looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services. The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non- salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site. Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.
  • 3. ?
  • 4.
  • 5. Agile and elastic platform that developers love Smarter infrastructure lets you build apps that scale Open and extensible Modern language support and ecosystem of 150+ add-ons Connected to Force.com Sync customer apps with business processes Build Customer-Facing Apps with Heroku
  • 6. Force.com - Employee Facing Apps ​  Apps HR Product Supply Chain ITFinanceOps
  • 7. Multi Tenant 150k customers 40 Prod POD’s 40 Prod DB’s
  • 8. Pre-Built Apps ​ AppExchange is the #1 Business App Marketplace Customized for Salesforce Trusted and Secure Reviewed by Peers Over 2,800 apps 3 million installs
  • 10. Comprehensive Suite of APIs and Toolkits Web Service Endpoint Web Service Endpoint Apex WS/REST Outbound Messaging Business Logic Sync Bulk API Streaming API Topic CRUD Data Bayeux Client Applications and Middleware Java SDK Ruby gem PHP Toolkit Mobile SDK 3rd Party Adapters Apex Callouts
  • 11. ​ Overall site peak day •  >4 Billion transactions •  200-250 milliseconds average •  ~30% of transactions via API requests Salesforce’s Daily API Performance Yesterday: ??? ​ Source: trust.salesforce.com
  • 12. Automatic REST Endpoint Creation ​ POST /services/data/v35.0/sobjects/Account BODY: { "Name" : "CodeMotion Amsterdam", "BillingCountry" : "Netherlands" }
  • 13. Create Record ​ POST /services/data/v35.0/sobjects/Account BODY: { "Name" : "CodeMotion Amsterdam", "BillingCountry" : "Netherlands" }
  • 14. Fetch Record ​ GET /services/data/v35.0/sobjects/Account/0012400000NBMWyAAP SUCCESS RESPONSE: { "attributes" : {"type" : "Account”,"url" : "...”}, "Id" : "0012400000NBMWyAAP", "Name" : "CodeMotion Amsterdam", "BillingCountry" : "Netherlands", ... }
  • 15. Query Endpoint ​ GET /services/data/v35.0/query?q=SELECT ... FROM Account WHERE ... SUCCESS RESPONSE: { "totalSize" : 2, "done" : true, "records" : [ {"attributes" : {"type" : "Account","url" : "..."}, "Id" : "0012400000NBMWyAAP", "Name" : "Test 123",...}, {...}, ...]}
  • 16. Describe (Discover) ​ GET /services/data/v35.0/sobjects/Account/describe SUCCESS RESPONSE: { ... "queryable" : true, "searchable" : true, "updateable" : true, ... }
  • 17. Limits ​ GET /services/data/v35.0/limits SUCCESS RESPONSE: { ... "DailyBulkApiRequests": {"Max" : 5000,"Remaining" : 5000}, "DailyStreamingApiEvents": {"Max" : 10000,"Remaining" : 9996}, "DataStorageMB" : {"Max" : 5,"Remaining" : 5}, ... }
  • 18. Many Requests Many Server Trips POST Record GET Server Gen Data GET API Limits
  • 19.
  • 20.
  • 21. Composite Batch REST API .../composite/batch POST Batch { "batchRequests":[ {POST}, {GET}, {GET} ] }
  • 22. Sample Batch Request ​ POST: <salesforcedomain>/services/data/v35.0/composite/batch ​ {"batchRequests" : [ ​  {"method" : "POST", ​  "url" : "v35.0/sobjects/account/", ​  "richInput" : {"Name" : "NewName", "Industry" : "Tech"}}, ​  {"method" : "GET", ​  "url" : "v35.0/query?q=select id, name, industry from account ​  order by createddate desc limit 10"}, ​  {"method" : "GET", ​  "url" : "v35.0/limits" ​  }] ​ }
  • 23. Sample Batch Response Object ​ { ​  "hasErrors": false, ​  "results": [ ​  { "statusCode": 201, "result": {...} }, ​  { "statusCode": 200, "result": {...} }, ​  { "statusCode": 200, "result": {...} } ​  ] ​ }
  • 24. Batch Request Behavior •  Resource which accepts multiple REST calls to execute •  Up to 25 sub-requests •  URI, Method, and optional Body •  Sub-requests can be unrelated API calls •  Sub-requests are executed serially, in order, and as the running user •  Commit each subrequest on completion •  Optional parameter: haltOnError •  Do not continue after error occurs •  But check subrequests for errors
  • 26. Parent/Child Related Data POST Account POST related Contacts POST related Cases RESP: Account ID RESP: Contact IDs RESP: Case IDs
  • 27. Composite Tree REST API .../composite/tree/entity POST Tree ”records":[ {parent1}, {parent2}, {parent3} ]
  • 28. Sample Tree Request ​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account ​ {"records" :[ ​  {"attributes": {"type":"Account", "referenceId":"ref1"}, ​  "name" : "CodeMotion", "phone" : "1234567890", ​  "type" : "Customer", "industry" : "Events", ​  "Contacts" : { ​  "records" : [ ​  {"attributes": {"type":"Contact", "referenceId":"ref2"}, ​  "lastname" : "Smith", "title" : "Organizer"}, ​  ...]}, ​  "Cases" : { ​  "records" : [ ​  {"attributes": {"type":"Case", "referenceId":"ref3"}, ​  "" : "", "" : "", "" : ""} ​  ...]}, }}, ...] }
  • 29. Sample Tree Request: Many Records ​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account ​ {"records" :[ ​  {"attributes": {"type":"Account", "referenceId":"ref1"}, ​  "name" : "CodeMotion", "phone" : "1234567890", ​  "type" : "Customer", "industry" : "Events", ​  "Contacts" : { ​  "records" : [ ​  {"attributes": {"type":"Contact", "referenceId":"ref2"}, ​  "lastname" : "Smith", "title" : "Organizer"}, ​  ...]}, ​  "Cases" : { ​  "records" : [ ​  {"attributes": {"type":"Case", "referenceId":"ref3"}, ​  "" : "", "" : "", "" : ""} ​  ...]}, }}, ...] }
  • 30. Sample Tree Request: Parent Record ​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account ​ {"records" :[ ​  {"attributes": {"type":"Account", "referenceId":"ref1"}, ​  "name" : "CodeMotion", "phone" : "1234567890", ​  "type" : "Customer", "industry" : "Events", ​  "Contacts" : { ​  "records" : [ ​  {"attributes": {"type":"Contact", "referenceId":"ref2"}, ​  "lastname" : "Smith", "title" : "Organizer"}, ​  ...]}, ​  "Cases" : { ​  "records" : [ ​  {"attributes": {"type":"Case", "referenceId":"ref3"}, ​  "" : "", "" : "", "" : ""} ​  ...]}, }}, ...] }
  • 31. Sample Tree Request: Child Records ​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account ​ {"records" :[ ​  {"attributes": {"type":"Account", "referenceId":"ref1"}, ​  "name" : "CodeMotion", "phone" : "1234567890", ​  "type" : "Customer", "industry" : "Events", ​  "Contacts" : { ​  "records" : [ ​  {"attributes": {"type":"Contact", "referenceId":"ref2"}, ​  "lastname" : "Smith", "title" : "Organizer"}, ​  ...]}, ​  "Cases" : { ​  "records" : [ ​  {"attributes": {"type":"Case", "referenceId":"ref3"}, ​  "" : "", "" : "", "" : ""} ​  ...]}, }}, ...] }
  • 32. Sample Tree Request: Client Ids ​ POST: <salesforcedomain>/services/data/v35.0/composite/tree/Account ​ {"records" :[ ​  {"attributes": {"type":"Account", "referenceId":"ref1"}, ​  "name" : "CodeMotion", "phone" : "1234567890", ​  "type" : "Analyst", "industry" : "Events", ​  "Contacts" : { ​  "records" : [ ​  {"attributes": {"type":"Contact", "referenceId":"ref2"}, ​  "lastname" : "Smith", "title" : "Organizer"}, ​  ...]}, ​  "Cases" : { ​  "records" : [ ​  {"attributes": {"type":"Case", "referenceId":"ref3"}, ​  "" : "", "" : "", "" : ""} ​  ...]}, }}, ...] }
  • 33. Demo
  • 34. The (Near) Future ​ Extension of Batch and Composite ​ Outputs from one sub request to be used as inputs for the another
  • 35. Possible Future Features ​ Parameter-based values ​ Basic orchestration baked into /batch ​ Updates on /tree
  • 37. Aura and Lightning Component Framework Lightning Component Framework
  • 38. Lightning Component Design Principles •  Component author namespacing •  Automatic component-based CSS namespacing •  Everything is a component •  Allow for programmatic or point-and-click UI composition •  Enable Salesforce, customers, and partners to build composite UIs •  Works on any form factor
  • 40. Many Components Many Server Trips XMLHttpRequest XMLHttpRequest XMLHttpRequest
  • 41. Actions: Interact with the Server •  Apex Method Surfaced to Lightning Components •  @AuraEnabled annotation
  • 42. Boxcarring: Many Actions, One XHR ActionService
  • 43. Caboose: Postpone High Volume Actions ActionService •  Defer High-Volume Actions •  Action.setCaboose()
  • 44. Action Service: Server Side API ​ Apex: Code on Force.com
  • 46. Upcoming Features ​ Integration of offline data store with Action service ​ Ability to prioritize actions
  • 47. Takeaways ​ Minimize server requests ​ Optimize CRUD-based APIs with aggregation ​ Optimize creation of hierarchical data ​ Client-side libraries to support request batching
  • 51. Q & A Peter Chittum Developer Evangelist @pchittum github.com/pchittum ​ Learn: developer.salesforce.com/trailhead ​ Meetup: bit.ly/ams-sf-devs