SlideShare a Scribd company logo
1 of 50
Download to read offline
digitaldrummerjhttps://digitaldrummerj.me
Justin James
Web Developer
Microsoft MVP
Professional Speaker
digitaldrummerjhttps://digitaldrummerj.me
Create JavaScript Services
2
digitaldrummerjhttps://digitaldrummerj.me
Auto-generated REST APIs
3
digitaldrummerjhttps://digitaldrummerj.me
Any Database
4
digitaldrummerjhttps://digitaldrummerj.me
Flexible and Configurable
5
digitaldrummerjhttps://digitaldrummerj.me
Security
6
digitaldrummerjhttps://digitaldrummerj.me
Built-On
Top of
7
digitaldrummerjhttps://digitaldrummerj.me
Why I Love Sails
8
digitaldrummerjhttps://digitaldrummerj.me
Ridiculously Fast
9
digitaldrummerjhttps://digitaldrummerj.me
Just Works
10
digitaldrummerjhttps://digitaldrummerj.me
Does NOT hide the magic
11
digitaldrummerjhttps://digitaldrummerj.me 12
digitaldrummerjhttps://digitaldrummerj.me
tiny amounts of code
gets you a ton!
13
digitaldrummerjhttps://digitaldrummerj.me
Getting Started
14
digitaldrummerjhttps://digitaldrummerj.me
Install
15
digitaldrummerjhttps://digitaldrummerj.me
Setup
npm install –g sails
16
digitaldrummerjhttps://digitaldrummerj.me
Create Project
sails new [Project Name]
Select #2 – Blank App
17
digitaldrummerjhttps://digitaldrummerj.me
Start Sails Server
sails lift
18
digitaldrummerjhttps://digitaldrummerj.me
Debug API
sails inspect
19
digitaldrummerjhttps://digitaldrummerj.me
Interactive Console
sails console
20
digitaldrummerjhttps://digitaldrummerj.me
Generate
sails generate [type] [name]
21
digitaldrummerjhttps://digitaldrummerj.me
represents a record
usually maps to db table
attributes map to columns
Models
22
sails generate model
digitaldrummerjhttps://digitaldrummerj.me
Dictionary of actions
Responds to requests
Bound to routes
Controllers
sails generate controller
25
digitaldrummerjhttps://digitaldrummerj.me
Responds to requests
Bound to routes
Structured way to create an action
1 file per action
Self-documenting and validating
Action
sails generate action [ctrl/name]
26
digitaldrummerjhttps://digitaldrummerj.me
Responses to actions
Standard responses included
Can create custom responses
Responses
27
sails generate response
digitaldrummerjhttps://digitaldrummerj.me
200 – ok, send
500 - serverError
404 - notFound
403 - forbidden
400 – badRequest
[Code] – json, send
Standard
Responses
28
digitaldrummerjhttps://digitaldrummerj.me
reusable code
available across whole app
Helpers
29
sails generate helper
digitaldrummerjhttps://digitaldrummerj.me
Exposes a set of commonly-used functions
as Sails helpers
Examples:
password: hash and check
gravatar: get avatar url
stripe: bill info and charging
Optional Helpers
npm i sails-hook-organics --save
30
digitaldrummerjhttps://digitaldrummerj.me
Generates both Model and ControllerAPI
31
sails generate api
digitaldrummerjhttps://digitaldrummerj.me
Using Api
POST http://localhost:1337/<Name>
GET http://localhost:1337/<Name>
GET http://localhost:1337/<Name>/:id
PATCH http://localhost:1337/<Name>/:id
DELETE http://localhost:1337/<Name>/:id
32
digitaldrummerjhttps://digitaldrummerj.me
Override Controller Example
module.exports = {
find: function findFn(req, res) {}, // GET
findOne: function findOneFn(req, res) {}, // GET/id
create: function createFn(req, res) {}, // POST
update: function updateFn(req, res) {}, // PUT
destroy: function deleteFn(req, res) {}, // DELETE
}
33
digitaldrummerjhttps://digitaldrummerj.me
Override Controller Example
module.exports = {
find: function findFn(req, res) {}, // GET
findOne: function findOneFn(req, res) {}, // GET/id
create: function createFn(req, res) {}, // POST
update: function updateFn(req, res) {}, // PUT
destroy: function deleteFn(req, res) {}, // DELETE
}
34
digitaldrummerjhttps://digitaldrummerj.me
Override Controller Example
module.exports = {
find: function findFn(req, res) {}, // GET
findOne: function findOneFn(req, res) {}, // GET/id
create: function createFn(req, res) {}, // POST
update: function updateFn(req, res) {}, // PUT
destroy: function deleteFn(req, res) {}, // DELETE
}
35
digitaldrummerjhttps://digitaldrummerj.me
Override Controller Example
module.exports = {
find: function findFn(req, res) {}, // GET
findOne: function findOneFn(req, res) {}, // GET/id
create: function createFn(req, res) {}, // POST
update: function updateFn(req, res) {}, // PUT
destroy: function deleteFn(req, res) {}, // DELETE
}
36
digitaldrummerjhttps://digitaldrummerj.me
Override Controller Example
module.exports = {
find: function findFn(req, res) {}, // GET
findOne: function findOneFn(req, res) {}, // GET/id
create: function createFn(req, res) {}, // POST
update: function updateFn(req, res) {}, // PUT
destroy: function deleteFn(req, res) {}, // DELETE
}
37
digitaldrummerjhttps://digitaldrummerj.me
Override Controller Example
module.exports = {
find: function findFn(req, res) {}, // GET
findOne: function findOneFn(req, res) {}, // GET/id
create: function createFn(req, res) {}, // POST
update: function updateFn(req, res) {}, // PUT
destroy: function deleteFn(req, res) {}, // DELETE
}
38
digitaldrummerjhttps://digitaldrummerj.me
Override Action Example
apicontrollers[controller]find.js // GET
apicontrollers[controller]find-one.js // GET/id
apicontrollers[controller]create.js // POST
apicontrollers[controller]update.js // PUT
apicontrollers[controller]destroy // DELETE
39
digitaldrummerjhttps://digitaldrummerj.me
Override Action Example
apicontrollers[controller]find.js // GET
apicontrollers[controller]find-one.js // GET/id
apicontrollers[controller]create.js // POST
apicontrollers[controller]update.js // PUT
apicontrollers[controller]destroy // DELETE
40
digitaldrummerjhttps://digitaldrummerj.me
Override Action Example
apicontrollers[controller]find.js // GET
apicontrollers[controller]find-one.js // GET/id
apicontrollers[controller]create.js // POST
apicontrollers[controller]update.js // PUT
apicontrollers[controller]destroy // DELETE
41
digitaldrummerjhttps://digitaldrummerj.me
Override Action Example
apicontrollers[controller]find.js // GET
apicontrollers[controller]find-one.js // GET/id
apicontrollers[controller]create.js // POST
apicontrollers[controller]update.js // PUT
apicontrollers[controller]destroy // DELETE
42
digitaldrummerjhttps://digitaldrummerj.me
Override Action Example
apicontrollers[controller]find.js // GET
apicontrollers[controller]find-one.js // GET/id
apicontrollers[controller]create.js // POST
apicontrollers[controller]update.js // PUT
apicontrollers[controller]destroy // DELETE
43
digitaldrummerjhttps://digitaldrummerj.me
Override Action Example
apicontrollers[controller]find.js // GET
apicontrollers[controller]find-one.js // GET/id
apicontrollers[controller]create.js // POST
apicontrollers[controller]update.js // PUT
apicontrollers[controller]destroy // DELETE
44
digitaldrummerjhttps://digitaldrummerj.me
Override Action Example
apicontrollers[controller]find.js // GET
apicontrollers[controller]find-one.js // GET/id
apicontrollers[controller]create.js // POST
apicontrollers[controller]update.js // PUT
apicontrollers[controller]destroy // DELETE
sails generate action [controller]/[action]
45
digitaldrummerjhttps://digitaldrummerj.me
Interpret a request sent to a URL, then send
back a response
Custom or Automatic
Routing
64
digitaldrummerjhttps://digitaldrummerj.me
Execute some logic before an action to
determine if request is processed
Stored in apipolicies folder
Configured in apiconfigpolicies.js
Route
Security
46
digitaldrummerjhttps://digitaldrummerj.me
Allows scripts served from other domains
Disabled By Default
Origin can be array of urls
App wide or individual routes
CORS
62
config/security.js
digitaldrummerjhttps://digitaldrummerj.me
CODING TIME
Todo API
- users have to login to see data
- users can only see their data
- users can only register once
- passwords must be hashed or
returned
- todo items associated to users
67
digitaldrummerjhttps://digitaldrummerj.me
References
Documentation: sailsjs.com/
Slides: slideshare.net/digitaldrummerj/
Demo Code: github.com/digitaldrummerj/stirtrek-2018-sailsjs
68
digitaldrummerjhttps://digitaldrummerj.me
digitaldrummerj.me
digitaldrummerj
69
digitaldrummerjhttps://digitaldrummerj.me

