(Go: >> BACK << -|- >> HOME <<)

SlideShare a Scribd company logo
Beautiful REST+JSON APIs
with Ion
Les Hazlewood @lhazlewood
CTO, Stormpath, stormpath.com
@lhazlewood @goStormpath
.com
• User Management API for Developers
• Password security
• Authentication and Authorization
• LDAP/AD/Social/SAML/OAuth support
• Instant-on, scalable, and highly available
• Free for developers
@lhazlewood @goStormpath
Why REST?
• Scalability
• Generality
• Independence
• Latency (Caching)
• Security
• Encapsulation
@lhazlewood @goStormpath
Why JSON?
• Ubiquity
• Simplicity
• Readability
• Scalability
• Flexibility
@lhazlewood @goStormpath
REST Is Easy
@lhazlewood @goStormpath
REST Is *&@#$! Hard
(for providers)
@lhazlewood @goStormpath
JSON – No Spec
@lhazlewood @goStormpath
REST can be easy
(if you follow some guidelines)
@lhazlewood @goStormpath
HATEOAS
• Hypermedia
• As
• The
• Engine
• Of
• Application
• State
@lhazlewood @goStormpath
HATEOAS
• Links
• State Transitions
@lhazlewood @goStormpath
Fielding’s Requirements
roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-
driven:
• Communication Protocol Independent
• Media Type Centric
• No Fixed Names / Hierarchies
• Dynamically Typed!
• ZERO OUT-OF-BAND KNOWLEDGE
@lhazlewood @goStormpath
How do we meet these
requirements?
@lhazlewood @goStormpath
How do we...?
Base URL
Versioning
Resource Format
Return Values
Content Negotiation
References (Linking)
Pagination
Query Parameters
Create/Update
Search
Associations
Errors
IDs
Method Overloading
Resource Expansion
Partial Responses
Caching & Etags
Security
Multi Tenancy
Maintenance
Batch Operations
@lhazlewood @goStormpath
Fundamentals
@lhazlewood @goStormpath
Resources
Nouns, not Verbs
Coarse Grained, not Fine Grained
Architectural style for use-case scalability
@lhazlewood @goStormpath
What If?
/getAccount
/createDirectory
/updateGroup
/verifyAccountEmailAddress
@lhazlewood @goStormpath
What If?
/getAccount
/getAllAccounts
/searchAccounts
/createDirectory
/createLdapDirectory
/updateGroup
/updateGroupName
/findGroupsByDirectory
/searchGroupsByName
/verifyAccountEmailAddress
/verifyAccountEmailAddressByToken
…
Smells like bad RPC. DON’T DO THIS.
@lhazlewood @goStormpath
Keep It Simple
@lhazlewood @goStormpath
The Answer
Fundamentally two types of resources:
Collection Resource
Instance Resource
@lhazlewood @goStormpath
Collection Resource
/applications
@lhazlewood @goStormpath
Instance Resource
/applications/a1b2c3
@lhazlewood @goStormpath
Behavior
• GET
• PUT
• POST
• DELETE
• HEAD
@lhazlewood @goStormpath
Behavior
POST, GET, PUT, DELETE
≠ 1:1
Create, Read, Update, Delete
@lhazlewood @goStormpath
Behavior
As you would expect:
GET = Read
DELETE = Delete
HEAD = Headers, no Body
@lhazlewood @goStormpath
Behavior
Not so obvious:
PUT and POST can both be used for
Create and Update
@lhazlewood @goStormpath
PUT for Create
Identifier is known by the client:
PUT /applications/clientSpecifiedId
{
…
}
@lhazlewood @goStormpath
PUT for Update
Full Replacement
PUT /applications/existingId
{
“name”: “Best App Ever”,
“description”: “Awesomeness”
}
@lhazlewood @goStormpath
PUT
Idempotent
@lhazlewood @goStormpath
POST as Create
On a parent resource
POST /applications
{
“name”: “Best App Ever”
}
Response:
201 Created
Location: https://api.stormpath.com/applications/a1b2c3
@lhazlewood @goStormpath
POST as Update
On instance resource
POST /applications/a1b2c3
{
“name”: “Best App Ever. Srsly.”
}
Response:
200 OK
@lhazlewood @goStormpath
POST
NOT Idempotent
@lhazlewood @goStormpath
Media Types
• Format Specification + Parsing Rules
• Request: Accept header
• Response: Content-Type header
• application/json
• application/ion+json
• application/ion+json;v=2
• …
@lhazlewood @goStormpath
Design Time!
@lhazlewood @goStormpath
HATEAOS in JSON: Ion
@lhazlewood @goStormpath
Resources
@lhazlewood @goStormpath
Object
{
“firstName”: “Bob”,
“lastName”: “Smith”,
“birthDate”: “1980-01-23”,
}
@lhazlewood @goStormpath
Ion Object
{
“meta”: { ... },
“firstName”: “Bob”,
“lastName”: “Smith”,
“birthDate”: “1980-01-23”,
}
@lhazlewood @goStormpath
Naïve collection (not recommended)
“items”: []
@lhazlewood @goStormpath
Collection Object
{
“items”: []
}
@lhazlewood @goStormpath
Ion Collection
{
“meta”: { ... },
“items”: []
}
@lhazlewood @goStormpath
Linking
@lhazlewood @goStormpath
HREF
• Distributed Hypermedia is paramount!
• Every accessible Resource has a canonical unique
URL
• Replaces IDs (IDs exist, but are opaque).
• Critical for linking
@lhazlewood @goStormpath
Linking in JSON?
• XML has it (XLink), JSON doesn’t
• How do we do it?
@lhazlewood @goStormpath
Naïve linking
@lhazlewood @goStormpath
Naïve linking - instance
GET /accounts/x7y8z9
200 OK
{
“givenName”: “Tony”,
“surname”: “Stark”,
…,
“directory”: ????
}
@lhazlewood @goStormpath
Naïve linking - instance cont’d
GET /accounts/x7y8z9
200 OK
{
“givenName”: “Tony”,
“surname”: “Stark”,
…,
“directory”: {
“href”: “https://api.stormpath.com/v1/directories/g4h5i6”
}
}
@lhazlewood @goStormpath
Naïve linking - collection
GET /accounts/x7y8z9
200 OK
{
“givenName”: “Tony”,
“surname”: “Stark”,
…,
“groups”: {
“href”: “https://api.stormpath.com/accounts/x7y8z9/groups”
}
}
@lhazlewood @goStormpath
Ion linking (recommended)
@lhazlewood @goStormpath
Ion meta href
GET /accounts/x7y8z9
200 OK
{
“meta”: { “href”: “https://api.stormpath.com/accounts/x7y8z9” },
“givenName”: “Tony”,
“surname”: “Stark”,
…
}
@lhazlewood @goStormpath
Ion link
GET /accounts/x7y8z9
200 OK
{
“meta”: { ... },
“givenName”: “Tony”,
“surname”: “Stark”,
…,
“directory”: {
“meta”:{ “href”: https://api.stormpath.com/directories/g4h5i6” }
}
}
@lhazlewood @goStormpath
Ion link (collection)
GET /accounts/x7y8z9
200 OK
{
“meta”: { ... },
“givenName”: “Tony”,
“surname”: “Stark”,
…,
“groups”: {
“meta”: {
“href”: “https://api.stormpath.com/accounts/x7y8z9/groups”, “rel”: [“collection”]
}
}
}
@lhazlewood @goStormpath
What about HAL?
• Linking focus
• Forces links to be separate from context/content
– (when was the last time you had to put all of your anchors at
the bottom of an html paragraph? Right... never.)
• In contrast to HAL, Ion is much more like HTML – it’s all in
one convenient spec.
• Ion transliteration to/from HTML is far easier (by design)
@lhazlewood @goStormpath
State Transitions
@lhazlewood @goStormpath
Creating And Updating
@lhazlewood @goStormpath
Remember HATEOS?
@lhazlewood @goStormpath
“Let me go read the docs to figure
out how to POST”
@lhazlewood @goStormpath
NO! This is not HATEOS.
@lhazlewood @goStormpath
How do browsers work?
@lhazlewood @goStormpath
Forms
@lhazlewood @goStormpath
Forms: Create
{
“foo”: “bar”,
“baz”: “boo”,
...
“createAccount”: {
“meta”: {“href”: “https://foo.io/users”, “rel”: [“create-form”], “method”: “POST”},
“items”: [
{“name”: “login”, “required”: “true”, “label”: “Username or Email” },
{“name”: “password”, “secret”: “true”, “required”: “true”, “label”: “Password”}
]
}
}
@lhazlewood @goStormpath
Forms: Create cont’d
{
"meta": {"href": "https://example.io/users", "rel":["create-form"], "method":"POST"},
"items": [
{"name":"username"},
{"name": "password", "secret": true },
{"name": "visitedContinents","type": "set", "minitems": 1,"maxitems": 7,"options": {
"items": [
{"label": "Africa", "value": "af" },
{"label": "North America", "value": "na" },
{"label": "South America", "value": "sa" },
{"label": "Europe", "value": "eu" },
{"label": "Asia", "value": "as" },
{"label": "Oceania", "value": "oc" },
{"label": "Antarctica", "value": "an" },
]
}
}
]
}
@lhazlewood @goStormpath
Forms: Search / Query{
...
“findAccounts”: {
“meta”: { “href”: “https://foo.io/users”, “rel”: [“search-form”], “method”: “GET” },
“items”: [
{“name”: “username”, “label”: “Username”},
{“name”: “email”, “type”: “email”, “label”: “Email” },
{“name”: “givenName”, “label”: “First Name” },
{“name”: “surname”, “label”: “Last Name”},
]
}
}
@lhazlewood @goStormpath
What about Schemas / json-schema ?
Not needed. REST != RDBMS
(are schemas necessary for browsers/HTML?)
Forms do the same thing and are more flexible/powerful
Remember Fielding’s REST Rule about Dynamic Typing
@lhazlewood @goStormpath
HTTP Protocol Semantics
@lhazlewood @goStormpath
Base URL
@lhazlewood @goStormpath
http(s)://foo.io
vs
http://www.foo.com/dev/service/api/rest
@lhazlewood @goStormpath
http(s)://foo.io
Rest Client
vs
Browser
@lhazlewood @goStormpath
Versioning
@lhazlewood @goStormpath
URL
https://api.stormpath.com/v1
vs.
Media-Type
application/json
application/ion+json
@lhazlewood @goStormpath
Content Negotiation
@lhazlewood @goStormpath
Header
• Accept header
• Header values comma delimited
• q param determines precedence, defaults to 1, then
conventionally by list order
GET /applications/a1b2c3
Accept: application/json, text/plain;q=0.8
@lhazlewood @goStormpath
Resource Extension
/applications/a1b2c3.json
/applications/a1b2c3.csv
…
Conventionally overrides Accept header
@lhazlewood @goStormpath
Style Guide
@lhazlewood @goStormpath
camelCase
‘JS’ in ‘JSON’ = JavaScript
myArray.forEach
Not myArray.for_each
account.givenName
Not account.given_name
Underscores for property/function names are unconventional
for JS. Stay consistent.
@lhazlewood @goStormpath
Dates & Times
@lhazlewood @goStormpath
Dates & Times
There’s already a standard. Use it: ISO 8601
“createdAt”: “2013-07-10T18:02:24.343Z”
Use UTC!
This is represented in Ion as a field types of date, time,
datetime, etc.
@lhazlewood @goStormpath
createdAt / updatedAt
Most people will want this at some point
{
…,
“createdAt”: “2013-07-10T18:02:24.343Z”,
“updatedAt”: “2014-09-29T07:02:48.761Z”
}
Use UTC!
@lhazlewood @goStormpath
Reference Expansion
(aka Entity Expansion, Link Expansion)
@lhazlewood @goStormpath
Account and its Directory?
@lhazlewood @goStormpath
GET /accounts/x7y8z9?expand=directory
200 OK
{
“meta”: {..., “expandable”: [“directory”,...] },
“givenName”: “Tony”,
“surname”: “Stark”,
…,
“directory”: {
“meta”: { ... },
“name”: “Avengers”,
“description”: “Hollywood’s plan for more $”,
“createdAt”: “2012-07-01T14:22:18.029Z”,
…
}
}
@lhazlewood @goStormpath
Collection Pagination
@lhazlewood @goStormpath
Ensure Collection Resources support query params:
• Offset + Limit vs Cursor
…/applications?offset=50&limit=25
• Don’t require the user to query for these – provide OOTB links
@lhazlewood @goStormpath
GET /accounts/x7y8z9/groups
200 OK
{
“meta”: { ... },
“offset”: 0,
“limit”: 25,
“first”: { “meta”:{“href”: “…/accounts/x7y8z9/groups?offset=0”}},
“previous”: null,
“next”: { “meta”:{“href”: “…/accounts/x7y8z9/groups?offset=25”}},
“last”: { “meta”:{“href”: “…”}},
“items”: [
{
“meta”: { “href”: “…”, ...}
},
{
“meta”: { “href”: “…”, ...}
},
…
]
}
@lhazlewood @goStormpath
Sorting
@lhazlewood @goStormpath
GET .../accounts?
orderBy=surname,givenName%20desc
@lhazlewood @goStormpath
Search
@lhazlewood @goStormpath
“Find all accounts with a
‘company.com’ email address
that can login to a particular
application”
@lhazlewood @goStormpath
GET /applications/x7y8z9/accounts?email=*company.com
200 OK
{
“meta”: { ... },
“offset”: 0,
“limit”: 25,
“first”: { “meta”:{
“href”:“/applications/x7y8z9/accounts?email=*company.com&offset=0”}
},
“previous”: null,
“next”: { “meta”:{
“href”: “/applications/x7y8z9/accounts?email=*company.com&offset=25”}
},
“last”: { “meta”:{“href”: “…”}},
“items”: [
{ “meta”: { “href”: “…”, ...} },
{ “meta”: { “href”: “…”, ...} },
…
]
}
@lhazlewood @goStormpath
Search cont’d
• Filter search
.../accounts?q=some+value
• Attribute Search
.../accounts?surname=Joe&email=*company.com
@lhazlewood @goStormpath
Search cont’d
• Starts with
?email=joe*
• Ends with
?email=*company.com
• Contains (warning! Bad performance)
?email=*foo*
@lhazlewood @goStormpath
Search cont’d
• Range queries via Ion min and max field members
“all accounts created between September 1st and the 15th”
Form fields example:
{“name”: “createdAtBegin”, “min”: “2014-01-01”,”max=“2014-12-31”}
{“name”: “createdAtEnd”, “min”: “2014-01-01”,”max=“2014-12-31”}
Ion TBD: range type:
.../accounts?createdAt=[2014-09-01,2014-09-15]
@lhazlewood @goStormpath
Search cont’d
• Use Ion forms and the pattern form field member to
represent search expressions
@lhazlewood @goStormpath
Many To Many
@lhazlewood @goStormpath
Group to Account
• A group can have many accounts
• An account can be in many groups
• Each mapping is a resource:
GroupMembership
@lhazlewood @goStormpath
GET /groupMemberships/23lk3j2j3
200 OK
{
“meta”:{“href”: “…/groupMemberships/23lk3j2j3”},
“account”: {
“meta”:{“href”: “…”}
},
“group”: {
“meta”{“href”: “…”}
},
…
}
@lhazlewood @goStormpath
GET /accounts/x7y8z9
200 OK
{
“meta”:{“href”: “…/accounts/x7y8z9”},
“givenName”: “Tony”,
“surname”: “Stark”,
…,
“groups”: {
“meta”:{“href”: “…/accounts/x7y8z9/groups” “rel”: [“collection”]}
},
“groupMemberships”: {
“meta”:{“href”: “…/groupMemberships?accountId=x7y8z9”,”rel”:[“collection”]}
}
}
@lhazlewood @goStormpath
Async or Long-Lived Operations
@lhazlewood @goStormpath
POST /emails
{
“from”: me@somewhere.com,
“subject”: “Hi!”
“body”: “...”
}
@lhazlewood @goStormpath
204 Accepted
Location: /emails/23Sd932sSl
{
“status”: “queued”,
...
}
@lhazlewood @goStormpath
GET /emails/23Sd932sSl
Expires: 2014-09-29T18:00:00.000Z
{
“status”: “sent”,
...
}
@lhazlewood @goStormpath
Batch Operations
@lhazlewood @goStormpath
• Each batch is represented as a resource
• Batches are likely to be a collection
• Batches are likely to have a status
• Downside: problematic regarding HTTP caching
@lhazlewood @goStormpath
Batch Delete
“Delete all company.com accounts”
DELETE /accounts?
email=*@company.com
@lhazlewood @goStormpath
Batch Create / Update
Already have a Collection concept. Use it.
@lhazlewood @goStormpath
Batch Create or Update
POST /accounts
{
“meta”: { ... },
“items”: [
{ ... account 1 ... },
{ ... account 2 ... },
...
]
}
@lhazlewood @goStormpath
Batch Operations: The ‘Catch’
HTTP Caching is bypassed entirely 
@lhazlewood @goStormpath
204 Accepted
Location: /batches/a1b2c3
{
“status”: “processing”, //overall status
“size”: “n”,
“limit”: 25,
...,
“items”: {
{ response 1 (w/ individual status) ...},
{ response 2 (w/ individual status) ...},
...
}
}
@lhazlewood @goStormpath
Errors
@lhazlewood @goStormpath
• As descriptive as possible
• As much information as possible
• Developers are your customers
@lhazlewood @goStormpath
POST /directories
409 Conflict
{
“status”: 409,
“code”: 40924,
“property”: “name”,
“message”: “A Directory named ‘Avengers’ already exists.”,
“developerMessage”: “A directory named ‘Avengers’ already
exists. If you have a stale local cache, please expire it
now.”,
“moreInfo”: “https://www.stormpath.com/docs/api/errors/40924”
}
@lhazlewood @goStormpath
Security
@lhazlewood @goStormpath
Avoid sessions when possible
Authenticate every request if necessary
Stateless
Authorize based on resource content, NOT URL!
Use Existing Protocol:
Oauth 1.0a, Oauth2, Basic over SSL only
Custom Authentication Scheme:
Only if you provide client code / SDK
Only if you really, really know what you’re doing
Use API Keys and/or JWTs instead of Username/Passwords
@lhazlewood @goStormpath
401 vs 403
• 401 “Unauthorized” really means Unauthenticated
“You need valid credentials for me to respond to this request”
• 403 “Forbidden” really means Unauthorized
“Sorry, you’re not allowed!”
@lhazlewood @goStormpath
HTTP Authentication Schemes
• Server response to issue challenge:
WWW-Authenticate: <scheme name>
realm=“Application Name”
• Client request to submit credentials:
Authorization: <scheme name> <data>
@lhazlewood @goStormpath
API Keys
• Entropy
• Password Reset
• Independence
• Scope
• Speed
• Limited Exposure
• Traceability
@lhazlewood @goStormpath
IDs
@lhazlewood @goStormpath
• IDs should be opaque
• Should be globally unique
• Avoid sequential numbers (contention, fusking)
• Good candidates: UUIDs, ‘Url64’
@lhazlewood @goStormpath
HTTP Method Overrides
@lhazlewood @goStormpath
POST /accounts/x7y8z9?_method=DELETE
@lhazlewood @goStormpath
Caching &
Concurrency Control
@lhazlewood @goStormpath
Server (initial response):
ETag: "686897696a7c876b7e”
Client (later request):
If-None-Match: "686897696a7c876b7e”
Server (later response):
304 Not Modified
@lhazlewood @goStormpath
Maintenance
@lhazlewood @goStormpath
Use HTTP Redirects
Create abstraction layer / endpoints when migrating
Use well defined custom Media Types
@lhazlewood @goStormpath
IETF RFC?
@lhazlewood @goStormpath
Ion Media Type
ionwg.org/draft-ion.html
@lhazlewood @goStormpath
.com
• Free for developers
• Eliminate months of development
• Automatic security best practices
• Single Sign On
• Social/OAuth/SAML/Multi-factor/etc
• API Authentication & Key Management
• Token Authentication for SPAs / Mobile
• Authorization & Multi-tenancy for your apps
Libraries and integrations:
https://docs.stormpath.com

More Related Content

What's hot

Log analysis using elk
Log analysis using elkLog analysis using elk
Log analysis using elk
Rushika Shah
 
Elastic search Walkthrough
Elastic search WalkthroughElastic search Walkthrough
Elastic search Walkthrough
Suhel Meman
 
JCR, Sling or AEM? Which API should I use and when?
JCR, Sling or AEM? Which API should I use and when?JCR, Sling or AEM? Which API should I use and when?
JCR, Sling or AEM? Which API should I use and when?
connectwebex
 
Model Your Application Domain, Not Your JSON Structures
Model Your Application Domain, Not Your JSON StructuresModel Your Application Domain, Not Your JSON Structures
Model Your Application Domain, Not Your JSON Structures
Markus Lanthaler
 
infrastructure as code
infrastructure as codeinfrastructure as code
infrastructure as code
Amazon Web Services
 
JSON-LD for RESTful services
JSON-LD for RESTful servicesJSON-LD for RESTful services
JSON-LD for RESTful services
Markus Lanthaler
 
Spark overview
Spark overviewSpark overview
Spark overview
Lisa Hua
 
ELK Stack
ELK StackELK Stack
ELK Stack
Phuc Nguyen
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache Camel
Claus Ibsen
 
Elastic Load Balancing Deep Dive - AWS Online Tech Talk
Elastic  Load Balancing Deep Dive - AWS Online Tech TalkElastic  Load Balancing Deep Dive - AWS Online Tech Talk
Elastic Load Balancing Deep Dive - AWS Online Tech Talk
Amazon Web Services
 
Authoring and Deploying Serverless Applications with AWS SAM
Authoring and Deploying Serverless Applications with AWS SAMAuthoring and Deploying Serverless Applications with AWS SAM
Authoring and Deploying Serverless Applications with AWS SAM
Amazon Web Services
 
Elk
Elk Elk
Shared memory and multithreading in Node.js - Timur Shemsedinov - JSFest'19
Shared memory and multithreading in Node.js - Timur Shemsedinov - JSFest'19Shared memory and multithreading in Node.js - Timur Shemsedinov - JSFest'19
Shared memory and multithreading in Node.js - Timur Shemsedinov - JSFest'19
Timur Shemsedinov
 
Best Practices for Using Apache Spark on AWS
Best Practices for Using Apache Spark on AWSBest Practices for Using Apache Spark on AWS
Best Practices for Using Apache Spark on AWS
Amazon Web Services
 
Nginx
NginxNginx
AWS CDK Introduction
AWS CDK IntroductionAWS CDK Introduction
AWS CDK Introduction
Kasun Dilunika
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and Sling
Lo Ki
 
Spring Boot
Spring BootSpring Boot
Spring Boot
Jiayun Zhou
 
Elastic Stack Introduction
Elastic Stack IntroductionElastic Stack Introduction
Elastic Stack Introduction
Vikram Shinde
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearch
pmanvi
 

What's hot (20)

Log analysis using elk
Log analysis using elkLog analysis using elk
Log analysis using elk
 
Elastic search Walkthrough
Elastic search WalkthroughElastic search Walkthrough
Elastic search Walkthrough
 
JCR, Sling or AEM? Which API should I use and when?
JCR, Sling or AEM? Which API should I use and when?JCR, Sling or AEM? Which API should I use and when?
JCR, Sling or AEM? Which API should I use and when?
 
Model Your Application Domain, Not Your JSON Structures
Model Your Application Domain, Not Your JSON StructuresModel Your Application Domain, Not Your JSON Structures
Model Your Application Domain, Not Your JSON Structures
 
infrastructure as code
infrastructure as codeinfrastructure as code
infrastructure as code
 
JSON-LD for RESTful services
JSON-LD for RESTful servicesJSON-LD for RESTful services
JSON-LD for RESTful services
 
Spark overview
Spark overviewSpark overview
Spark overview
 
ELK Stack
ELK StackELK Stack
ELK Stack
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache Camel
 
Elastic Load Balancing Deep Dive - AWS Online Tech Talk
Elastic  Load Balancing Deep Dive - AWS Online Tech TalkElastic  Load Balancing Deep Dive - AWS Online Tech Talk
Elastic Load Balancing Deep Dive - AWS Online Tech Talk
 
Authoring and Deploying Serverless Applications with AWS SAM
Authoring and Deploying Serverless Applications with AWS SAMAuthoring and Deploying Serverless Applications with AWS SAM
Authoring and Deploying Serverless Applications with AWS SAM
 
Elk
Elk Elk
Elk
 
Shared memory and multithreading in Node.js - Timur Shemsedinov - JSFest'19
Shared memory and multithreading in Node.js - Timur Shemsedinov - JSFest'19Shared memory and multithreading in Node.js - Timur Shemsedinov - JSFest'19
Shared memory and multithreading in Node.js - Timur Shemsedinov - JSFest'19
 
Best Practices for Using Apache Spark on AWS
Best Practices for Using Apache Spark on AWSBest Practices for Using Apache Spark on AWS
Best Practices for Using Apache Spark on AWS
 
Nginx
NginxNginx
Nginx
 
AWS CDK Introduction
AWS CDK IntroductionAWS CDK Introduction
AWS CDK Introduction
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and Sling
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Elastic Stack Introduction
Elastic Stack IntroductionElastic Stack Introduction
Elastic Stack Introduction
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearch
 

Viewers also liked

Building Beautiful REST APIs with ASP.NET Core
Building Beautiful REST APIs with ASP.NET CoreBuilding Beautiful REST APIs with ASP.NET Core
Building Beautiful REST APIs with ASP.NET Core
Stormpath
 
The Ultimate Guide to Mobile API Security
The Ultimate Guide to Mobile API SecurityThe Ultimate Guide to Mobile API Security
The Ultimate Guide to Mobile API Security
Stormpath
 
Design Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIsDesign Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIs
Stormpath
 
Build A Killer Client For Your REST+JSON API
Build A Killer Client For Your REST+JSON APIBuild A Killer Client For Your REST+JSON API
Build A Killer Client For Your REST+JSON API
Stormpath
 
Building Beautiful REST APIs in ASP.NET Core
Building Beautiful REST APIs in ASP.NET CoreBuilding Beautiful REST APIs in ASP.NET Core
Building Beautiful REST APIs in ASP.NET Core
Stormpath
 
Token Authentication in ASP.NET Core
Token Authentication in ASP.NET CoreToken Authentication in ASP.NET Core
Token Authentication in ASP.NET Core
Stormpath
 
Custom Data Search with Stormpath
Custom Data Search with StormpathCustom Data Search with Stormpath
Custom Data Search with Stormpath
Stormpath
 
JWTs in Java for CSRF and Microservices
JWTs in Java for CSRF and MicroservicesJWTs in Java for CSRF and Microservices
JWTs in Java for CSRF and Microservices
Stormpath
 
Instant Security & Scalable User Management with Spring Boot
Instant Security & Scalable User Management with Spring BootInstant Security & Scalable User Management with Spring Boot
Instant Security & Scalable User Management with Spring Boot
Stormpath
 
Multi-Tenancy with Spring Boot
Multi-Tenancy with Spring Boot Multi-Tenancy with Spring Boot
Multi-Tenancy with Spring Boot
Stormpath
 
Build a REST API for your Mobile Apps using Node.js
Build a REST API for your Mobile Apps using Node.jsBuild a REST API for your Mobile Apps using Node.js
Build a REST API for your Mobile Apps using Node.js
Stormpath
 
REST API Security: OAuth 2.0, JWTs, and More!
REST API Security: OAuth 2.0, JWTs, and More!REST API Security: OAuth 2.0, JWTs, and More!
REST API Security: OAuth 2.0, JWTs, and More!
Stormpath
 
Storing User Files with Express, Stormpath, and Amazon S3
Storing User Files with Express, Stormpath, and Amazon S3Storing User Files with Express, Stormpath, and Amazon S3
Storing User Files with Express, Stormpath, and Amazon S3
Stormpath
 
JWTs for CSRF and Microservices
JWTs for CSRF and MicroservicesJWTs for CSRF and Microservices
JWTs for CSRF and Microservices
Stormpath
 
Mobile Authentication for iOS Applications - Stormpath 101
Mobile Authentication for iOS Applications - Stormpath 101Mobile Authentication for iOS Applications - Stormpath 101
Mobile Authentication for iOS Applications - Stormpath 101
Stormpath
 
Spring Boot Authentication...and More!
Spring Boot Authentication...and More! Spring Boot Authentication...and More!
Spring Boot Authentication...and More!
Stormpath
 
Stormpath 101: Spring Boot + Spring Security
Stormpath 101: Spring Boot + Spring SecurityStormpath 101: Spring Boot + Spring Security
Stormpath 101: Spring Boot + Spring Security
Stormpath
 
Getting Started With Angular
Getting Started With AngularGetting Started With Angular
Getting Started With Angular
Stormpath
 
Browser Security 101
Browser Security 101 Browser Security 101
Browser Security 101
Stormpath
 
Secure Your REST API (The Right Way)
Secure Your REST API (The Right Way)Secure Your REST API (The Right Way)
Secure Your REST API (The Right Way)
Stormpath
 

Viewers also liked (20)

Building Beautiful REST APIs with ASP.NET Core
Building Beautiful REST APIs with ASP.NET CoreBuilding Beautiful REST APIs with ASP.NET Core
Building Beautiful REST APIs with ASP.NET Core
 
The Ultimate Guide to Mobile API Security
The Ultimate Guide to Mobile API SecurityThe Ultimate Guide to Mobile API Security
The Ultimate Guide to Mobile API Security
 
Design Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIsDesign Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIs
 
Build A Killer Client For Your REST+JSON API
Build A Killer Client For Your REST+JSON APIBuild A Killer Client For Your REST+JSON API
Build A Killer Client For Your REST+JSON API
 
Building Beautiful REST APIs in ASP.NET Core
Building Beautiful REST APIs in ASP.NET CoreBuilding Beautiful REST APIs in ASP.NET Core
Building Beautiful REST APIs in ASP.NET Core
 
Token Authentication in ASP.NET Core
Token Authentication in ASP.NET CoreToken Authentication in ASP.NET Core
Token Authentication in ASP.NET Core
 
Custom Data Search with Stormpath
Custom Data Search with StormpathCustom Data Search with Stormpath
Custom Data Search with Stormpath
 
JWTs in Java for CSRF and Microservices
JWTs in Java for CSRF and MicroservicesJWTs in Java for CSRF and Microservices
JWTs in Java for CSRF and Microservices
 
Instant Security & Scalable User Management with Spring Boot
Instant Security & Scalable User Management with Spring BootInstant Security & Scalable User Management with Spring Boot
Instant Security & Scalable User Management with Spring Boot
 
Multi-Tenancy with Spring Boot
Multi-Tenancy with Spring Boot Multi-Tenancy with Spring Boot
Multi-Tenancy with Spring Boot
 
Build a REST API for your Mobile Apps using Node.js
Build a REST API for your Mobile Apps using Node.jsBuild a REST API for your Mobile Apps using Node.js
Build a REST API for your Mobile Apps using Node.js
 
REST API Security: OAuth 2.0, JWTs, and More!
REST API Security: OAuth 2.0, JWTs, and More!REST API Security: OAuth 2.0, JWTs, and More!
REST API Security: OAuth 2.0, JWTs, and More!
 
Storing User Files with Express, Stormpath, and Amazon S3
Storing User Files with Express, Stormpath, and Amazon S3Storing User Files with Express, Stormpath, and Amazon S3
Storing User Files with Express, Stormpath, and Amazon S3
 
JWTs for CSRF and Microservices
JWTs for CSRF and MicroservicesJWTs for CSRF and Microservices
JWTs for CSRF and Microservices
 
Mobile Authentication for iOS Applications - Stormpath 101
Mobile Authentication for iOS Applications - Stormpath 101Mobile Authentication for iOS Applications - Stormpath 101
Mobile Authentication for iOS Applications - Stormpath 101
 
Spring Boot Authentication...and More!
Spring Boot Authentication...and More! Spring Boot Authentication...and More!
Spring Boot Authentication...and More!
 
Stormpath 101: Spring Boot + Spring Security
Stormpath 101: Spring Boot + Spring SecurityStormpath 101: Spring Boot + Spring Security
Stormpath 101: Spring Boot + Spring Security
 
Getting Started With Angular
Getting Started With AngularGetting Started With Angular
Getting Started With Angular
 
Browser Security 101
Browser Security 101 Browser Security 101
Browser Security 101
 
Secure Your REST API (The Right Way)
Secure Your REST API (The Right Way)Secure Your REST API (The Right Way)
Secure Your REST API (The Right Way)
 

Similar to Beautiful REST+JSON APIs with Ion

Designing a beautiful REST json api
Designing a beautiful REST json apiDesigning a beautiful REST json api
Designing a beautiful REST json api
0x07de
 
The JSON REST API for WordPress
The JSON REST API for WordPressThe JSON REST API for WordPress
The JSON REST API for WordPress
Taylor Lovett
 
ElasticSearch in action
ElasticSearch in actionElasticSearch in action
ElasticSearch in action
Codemotion
 
Crafting Evolvable Api Responses
Crafting Evolvable Api ResponsesCrafting Evolvable Api Responses
Crafting Evolvable Api Responses
darrelmiller71
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
Antonio Peric-Mazar
 
Semantic Metastandards will Unlock IoT Interoperability
Semantic Metastandards will Unlock IoT InteroperabilitySemantic Metastandards will Unlock IoT Interoperability
Semantic Metastandards will Unlock IoT Interoperability
David Janes
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
Taylor Lovett
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
Taylor Lovett
 
Alfresco tech talk live public api episode 64
Alfresco tech talk live public api episode 64Alfresco tech talk live public api episode 64
Alfresco tech talk live public api episode 64
Alfresco Software
 
Pragmatic REST: recent trends in API design
Pragmatic REST: recent trends in API designPragmatic REST: recent trends in API design
Pragmatic REST: recent trends in API design
Marsh Gardiner
 
Elasticmeetup curiosity 20141113
Elasticmeetup curiosity 20141113Elasticmeetup curiosity 20141113
Elasticmeetup curiosity 20141113
Erwan Pigneul
 
Curiosity, outil de recherche open source par PagesJaunes
Curiosity, outil de recherche open source par PagesJaunesCuriosity, outil de recherche open source par PagesJaunes
Curiosity, outil de recherche open source par PagesJaunes
PagesJaunes
 
Automatic discovery of Web API Specifications: an example-driven approach
Automatic discovery of Web API Specifications: an example-driven approachAutomatic discovery of Web API Specifications: an example-driven approach
Automatic discovery of Web API Specifications: an example-driven approach
Jordi Cabot
 
Example-driven Web API Specification Discovery
Example-driven Web API Specification DiscoveryExample-driven Web API Specification Discovery
Example-driven Web API Specification Discovery
Javier Canovas
 
IOTDB, Semantics and the Internet of Things
IOTDB, Semantics and the Internet of ThingsIOTDB, Semantics and the Internet of Things
IOTDB, Semantics and the Internet of Things
David Janes
 
JSON-LD: JSON for Linked Data
JSON-LD: JSON for Linked DataJSON-LD: JSON for Linked Data
JSON-LD: JSON for Linked Data
Gregg Kellogg
 
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
Elżbieta Bednarek
 
Real-time Semantic Web with Twitter Annotations
Real-time Semantic Web with Twitter AnnotationsReal-time Semantic Web with Twitter Annotations
Real-time Semantic Web with Twitter Annotations
Joshua Shinavier
 
My Journey into the Terrifying World of Hypermedia
My Journey into the Terrifying World of HypermediaMy Journey into the Terrifying World of Hypermedia
My Journey into the Terrifying World of Hypermedia
Nordic APIs
 
Montreal Elasticsearch Meetup
Montreal Elasticsearch MeetupMontreal Elasticsearch Meetup
Montreal Elasticsearch Meetup
Loïc Bertron
 

Similar to Beautiful REST+JSON APIs with Ion (20)

Designing a beautiful REST json api
Designing a beautiful REST json apiDesigning a beautiful REST json api
Designing a beautiful REST json api
 
The JSON REST API for WordPress
The JSON REST API for WordPressThe JSON REST API for WordPress
The JSON REST API for WordPress
 
ElasticSearch in action
ElasticSearch in actionElasticSearch in action
ElasticSearch in action
 
Crafting Evolvable Api Responses
Crafting Evolvable Api ResponsesCrafting Evolvable Api Responses
Crafting Evolvable Api Responses
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
 
Semantic Metastandards will Unlock IoT Interoperability
Semantic Metastandards will Unlock IoT InteroperabilitySemantic Metastandards will Unlock IoT Interoperability
Semantic Metastandards will Unlock IoT Interoperability
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
 
Alfresco tech talk live public api episode 64
Alfresco tech talk live public api episode 64Alfresco tech talk live public api episode 64
Alfresco tech talk live public api episode 64
 
Pragmatic REST: recent trends in API design
Pragmatic REST: recent trends in API designPragmatic REST: recent trends in API design
Pragmatic REST: recent trends in API design
 
Elasticmeetup curiosity 20141113
Elasticmeetup curiosity 20141113Elasticmeetup curiosity 20141113
Elasticmeetup curiosity 20141113
 
Curiosity, outil de recherche open source par PagesJaunes
Curiosity, outil de recherche open source par PagesJaunesCuriosity, outil de recherche open source par PagesJaunes
Curiosity, outil de recherche open source par PagesJaunes
 
Automatic discovery of Web API Specifications: an example-driven approach
Automatic discovery of Web API Specifications: an example-driven approachAutomatic discovery of Web API Specifications: an example-driven approach
Automatic discovery of Web API Specifications: an example-driven approach
 
Example-driven Web API Specification Discovery
Example-driven Web API Specification DiscoveryExample-driven Web API Specification Discovery
Example-driven Web API Specification Discovery
 
IOTDB, Semantics and the Internet of Things
IOTDB, Semantics and the Internet of ThingsIOTDB, Semantics and the Internet of Things
IOTDB, Semantics and the Internet of Things
 
JSON-LD: JSON for Linked Data
JSON-LD: JSON for Linked DataJSON-LD: JSON for Linked Data
JSON-LD: JSON for Linked Data
 
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
 
Real-time Semantic Web with Twitter Annotations
Real-time Semantic Web with Twitter AnnotationsReal-time Semantic Web with Twitter Annotations
Real-time Semantic Web with Twitter Annotations
 
My Journey into the Terrifying World of Hypermedia
My Journey into the Terrifying World of HypermediaMy Journey into the Terrifying World of Hypermedia
My Journey into the Terrifying World of Hypermedia
 
Montreal Elasticsearch Meetup
Montreal Elasticsearch MeetupMontreal Elasticsearch Meetup
Montreal Elasticsearch Meetup
 

More from Stormpath

Secure API Services in Node with Basic Auth and OAuth2
Secure API Services in Node with Basic Auth and OAuth2Secure API Services in Node with Basic Auth and OAuth2
Secure API Services in Node with Basic Auth and OAuth2
Stormpath
 
Securing Web Applications with Token Authentication
Securing Web Applications with Token AuthenticationSecuring Web Applications with Token Authentication
Securing Web Applications with Token Authentication
Stormpath
 
Token Authentication for Java Applications
Token Authentication for Java ApplicationsToken Authentication for Java Applications
Token Authentication for Java Applications
Stormpath
 
How to Use Stormpath in angular js
How to Use Stormpath in angular jsHow to Use Stormpath in angular js
How to Use Stormpath in angular js
Stormpath
 
Building Secure User Interfaces With JWTs (JSON Web Tokens)
Building Secure User Interfaces With JWTs (JSON Web Tokens)Building Secure User Interfaces With JWTs (JSON Web Tokens)
Building Secure User Interfaces With JWTs (JSON Web Tokens)
Stormpath
 
Rest API Security
Rest API SecurityRest API Security
Rest API Security
Stormpath
 
Elegant Rest Design Webinar
Elegant Rest Design WebinarElegant Rest Design Webinar
Elegant Rest Design Webinar
Stormpath
 
Build a Node.js Client for Your REST+JSON API
Build a Node.js Client for Your REST+JSON APIBuild a Node.js Client for Your REST+JSON API
Build a Node.js Client for Your REST+JSON API
Stormpath
 
So long scrum, hello kanban
So long scrum, hello kanbanSo long scrum, hello kanban
So long scrum, hello kanban
Stormpath
 
REST API Design for JAX-RS And Jersey
REST API Design for JAX-RS And JerseyREST API Design for JAX-RS And Jersey
REST API Design for JAX-RS And Jersey
Stormpath
 

More from Stormpath (10)

Secure API Services in Node with Basic Auth and OAuth2
Secure API Services in Node with Basic Auth and OAuth2Secure API Services in Node with Basic Auth and OAuth2
Secure API Services in Node with Basic Auth and OAuth2
 
Securing Web Applications with Token Authentication
Securing Web Applications with Token AuthenticationSecuring Web Applications with Token Authentication
Securing Web Applications with Token Authentication
 
Token Authentication for Java Applications
Token Authentication for Java ApplicationsToken Authentication for Java Applications
Token Authentication for Java Applications
 
How to Use Stormpath in angular js
How to Use Stormpath in angular jsHow to Use Stormpath in angular js
How to Use Stormpath in angular js
 
Building Secure User Interfaces With JWTs (JSON Web Tokens)
Building Secure User Interfaces With JWTs (JSON Web Tokens)Building Secure User Interfaces With JWTs (JSON Web Tokens)
Building Secure User Interfaces With JWTs (JSON Web Tokens)
 
Rest API Security
Rest API SecurityRest API Security
Rest API Security
 
Elegant Rest Design Webinar
Elegant Rest Design WebinarElegant Rest Design Webinar
Elegant Rest Design Webinar
 
Build a Node.js Client for Your REST+JSON API
Build a Node.js Client for Your REST+JSON APIBuild a Node.js Client for Your REST+JSON API
Build a Node.js Client for Your REST+JSON API
 
So long scrum, hello kanban
So long scrum, hello kanbanSo long scrum, hello kanban
So long scrum, hello kanban
 
REST API Design for JAX-RS And Jersey
REST API Design for JAX-RS And JerseyREST API Design for JAX-RS And Jersey
REST API Design for JAX-RS And Jersey
 

Recently uploaded

Low Rate Call Girls Chennai ✔ 9079923931 ✔ Hi I Am Divya Vip Call Girl Servic...
Low Rate Call Girls Chennai ✔ 9079923931 ✔ Hi I Am Divya Vip Call Girl Servic...Low Rate Call Girls Chennai ✔ 9079923931 ✔ Hi I Am Divya Vip Call Girl Servic...
Low Rate Call Girls Chennai ✔ 9079923931 ✔ Hi I Am Divya Vip Call Girl Servic...
finni singh$A17
 
Erotic Call Girls Bangalore🫱9079923931🫲 High Quality Call Girl Service Right ...
Erotic Call Girls Bangalore🫱9079923931🫲 High Quality Call Girl Service Right ...Erotic Call Girls Bangalore🫱9079923931🫲 High Quality Call Girl Service Right ...
Erotic Call Girls Bangalore🫱9079923931🫲 High Quality Call Girl Service Right ...
meenusingh4354543
 
Hot Call Girls In Ahmedabad ✔ 7737669865 ✔ Hi I Am Divya Vip Call Girl Servic...
Hot Call Girls In Ahmedabad ✔ 7737669865 ✔ Hi I Am Divya Vip Call Girl Servic...Hot Call Girls In Ahmedabad ✔ 7737669865 ✔ Hi I Am Divya Vip Call Girl Servic...
Hot Call Girls In Ahmedabad ✔ 7737669865 ✔ Hi I Am Divya Vip Call Girl Servic...
anamika jain$A17
 
Artificial Intelligence (Complete Notes).pdf
Artificial Intelligence (Complete Notes).pdfArtificial Intelligence (Complete Notes).pdf
Artificial Intelligence (Complete Notes).pdf
Sarthak Sobti
 
NLJUG speaker academy 2024 - session 1, June 2024
NLJUG speaker academy 2024 - session 1, June 2024NLJUG speaker academy 2024 - session 1, June 2024
NLJUG speaker academy 2024 - session 1, June 2024
Bert Jan Schrijver
 
Call Girls in Varanasi || 7426014248 || Quick Booking at Affordable Price
Call Girls in Varanasi || 7426014248 || Quick Booking at Affordable PriceCall Girls in Varanasi || 7426014248 || Quick Booking at Affordable Price
Call Girls in Varanasi || 7426014248 || Quick Booking at Affordable Price
vickythakur209464
 
Austere Systems Company Portfolio (ASPL).pdf
Austere Systems Company Portfolio (ASPL).pdfAustere Systems Company Portfolio (ASPL).pdf
Austere Systems Company Portfolio (ASPL).pdf
support433113
 
How to Make a Living as a (ColdFusion) Freelancer?
How to Make a Living as a (ColdFusion) Freelancer?How to Make a Living as a (ColdFusion) Freelancer?
How to Make a Living as a (ColdFusion) Freelancer?
Ortus Solutions, Corp
 
OpenChain Webinar - Open Source Due Diligence for M&A - 2024-06-17
OpenChain Webinar - Open Source Due Diligence for M&A - 2024-06-17OpenChain Webinar - Open Source Due Diligence for M&A - 2024-06-17
OpenChain Webinar - Open Source Due Diligence for M&A - 2024-06-17
Shane Coughlan
 
High-Class Call Girls In Chennai 📞7014168258 Available With Direct Cash Payme...
High-Class Call Girls In Chennai 📞7014168258 Available With Direct Cash Payme...High-Class Call Girls In Chennai 📞7014168258 Available With Direct Cash Payme...
High-Class Call Girls In Chennai 📞7014168258 Available With Direct Cash Payme...
shoeb2926
 
LIVE DEMO: CCX for CSPs, a drop-in DBaaS solution
LIVE DEMO: CCX for CSPs, a drop-in DBaaS solutionLIVE DEMO: CCX for CSPs, a drop-in DBaaS solution
LIVE DEMO: CCX for CSPs, a drop-in DBaaS solution
Severalnines
 
Independent Call Girls In Bangalore 💯Call Us 🔝 7426014248 🔝Independent Bangal...
Independent Call Girls In Bangalore 💯Call Us 🔝 7426014248 🔝Independent Bangal...Independent Call Girls In Bangalore 💯Call Us 🔝 7426014248 🔝Independent Bangal...
Independent Call Girls In Bangalore 💯Call Us 🔝 7426014248 🔝Independent Bangal...
sapnasaifi408
 
ℂall Girls in Surat 🔥 +91-7023059433 🔥 Best High ℂlass Surat Esℂorts Serviℂe ...
ℂall Girls in Surat 🔥 +91-7023059433 🔥 Best High ℂlass Surat Esℂorts Serviℂe ...ℂall Girls in Surat 🔥 +91-7023059433 🔥 Best High ℂlass Surat Esℂorts Serviℂe ...
ℂall Girls in Surat 🔥 +91-7023059433 🔥 Best High ℂlass Surat Esℂorts Serviℂe ...
nitu gupta#N06
 
Independent Call Girls In Kolkata ✔ 7014168258 ✔ Hi I Am Divya Vip Call Girl ...
Independent Call Girls In Kolkata ✔ 7014168258 ✔ Hi I Am Divya Vip Call Girl ...Independent Call Girls In Kolkata ✔ 7014168258 ✔ Hi I Am Divya Vip Call Girl ...
Independent Call Girls In Kolkata ✔ 7014168258 ✔ Hi I Am Divya Vip Call Girl ...
simmi singh$A17
 
Hi-Fi Call Girls In Goa 💯Call Us 🔝 7426014248 🔝Independent Goa Escorts Servic...
Hi-Fi Call Girls In Goa 💯Call Us 🔝 7426014248 🔝Independent Goa Escorts Servic...Hi-Fi Call Girls In Goa 💯Call Us 🔝 7426014248 🔝Independent Goa Escorts Servic...
Hi-Fi Call Girls In Goa 💯Call Us 🔝 7426014248 🔝Independent Goa Escorts Servic...
ishitapatelescorts
 
High-Class Call Girls In Bangalore 📞7014168258 Available With Direct Cash Pay...
High-Class Call Girls In Bangalore 📞7014168258 Available With Direct Cash Pay...High-Class Call Girls In Bangalore 📞7014168258 Available With Direct Cash Pay...
High-Class Call Girls In Bangalore 📞7014168258 Available With Direct Cash Pay...
shoeb2926
 
High-Class Call Girls In Hyderabad 📞7014168258 Available With Direct Cash Pay...
High-Class Call Girls In Hyderabad 📞7014168258 Available With Direct Cash Pay...High-Class Call Girls In Hyderabad 📞7014168258 Available With Direct Cash Pay...
High-Class Call Girls In Hyderabad 📞7014168258 Available With Direct Cash Pay...
shoeb2926
 
Artificial Intelligence by CP Mahto1.pptx
Artificial Intelligence by CP Mahto1.pptxArtificial Intelligence by CP Mahto1.pptx
Artificial Intelligence by CP Mahto1.pptx
kamleshabss
 
🔥 Chennai Call Girls  👉 6350257716 👫 High Profile Call Girls Whatsapp Number ...
🔥 Chennai Call Girls  👉 6350257716 👫 High Profile Call Girls Whatsapp Number ...🔥 Chennai Call Girls  👉 6350257716 👫 High Profile Call Girls Whatsapp Number ...
🔥 Chennai Call Girls  👉 6350257716 👫 High Profile Call Girls Whatsapp Number ...
tinakumariji156
 
European Standard S1000D, an Unnecessary Expense to OEM.pptx
European Standard S1000D, an Unnecessary Expense to OEM.pptxEuropean Standard S1000D, an Unnecessary Expense to OEM.pptx
European Standard S1000D, an Unnecessary Expense to OEM.pptx
Digital Teacher
 

Recently uploaded (20)

Low Rate Call Girls Chennai ✔ 9079923931 ✔ Hi I Am Divya Vip Call Girl Servic...
Low Rate Call Girls Chennai ✔ 9079923931 ✔ Hi I Am Divya Vip Call Girl Servic...Low Rate Call Girls Chennai ✔ 9079923931 ✔ Hi I Am Divya Vip Call Girl Servic...
Low Rate Call Girls Chennai ✔ 9079923931 ✔ Hi I Am Divya Vip Call Girl Servic...
 
Erotic Call Girls Bangalore🫱9079923931🫲 High Quality Call Girl Service Right ...
Erotic Call Girls Bangalore🫱9079923931🫲 High Quality Call Girl Service Right ...Erotic Call Girls Bangalore🫱9079923931🫲 High Quality Call Girl Service Right ...
Erotic Call Girls Bangalore🫱9079923931🫲 High Quality Call Girl Service Right ...
 
Hot Call Girls In Ahmedabad ✔ 7737669865 ✔ Hi I Am Divya Vip Call Girl Servic...
Hot Call Girls In Ahmedabad ✔ 7737669865 ✔ Hi I Am Divya Vip Call Girl Servic...Hot Call Girls In Ahmedabad ✔ 7737669865 ✔ Hi I Am Divya Vip Call Girl Servic...
Hot Call Girls In Ahmedabad ✔ 7737669865 ✔ Hi I Am Divya Vip Call Girl Servic...
 
Artificial Intelligence (Complete Notes).pdf
Artificial Intelligence (Complete Notes).pdfArtificial Intelligence (Complete Notes).pdf
Artificial Intelligence (Complete Notes).pdf
 
NLJUG speaker academy 2024 - session 1, June 2024
NLJUG speaker academy 2024 - session 1, June 2024NLJUG speaker academy 2024 - session 1, June 2024
NLJUG speaker academy 2024 - session 1, June 2024
 
Call Girls in Varanasi || 7426014248 || Quick Booking at Affordable Price
Call Girls in Varanasi || 7426014248 || Quick Booking at Affordable PriceCall Girls in Varanasi || 7426014248 || Quick Booking at Affordable Price
Call Girls in Varanasi || 7426014248 || Quick Booking at Affordable Price
 
Austere Systems Company Portfolio (ASPL).pdf
Austere Systems Company Portfolio (ASPL).pdfAustere Systems Company Portfolio (ASPL).pdf
Austere Systems Company Portfolio (ASPL).pdf
 
How to Make a Living as a (ColdFusion) Freelancer?
How to Make a Living as a (ColdFusion) Freelancer?How to Make a Living as a (ColdFusion) Freelancer?
How to Make a Living as a (ColdFusion) Freelancer?
 
OpenChain Webinar - Open Source Due Diligence for M&A - 2024-06-17
OpenChain Webinar - Open Source Due Diligence for M&A - 2024-06-17OpenChain Webinar - Open Source Due Diligence for M&A - 2024-06-17
OpenChain Webinar - Open Source Due Diligence for M&A - 2024-06-17
 
High-Class Call Girls In Chennai 📞7014168258 Available With Direct Cash Payme...
High-Class Call Girls In Chennai 📞7014168258 Available With Direct Cash Payme...High-Class Call Girls In Chennai 📞7014168258 Available With Direct Cash Payme...
High-Class Call Girls In Chennai 📞7014168258 Available With Direct Cash Payme...
 
LIVE DEMO: CCX for CSPs, a drop-in DBaaS solution
LIVE DEMO: CCX for CSPs, a drop-in DBaaS solutionLIVE DEMO: CCX for CSPs, a drop-in DBaaS solution
LIVE DEMO: CCX for CSPs, a drop-in DBaaS solution
 
Independent Call Girls In Bangalore 💯Call Us 🔝 7426014248 🔝Independent Bangal...
Independent Call Girls In Bangalore 💯Call Us 🔝 7426014248 🔝Independent Bangal...Independent Call Girls In Bangalore 💯Call Us 🔝 7426014248 🔝Independent Bangal...
Independent Call Girls In Bangalore 💯Call Us 🔝 7426014248 🔝Independent Bangal...
 
ℂall Girls in Surat 🔥 +91-7023059433 🔥 Best High ℂlass Surat Esℂorts Serviℂe ...
ℂall Girls in Surat 🔥 +91-7023059433 🔥 Best High ℂlass Surat Esℂorts Serviℂe ...ℂall Girls in Surat 🔥 +91-7023059433 🔥 Best High ℂlass Surat Esℂorts Serviℂe ...
ℂall Girls in Surat 🔥 +91-7023059433 🔥 Best High ℂlass Surat Esℂorts Serviℂe ...
 
Independent Call Girls In Kolkata ✔ 7014168258 ✔ Hi I Am Divya Vip Call Girl ...
Independent Call Girls In Kolkata ✔ 7014168258 ✔ Hi I Am Divya Vip Call Girl ...Independent Call Girls In Kolkata ✔ 7014168258 ✔ Hi I Am Divya Vip Call Girl ...
Independent Call Girls In Kolkata ✔ 7014168258 ✔ Hi I Am Divya Vip Call Girl ...
 
Hi-Fi Call Girls In Goa 💯Call Us 🔝 7426014248 🔝Independent Goa Escorts Servic...
Hi-Fi Call Girls In Goa 💯Call Us 🔝 7426014248 🔝Independent Goa Escorts Servic...Hi-Fi Call Girls In Goa 💯Call Us 🔝 7426014248 🔝Independent Goa Escorts Servic...
Hi-Fi Call Girls In Goa 💯Call Us 🔝 7426014248 🔝Independent Goa Escorts Servic...
 
High-Class Call Girls In Bangalore 📞7014168258 Available With Direct Cash Pay...
High-Class Call Girls In Bangalore 📞7014168258 Available With Direct Cash Pay...High-Class Call Girls In Bangalore 📞7014168258 Available With Direct Cash Pay...
High-Class Call Girls In Bangalore 📞7014168258 Available With Direct Cash Pay...
 
High-Class Call Girls In Hyderabad 📞7014168258 Available With Direct Cash Pay...
High-Class Call Girls In Hyderabad 📞7014168258 Available With Direct Cash Pay...High-Class Call Girls In Hyderabad 📞7014168258 Available With Direct Cash Pay...
High-Class Call Girls In Hyderabad 📞7014168258 Available With Direct Cash Pay...
 
Artificial Intelligence by CP Mahto1.pptx
Artificial Intelligence by CP Mahto1.pptxArtificial Intelligence by CP Mahto1.pptx
Artificial Intelligence by CP Mahto1.pptx
 
🔥 Chennai Call Girls  👉 6350257716 👫 High Profile Call Girls Whatsapp Number ...
🔥 Chennai Call Girls  👉 6350257716 👫 High Profile Call Girls Whatsapp Number ...🔥 Chennai Call Girls  👉 6350257716 👫 High Profile Call Girls Whatsapp Number ...
🔥 Chennai Call Girls  👉 6350257716 👫 High Profile Call Girls Whatsapp Number ...
 
European Standard S1000D, an Unnecessary Expense to OEM.pptx
European Standard S1000D, an Unnecessary Expense to OEM.pptxEuropean Standard S1000D, an Unnecessary Expense to OEM.pptx
European Standard S1000D, an Unnecessary Expense to OEM.pptx
 

Beautiful REST+JSON APIs with Ion