More Related Content

What's hot

Building Better Applications with Data::Manager
Building Better Applications with Data::ManagerBuilding Better Applications with Data::Manager
Building Better Applications with Data::Manager
Jay Shirley
 
Firefox OS learnings & visions, WebAPIs - budapest.mobile
Firefox OS learnings & visions, WebAPIs - budapest.mobileFirefox OS learnings & visions, WebAPIs - budapest.mobile
Firefox OS learnings & visions, WebAPIs - budapest.mobile
Robert Nyman
 
Uazaa uma-farsa-parte 2
Uazaa uma-farsa-parte 2Uazaa uma-farsa-parte 2
Uazaa uma-farsa-parte 2
devninjabr
 
Error xaction etl_ktr
Error xaction etl_ktrError xaction etl_ktr
Error xaction etl_ktr
hurac
 
Social Coding With JRuby
Social Coding With JRubySocial Coding With JRuby
Social Coding With JRuby
Koichiro Ohba
 
Desymfony 2011 - Habemus Bundles
Desymfony 2011 - Habemus BundlesDesymfony 2011 - Habemus Bundles
Desymfony 2011 - Habemus Bundles
Albert Jessurum
 

What's hot (20)

Building Better Applications with Data::Manager
Building Better Applications with Data::ManagerBuilding Better Applications with Data::Manager
Building Better Applications with Data::Manager
 
はじめてのSymfony2
はじめてのSymfony2はじめてのSymfony2
はじめてのSymfony2
 
Celluloid - Beyond Sidekiq
Celluloid - Beyond SidekiqCelluloid - Beyond Sidekiq
Celluloid - Beyond Sidekiq
 
Universal JavaScript
Universal JavaScriptUniversal JavaScript
Universal JavaScript
 
Celluloid, Celluloid::IO and Friends
Celluloid, Celluloid::IO and FriendsCelluloid, Celluloid::IO and Friends
Celluloid, Celluloid::IO and Friends
 
Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
 
Javascript Common Mistakes
Javascript Common MistakesJavascript Common Mistakes
Javascript Common Mistakes
 
Firefox OS learnings & visions, WebAPIs - budapest.mobile
Firefox OS learnings & visions, WebAPIs - budapest.mobileFirefox OS learnings & visions, WebAPIs - budapest.mobile
Firefox OS learnings & visions, WebAPIs - budapest.mobile
 
All That Jazz
All  That  JazzAll  That  Jazz
All That Jazz
 
Uazaa uma-farsa-parte 2
Uazaa uma-farsa-parte 2Uazaa uma-farsa-parte 2
Uazaa uma-farsa-parte 2
 
Error xaction etl_ktr
Error xaction etl_ktrError xaction etl_ktr
Error xaction etl_ktr
 
Social Coding With JRuby
Social Coding With JRubySocial Coding With JRuby
Social Coding With JRuby
 
fabfile.py
fabfile.pyfabfile.py
fabfile.py
 
Desymfony 2011 - Habemus Bundles
Desymfony 2011 - Habemus BundlesDesymfony 2011 - Habemus Bundles
Desymfony 2011 - Habemus Bundles
 
PHP Backdoor: The rise of the vuln
PHP Backdoor: The rise of the vulnPHP Backdoor: The rise of the vuln
PHP Backdoor: The rise of the vuln
 
Search and Replacement Techniques in Emacs: avy, swiper, multiple-cursor, ag,...
Search and Replacement Techniques in Emacs: avy, swiper, multiple-cursor, ag,...Search and Replacement Techniques in Emacs: avy, swiper, multiple-cursor, ag,...
Search and Replacement Techniques in Emacs: avy, swiper, multiple-cursor, ag,...
 
Spark手把手:[e2-spk-s01]
Spark手把手:[e2-spk-s01]Spark手把手:[e2-spk-s01]
Spark手把手:[e2-spk-s01]
 
Php web backdoor obfuscation
Php web backdoor obfuscationPhp web backdoor obfuscation
Php web backdoor obfuscation
 
Emacs Key Bindings
Emacs Key BindingsEmacs Key Bindings
Emacs Key Bindings
 
Spark手把手:[e2-spk-s03]
Spark手把手:[e2-spk-s03]Spark手把手:[e2-spk-s03]
Spark手把手:[e2-spk-s03]
 

Similar to KCDC 2018 - Rapid API Development with Sails

Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacript
Lei Kang
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
ronnywang_tw
 
WordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটি
WordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটিWordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটি
WordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটি
Faysal Shahi
 
DEVIEW2013: Automating Performance Tests for Android Applications
DEVIEW2013: Automating Performance Tests for Android ApplicationsDEVIEW2013: Automating Performance Tests for Android Applications
DEVIEW2013: Automating Performance Tests for Android Applications
Kyungmin Lee
 
DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)
Oleg Zinchenko
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
patter
 

Similar to KCDC 2018 - Rapid API Development with Sails (20)

Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request Flow
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacript
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
 
WordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটি
WordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটিWordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটি
WordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটি
 
Applications: A Series of States
Applications: A Series of StatesApplications: A Series of States
Applications: A Series of States
 
My name is Trinidad
My name is TrinidadMy name is Trinidad
My name is Trinidad
 
Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)
 
Writing JavaScript that doesn't suck
Writing JavaScript that doesn't suckWriting JavaScript that doesn't suck
Writing JavaScript that doesn't suck
 
Clearance: Simple, complete Ruby web app authentication.
Clearance: Simple, complete Ruby web app authentication.Clearance: Simple, complete Ruby web app authentication.
Clearance: Simple, complete Ruby web app authentication.
 
HTML_HHC
HTML_HHCHTML_HHC
HTML_HHC
 
파이썬 개발환경 구성하기의 끝판왕 - Docker Compose
파이썬 개발환경 구성하기의 끝판왕 - Docker Compose파이썬 개발환경 구성하기의 끝판왕 - Docker Compose
파이썬 개발환경 구성하기의 끝판왕 - Docker Compose
 
Scaling Cairngorms
Scaling CairngormsScaling Cairngorms
Scaling Cairngorms
 
DEVIEW2013: Automating Performance Tests for Android Applications
DEVIEW2013: Automating Performance Tests for Android ApplicationsDEVIEW2013: Automating Performance Tests for Android Applications
DEVIEW2013: Automating Performance Tests for Android Applications
 
Debugging & profiling node.js
Debugging & profiling node.jsDebugging & profiling node.js
Debugging & profiling node.js
 
Seti 09
Seti 09Seti 09
Seti 09
 
DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
 
Redmine Betabeers SVQ
Redmine Betabeers SVQRedmine Betabeers SVQ
Redmine Betabeers SVQ
 
Tdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyTdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema Ruby
 
Tasks: you gotta know how to run them
Tasks: you gotta know how to run themTasks: you gotta know how to run them
Tasks: you gotta know how to run them
 

More from Justin James

Mobile Dev For Web Devs
Mobile Dev For Web DevsMobile Dev For Web Devs
Mobile Dev For Web Devs
Justin James
 

More from Justin James (9)

Angular Unit Testing NDC Minn 2018
Angular Unit Testing NDC Minn 2018Angular Unit Testing NDC Minn 2018
Angular Unit Testing NDC Minn 2018
 
Mobile Dev For Web Devs
Mobile Dev For Web DevsMobile Dev For Web Devs
Mobile Dev For Web Devs
 
Angular Unit Testing from the Trenches
Angular Unit Testing from the TrenchesAngular Unit Testing from the Trenches
Angular Unit Testing from the Trenches
 
Up and Running with Angular
Up and Running with AngularUp and Running with Angular
Up and Running with Angular
 
Everyone is a Public Speaker
Everyone is a Public SpeakerEveryone is a Public Speaker
Everyone is a Public Speaker
 
Visual Studio Tools for Apache Cordova (TACO) and Ionic
Visual Studio Tools for Apache Cordova (TACO) and IonicVisual Studio Tools for Apache Cordova (TACO) and Ionic
Visual Studio Tools for Apache Cordova (TACO) and Ionic
 
Ionic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application DevelopmentIonic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application Development
 
Chocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pieChocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pie
 
Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
+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...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

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...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
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
 
"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 ...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
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
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
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...
 
+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...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
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...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

KCDC 2018 - Rapid API Development with Sails