SlideShare a Scribd company logo
The Liferay case
Lessons learned evolving from
RPC to Hypermedia REST APIs
This slides are already available at
bit.ly/liferay-hypermedia-api
Who are
we?
VP of Engineering|
Jorge Ferrer|
Software Engineer|
Alejandro Hernández|
Why do we need APIs?
Liferay is a software provider
Open Source APIsOn-Premise + Cloud
Digital Experiences Web, Mobile, ...Platform
Key usages of APIs in Liferay
1 Integration
Omni-channel consumers
Web Applications
2
3
The beginnings: SOAP|
Conclusions - The Good
Enabled the possibility of integration with external
systems
✓
Easy to build APIs thanks to code generation from
Java APIs
✓
Conclusions - The Ugly
Compatibility problems✘
Hard to consume APIs
Strong dependency on tooling
⇒ Poor adoption
✘
✘
Next step: REST-API|
REST-API“ ”
mmm….
We mean RPC over HTTP
“REST”-API: JSON Web Services
● Automatic generation of an HTTP+JSON Web API
from a Java API
● Auto-generated interactive documentation
● Batch operations
We were here
Richardson Maturity Model - Martin Fowler
Is that bad?
Conclusions - The Good
Very comprehensive , 90+% of the platform’s
functionalities
✓
More developer friendly
Interactive docs, batch operations, ... were highly
appreciated ⇒ More adoption
✓
✓
Conclusions - The Ugly (1/2)
Certain APIs were very difficult to consume
●
✘
✘ Custom technology. Requires learning just for Liferay
Conclusions - The Ugly (2/2)
Internal changes auto-propagated ⇒ Consumers were
broken in every release
●
✘
✘Increasingly perceived as bad/old API in comparison
●
We also tried a “competing” approach!
● AtomPub (With Shindig)
○ Fully RESTful
○ Atom XML
● Mapping Layer
○ Manual Coding
Lessons!|
Lessons
1. API generation means
✓ Less work and more comprehensiveness
✘ Deep coupling
2. Importance of features for consumer devs
In search of a better
solution
Our two key challenges
Developer
Experience
Change
Management
Evolution
Consumer?
API v3API v1 API v2 API v4
The cost of breaking changes
For consumer devs
● Being forced to
change code with
each new version
For API devs
● Visible: Keep several
API versions alive
● Hidden: Avoid change
to reduce visible cost
Are we really the only
ones with this problem?
How should APIs be
versioned?
Is hypermedia really
feasible or is it a utopia?
What is the *best* format
for the API responses?
JSON or XML?
Or should it be
binary?
HAL, JSON-LD, Siren, JSON-API, …?
Is REST dead and should
we go with GraphQL?
Learning from the best
1. The most popular “API
Guidelines”
2. Tons of articles and
several books.
Books that made a
difference for us
Our solution
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
APIs designed to evolve
How we are solving each of the challenges
1. Hypermedia Controls
Home URL Link TypesAffordance Types
Pagination
{
"_embedded": {...},
"total": 43,
"count": 30,
"_links": {
"first": {
"href": "http://localhost:8080/o/api/p/groups?page=1&per_page=30"
},
"next": {
"href": "http://localhost:8080/o/api/p/groups?page=2&per_page=30"
},
"last": {
"href": "http://localhost:8080/o/api/p/groups?page=2&per_page=30"
}
}
}
HAL
Pagination
{
“properties”: {
“title”: “Hypermedia is awesome”,
…
}
  "actions": [
      {
          "name": "delete-item",
          "title": "Delete Blog Posting",
          "method": "DELETE",
          "href": "http://localhost:8080/o/p/blogs/abcdef",
      }
      {
          "name": "publish",
          "title": "Publish Blog Posting",
          "method": "POST",
          "href": "http://localhost:8080/o/p/123URLs4123AREabcdeOPAQUEf41231",
      }
 …
Actions
SIREN
Forms
{
  ..
  "actions": [
      {
          "name": "add-blog-posting",
          "title": "Add Blog Posting",
          "method": "POST",
          "href": "http://localhost:8080/o/p/blogs",
          "type": "application/json",
          "fields": [
              { "name": "headline", "type": "text" },
              { "name": "author", "type": "Person" },
          ]
      }
  …
SIREN
2. Shared Vocabularies
Standard types Well defined custom types
Internal
Schema.org type
Defining types
most important API design activity
Communicating the types
OpenAPI JSON Schema ALPS
Profile ⇒
Goal: The smallest contract possible
● One single URL
● Message types
● Affordance types
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
Building Consumers
1
2
3
How should APIs be versioned?
Is hypermedia really feasible or is it a
utopia?
What is the *best* format for the API
responses?
Is REST dead and should we go with
GraphQL?
Does this work for real?
Project: Microservice APIs
API stack: Java with Spring
Consumers: Java Microservice, Mobile App
1
Home URL
{
name: "pulpo-api",
description: "API for consuming PULPO Services",
_links: {
self: { href: "http://localhost:8084/" },
accounts: {
href: "localhost/{projectId}/accounts{?filter,page,size,sort*}",
templated: true
},
account: {
href: "localhost/{projectId}/accounts/{identifier}",
templated: true
},
fields: {
href: "localhost/{projectId}/fields{?filter,page,size,sort*}",
templated: true
},
field: {
href: "localhost/{projectId}/fields/{identifier}",
templated: true
},
}
}
HAL
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
{
"dateCreated":"2017-11-15T16:23:35Z",
"dateModified":"2017-11-15T16:23:35Z",
"identifier":"AV_Afi6-Y3UMLZEdmkBE",
"name":"Friends",
"segmentType":"STATIC",
"status":"ACTIVE",
"_links":{
"self":{
"href":"http://localhost:8084/my-project/individual-segments/AV_Afi6-Y3UMLZEdmkBE"
},
"individual-segments":{
"href":"http://localhost:8084/my-project/individual-segments{?filter}",
"templated":true
}
}
}
HAL
Affordance Types
internal
@GetMapping(
produces = {MediaType.APPLICATION_JSON_VALUE, "application/hal+json"},
value = "/{identifier}"
)
public @ResponseBody Resource<Individual> findOne(
@PathVariable String projectId, @PathVariable String identifier) {
IndividualEntity individualEntity = _individualService.findOneByUUID(
projectId, identifier);
if (individualEntity == null) {
throw new NotFoundException(
"Unable to find Individual with individualUUID " + identifier);
}
return _individualResourceAssembler.toResource(individualEntity);
}
Affordance Types
[
{
"title": “We are in APIConference!”,
"subtitle": “APIConference”,
"user": “localhost:8080/o/p/30325”
},
{
"title": “5 amazing things!”,
"subtitle": “Get english!”,
"user": “localhost:8080/o/p/30325”
}
]
localhost:8080/o/api/blogs?start=25&end=27
[
{
"headline": “We are in APIConference!”,
"alternativeHeadline”: “APIConference”,
"author": “localhost:8080/o/p/30325”
},
{
"headline": “5 amazing things!”,
"alternativeHeadline": “Get english!”,
"author": “localhost:8080/o/0/65443”
}
]
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
{
“count”: 2,
“totalItems”: 30,
“members”: [
{
"headline": “We are in APIConference!”,
"alternativeHeadline": “APIConference”,
"author": “localhost:8080/o/p/30325”
},
{
"headline": “5 amazing things!”,
"alternativeHeadline": “Get english!”,
"author": “localhost:8080/o/0/65443”
}
],
“view”: {
“next”: “localhost:8080/blogs?p=7&p_p=2”
}
}
localhost:8080/o/api/blogs?page=6&per_page=2
[
{
"title": “We are in APIConference!”,
"subtitle": “THE conference for APIs”,
"user": “localhost:8080/o/p/30325”
},
{
"title": “5 amazing things to do in
London!”,
"subtitle": “Get english!”,
"user": “localhost:8080/o/0/65443”
}
]
How do I add support for
queries?
OData’s
all
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
Project: Platform APIs
API stack: Java with OSGi and JAX-RS
Consumers: Mobile Apps, Think Web clients, ESBs,
Legacy Apps, ...
2
Home URL
{
"resources": {
"blog-postings": {
"href": "http://localhost:8080/p/blog-postings"
},
"web-sites": {
"href": "http://localhost:8080/p/web-sites"
},
"documents": {
"href": "http://localhost:8080/p/documents"
},
"organizations": {
"href": "http://localhost:8080/p/organizations"
},
"people": {
"href": "http://localhost:8080/p/people"
}
}
}
JSON-HOME
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
Affordance Types
{
"@context": [
{ "creator": { "@type": "@id" } },
{ "@vocab": "http://schema.org/" },
"https://www.w3.org/ns/hydra/core#"
],
"@id": "http://localhost:8080/p/blog-postings/0",
"@type": "BlogPosting",
"alternativeHeadline": "Et eaque quod.",
"articleBody": "Sunt adipisci eligendi dolorem ducimus placeat.",
"creator": "http://localhost:8080/p/people/9",
"dateCreated": "2017-07-11T11:06Z",
"dateModified": "2017-07-11T11:06Z",
"headline": "Alone on a Wide, Wide Sea"
}
JSON-LD + HYDRA
Affordance Types
{
"@id": "http://localhost:8080/p/blog-postings/0",
"@type": "BlogPosting",
"creator": "http://localhost:8080/p/people/9",
"headline": "Alone on a Wide, Wide Sea",
"operation": [
{
"@id": "_:blog-postings/delete",
"@type": "Operation",
"method": "DELETE"
},
{
"@id": "_:blog-postings/update",
"@type": "Operation",
"expects": "http://localhost:8080/f/u/blog-postings",
"method": "PUT"
}
]
}
JSON-LD + HYDRA
Affordance Types
{
"@id": "http://localhost:8080/f/u/blog-postings",
"@type": "Class",
"description": "This can be used to create or update a blog posting",
"supportedProperty": [
{
"@type": "SupportedProperty",
"property": "creator",
"required": false,
},
{
"@type": "SupportedProperty",
"property": "headline",
"required": true,
}
],
"title": "The blog posting form"
}
JSON-LD + HYDRA
Representor pattern
Apio
public Representor<BlogPostingModel, Long> representor(
Builder<BlogPostingModel, Long> builder) {
return builder.types(
"BlogPosting"
).identifier(
BlogPostingModel::getId
).addDate(
"dateModified", BlogPostingModel::getModifiedDate
).addLinkedModel(
"creator", PersonId.class, BlogPostingModel::getCreatorId
).addRelatedCollection(
"comment", BlogPostingCommentId.class
).addString(
"alternativeHeadline", BlogPostingModel::getSubtitle
).addString(
"articleBody", BlogPostingModel::getContent
).addString(
"headline", BlogPostingModel::getTitle
).build();
}
Well defined custom types
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
Project: Data Integration
through ETL/ESB
Consumer: Talend Plugin
3
Video
Video
Final Lessons!|
Your needs > Any specific solution
REST Shared
Vocabularies+
Spend time defining your vocabulary
Make consumers & their developers the
focus of your API design strategy
● Provide features that make their job easier
● APIs should speak their language, not yours
Giving Back
Apio: An Open Source Project
Apio Architect
●
●
Apio Consumer
○
○
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
Ad

More Related Content

What's hot (16)

Maintainable API Docs and Other Rainbow Colored Unicorns
Maintainable API Docs and Other Rainbow Colored UnicornsMaintainable API Docs and Other Rainbow Colored Unicorns
Maintainable API Docs and Other Rainbow Colored Unicorns
Neil Mansilla
 
Ultimate Guide to 30+ API Documentation Solutions
Ultimate Guide to 30+ API Documentation SolutionsUltimate Guide to 30+ API Documentation Solutions
Ultimate Guide to 30+ API Documentation Solutions
Bill Doerrfeld
 
Making Sense of Hypermedia APIs – Hype or Reality?
Making Sense of Hypermedia APIs – Hype or Reality?Making Sense of Hypermedia APIs – Hype or Reality?
Making Sense of Hypermedia APIs – Hype or Reality?
Akana
 
API 101 - Understanding APIs
API 101 - Understanding APIsAPI 101 - Understanding APIs
API 101 - Understanding APIs
3scale
 
API SECURITY
API SECURITYAPI SECURITY
API SECURITY
Tubagus Rizky Dharmawan
 
Operational API design anti-patterns (Jason Harmon)
Operational API design anti-patterns (Jason Harmon)Operational API design anti-patterns (Jason Harmon)
Operational API design anti-patterns (Jason Harmon)
Nordic APIs
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API Platform
Antonio Peric-Mazar
 
REST full API Design
REST full API DesignREST full API Design
REST full API Design
Christian Guenther
 
API Creation to Iteration without the Frustration
API Creation to Iteration without the FrustrationAPI Creation to Iteration without the Frustration
API Creation to Iteration without the Frustration
Nordic APIs
 
Our Hybrid Future: WordPress As Part of the Stack #WCNYC
Our Hybrid Future: WordPress As Part of the Stack #WCNYCOur Hybrid Future: WordPress As Part of the Stack #WCNYC
Our Hybrid Future: WordPress As Part of the Stack #WCNYC
Caldera Labs
 
INTERFACE by apidays_Vulcain: beat GraphQL with HTTP/2+ by Kevin Dunglas
INTERFACE by apidays_Vulcain: beat GraphQL with HTTP/2+ by Kevin DunglasINTERFACE by apidays_Vulcain: beat GraphQL with HTTP/2+ by Kevin Dunglas
INTERFACE by apidays_Vulcain: beat GraphQL with HTTP/2+ by Kevin Dunglas
apidays
 
Our Hybrid Future: WordPress As Part of the Stack
Our Hybrid Future: WordPress As Part of the StackOur Hybrid Future: WordPress As Part of the Stack
Our Hybrid Future: WordPress As Part of the Stack
Caldera Labs
 
Node.js Frameworks & Design Patterns Webinar
Node.js Frameworks & Design Patterns WebinarNode.js Frameworks & Design Patterns Webinar
Node.js Frameworks & Design Patterns Webinar
Shubhra Kar
 
Kasten securing access to your kubernetes applications
Kasten securing access to your kubernetes applicationsKasten securing access to your kubernetes applications
Kasten securing access to your kubernetes applications
LibbySchulze
 
API Best Practices
API Best PracticesAPI Best Practices
API Best Practices
Sai Koppala
 
apidays LIVE Australia 2021 - API Horror Stories from an Unnamed Coworking Co...
apidays LIVE Australia 2021 - API Horror Stories from an Unnamed Coworking Co...apidays LIVE Australia 2021 - API Horror Stories from an Unnamed Coworking Co...
apidays LIVE Australia 2021 - API Horror Stories from an Unnamed Coworking Co...
apidays
 
Maintainable API Docs and Other Rainbow Colored Unicorns
Maintainable API Docs and Other Rainbow Colored UnicornsMaintainable API Docs and Other Rainbow Colored Unicorns
Maintainable API Docs and Other Rainbow Colored Unicorns
Neil Mansilla
 
Ultimate Guide to 30+ API Documentation Solutions
Ultimate Guide to 30+ API Documentation SolutionsUltimate Guide to 30+ API Documentation Solutions
Ultimate Guide to 30+ API Documentation Solutions
Bill Doerrfeld
 
Making Sense of Hypermedia APIs – Hype or Reality?
Making Sense of Hypermedia APIs – Hype or Reality?Making Sense of Hypermedia APIs – Hype or Reality?
Making Sense of Hypermedia APIs – Hype or Reality?
Akana
 
API 101 - Understanding APIs
API 101 - Understanding APIsAPI 101 - Understanding APIs
API 101 - Understanding APIs
3scale
 
Operational API design anti-patterns (Jason Harmon)
Operational API design anti-patterns (Jason Harmon)Operational API design anti-patterns (Jason Harmon)
Operational API design anti-patterns (Jason Harmon)
Nordic APIs
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API Platform
Antonio Peric-Mazar
 
API Creation to Iteration without the Frustration
API Creation to Iteration without the FrustrationAPI Creation to Iteration without the Frustration
API Creation to Iteration without the Frustration
Nordic APIs
 
Our Hybrid Future: WordPress As Part of the Stack #WCNYC
Our Hybrid Future: WordPress As Part of the Stack #WCNYCOur Hybrid Future: WordPress As Part of the Stack #WCNYC
Our Hybrid Future: WordPress As Part of the Stack #WCNYC
Caldera Labs
 
INTERFACE by apidays_Vulcain: beat GraphQL with HTTP/2+ by Kevin Dunglas
INTERFACE by apidays_Vulcain: beat GraphQL with HTTP/2+ by Kevin DunglasINTERFACE by apidays_Vulcain: beat GraphQL with HTTP/2+ by Kevin Dunglas
INTERFACE by apidays_Vulcain: beat GraphQL with HTTP/2+ by Kevin Dunglas
apidays
 
Our Hybrid Future: WordPress As Part of the Stack
Our Hybrid Future: WordPress As Part of the StackOur Hybrid Future: WordPress As Part of the Stack
Our Hybrid Future: WordPress As Part of the Stack
Caldera Labs
 
Node.js Frameworks & Design Patterns Webinar
Node.js Frameworks & Design Patterns WebinarNode.js Frameworks & Design Patterns Webinar
Node.js Frameworks & Design Patterns Webinar
Shubhra Kar
 
Kasten securing access to your kubernetes applications
Kasten securing access to your kubernetes applicationsKasten securing access to your kubernetes applications
Kasten securing access to your kubernetes applications
LibbySchulze
 
API Best Practices
API Best PracticesAPI Best Practices
API Best Practices
Sai Koppala
 
apidays LIVE Australia 2021 - API Horror Stories from an Unnamed Coworking Co...
apidays LIVE Australia 2021 - API Horror Stories from an Unnamed Coworking Co...apidays LIVE Australia 2021 - API Horror Stories from an Unnamed Coworking Co...
apidays LIVE Australia 2021 - API Horror Stories from an Unnamed Coworking Co...
apidays
 

Similar to The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs (20)

David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...
Codemotion
 
Cdm mil-18 - hypermedia ap is for headless platforms and data integration
Cdm mil-18 - hypermedia ap is for headless platforms and data integrationCdm mil-18 - hypermedia ap is for headless platforms and data integration
Cdm mil-18 - hypermedia ap is for headless platforms and data integration
David Gómez García
 
Ibm_interconnect_restapi_workshop
Ibm_interconnect_restapi_workshopIbm_interconnect_restapi_workshop
Ibm_interconnect_restapi_workshop
Shubhra Kar
 
In graph we trust: Microservices, GraphQL and security challenges
In graph we trust: Microservices, GraphQL and security challengesIn graph we trust: Microservices, GraphQL and security challenges
In graph we trust: Microservices, GraphQL and security challenges
Mohammed A. Imran
 
DevSecCon Singapore 2018 - in graph we trust By Imran Mohammed
DevSecCon Singapore 2018 - in graph we trust By Imran MohammedDevSecCon Singapore 2018 - in graph we trust By Imran Mohammed
DevSecCon Singapore 2018 - in graph we trust By Imran Mohammed
DevSecCon
 
apidays LIVE New York - API Code First vs Design First by Phil Sturgeon
apidays LIVE New York - API Code First vs Design First by Phil Sturgeonapidays LIVE New York - API Code First vs Design First by Phil Sturgeon
apidays LIVE New York - API Code First vs Design First by Phil Sturgeon
apidays
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
Taylor Lovett
 
Be a microservices hero
Be a microservices heroBe a microservices hero
Be a microservices hero
OpenRestyCon
 
What’s behind a high quality web API? Ensure your APIs are more than just a ...
What’s behind a high quality web API? Ensure your APIs are more than just a ...What’s behind a high quality web API? Ensure your APIs are more than just a ...
What’s behind a high quality web API? Ensure your APIs are more than just a ...
Kim Clark
 
2022 APIsecure_Securing APIs with Open Standards
2022 APIsecure_Securing APIs with Open Standards2022 APIsecure_Securing APIs with Open Standards
2022 APIsecure_Securing APIs with Open Standards
APIsecure_ Official
 
Walter api
Walter apiWalter api
Walter api
Nicholas Schiller
 
API Athens Meetup - API standards 25-6-2014
API Athens Meetup - API standards 25-6-2014API Athens Meetup - API standards 25-6-2014
API Athens Meetup - API standards 25-6-2014
openi_ict
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
Taylor Lovett
 
Introduction to Hydra
Introduction to HydraIntroduction to Hydra
Introduction to Hydra
Alejandro Inestal
 
Swift meetup22june2015
Swift meetup22june2015Swift meetup22june2015
Swift meetup22june2015
Claire Townend Gee
 
RAML - APIs By Design
RAML - APIs By DesignRAML - APIs By Design
RAML - APIs By Design
Uri Sarid
 
How to Design and Build a Great Web API
How to Design and Build a Great Web APIHow to Design and Build a Great Web API
How to Design and Build a Great Web API
LaunchAny
 
Unlock dependency between client teams and API team with API mock and proxy
Unlock dependency between client teams and API team with API mock and proxyUnlock dependency between client teams and API team with API mock and proxy
Unlock dependency between client teams and API team with API mock and proxy
Bruce Li
 
Mulesoft Raml APIs
Mulesoft Raml APIsMulesoft Raml APIs
Mulesoft Raml APIs
akshay yeluru
 
Practices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPractices and Tools for Building Better APIs
Practices and Tools for Building Better APIs
Peter Hendriks
 
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...
Codemotion
 
Cdm mil-18 - hypermedia ap is for headless platforms and data integration
Cdm mil-18 - hypermedia ap is for headless platforms and data integrationCdm mil-18 - hypermedia ap is for headless platforms and data integration
Cdm mil-18 - hypermedia ap is for headless platforms and data integration
David Gómez García
 
Ibm_interconnect_restapi_workshop
Ibm_interconnect_restapi_workshopIbm_interconnect_restapi_workshop
Ibm_interconnect_restapi_workshop
Shubhra Kar
 
In graph we trust: Microservices, GraphQL and security challenges
In graph we trust: Microservices, GraphQL and security challengesIn graph we trust: Microservices, GraphQL and security challenges
In graph we trust: Microservices, GraphQL and security challenges
Mohammed A. Imran
 
DevSecCon Singapore 2018 - in graph we trust By Imran Mohammed
DevSecCon Singapore 2018 - in graph we trust By Imran MohammedDevSecCon Singapore 2018 - in graph we trust By Imran Mohammed
DevSecCon Singapore 2018 - in graph we trust By Imran Mohammed
DevSecCon
 
apidays LIVE New York - API Code First vs Design First by Phil Sturgeon
apidays LIVE New York - API Code First vs Design First by Phil Sturgeonapidays LIVE New York - API Code First vs Design First by Phil Sturgeon
apidays LIVE New York - API Code First vs Design First by Phil Sturgeon
apidays
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
Taylor Lovett
 
Be a microservices hero
Be a microservices heroBe a microservices hero
Be a microservices hero
OpenRestyCon
 
What’s behind a high quality web API? Ensure your APIs are more than just a ...
What’s behind a high quality web API? Ensure your APIs are more than just a ...What’s behind a high quality web API? Ensure your APIs are more than just a ...
What’s behind a high quality web API? Ensure your APIs are more than just a ...
Kim Clark
 
2022 APIsecure_Securing APIs with Open Standards
2022 APIsecure_Securing APIs with Open Standards2022 APIsecure_Securing APIs with Open Standards
2022 APIsecure_Securing APIs with Open Standards
APIsecure_ Official
 
API Athens Meetup - API standards 25-6-2014
API Athens Meetup - API standards 25-6-2014API Athens Meetup - API standards 25-6-2014
API Athens Meetup - API standards 25-6-2014
openi_ict
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
Taylor Lovett
 
RAML - APIs By Design
RAML - APIs By DesignRAML - APIs By Design
RAML - APIs By Design
Uri Sarid
 
How to Design and Build a Great Web API
How to Design and Build a Great Web APIHow to Design and Build a Great Web API
How to Design and Build a Great Web API
LaunchAny
 
Unlock dependency between client teams and API team with API mock and proxy
Unlock dependency between client teams and API team with API mock and proxyUnlock dependency between client teams and API team with API mock and proxy
Unlock dependency between client teams and API team with API mock and proxy
Bruce Li
 
Practices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPractices and Tools for Building Better APIs
Practices and Tools for Building Better APIs
Peter Hendriks
 
Ad

Recently uploaded (20)

PDF Reader Pro Crack Latest Version FREE Download 2025
PDF Reader Pro Crack Latest Version FREE Download 2025PDF Reader Pro Crack Latest Version FREE Download 2025
PDF Reader Pro Crack Latest Version FREE Download 2025
mu394968
 
Exploring Wayland: A Modern Display Server for the Future
Exploring Wayland: A Modern Display Server for the FutureExploring Wayland: A Modern Display Server for the Future
Exploring Wayland: A Modern Display Server for the Future
ICS
 
How to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud PerformanceHow to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud Performance
ThousandEyes
 
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage DashboardsAdobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
BradBedford3
 
Microsoft Excel Core Points Training.pptx
Microsoft Excel Core Points Training.pptxMicrosoft Excel Core Points Training.pptx
Microsoft Excel Core Points Training.pptx
Mekonnen
 
Top 10 Client Portal Software Solutions for 2025.docx
Top 10 Client Portal Software Solutions for 2025.docxTop 10 Client Portal Software Solutions for 2025.docx
Top 10 Client Portal Software Solutions for 2025.docx
Portli
 
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Orangescrum
 
Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)
Allon Mureinik
 
WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)
sh607827
 
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
F-Secure Freedome VPN 2025 Crack Plus Activation  New VersionF-Secure Freedome VPN 2025 Crack Plus Activation  New Version
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
saimabibi60507
 
Expand your AI adoption with AgentExchange
Expand your AI adoption with AgentExchangeExpand your AI adoption with AgentExchange
Expand your AI adoption with AgentExchange
Fexle Services Pvt. Ltd.
 
Not So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java WebinarNot So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java Webinar
Tier1 app
 
Creating Automated Tests with AI - Cory House - Applitools.pdf
Creating Automated Tests with AI - Cory House - Applitools.pdfCreating Automated Tests with AI - Cory House - Applitools.pdf
Creating Automated Tests with AI - Cory House - Applitools.pdf
Applitools
 
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
Andre Hora
 
How can one start with crypto wallet development.pptx
How can one start with crypto wallet development.pptxHow can one start with crypto wallet development.pptx
How can one start with crypto wallet development.pptx
laravinson24
 
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
saimabibi60507
 
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Andre Hora
 
Implementing promises with typescripts, step by step
Implementing promises with typescripts, step by stepImplementing promises with typescripts, step by step
Implementing promises with typescripts, step by step
Ran Wahle
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
Revolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptxRevolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptx
nidhisingh691197
 
PDF Reader Pro Crack Latest Version FREE Download 2025
PDF Reader Pro Crack Latest Version FREE Download 2025PDF Reader Pro Crack Latest Version FREE Download 2025
PDF Reader Pro Crack Latest Version FREE Download 2025
mu394968
 
Exploring Wayland: A Modern Display Server for the Future
Exploring Wayland: A Modern Display Server for the FutureExploring Wayland: A Modern Display Server for the Future
Exploring Wayland: A Modern Display Server for the Future
ICS
 
How to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud PerformanceHow to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud Performance
ThousandEyes
 
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage DashboardsAdobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
BradBedford3
 
Microsoft Excel Core Points Training.pptx
Microsoft Excel Core Points Training.pptxMicrosoft Excel Core Points Training.pptx
Microsoft Excel Core Points Training.pptx
Mekonnen
 
Top 10 Client Portal Software Solutions for 2025.docx
Top 10 Client Portal Software Solutions for 2025.docxTop 10 Client Portal Software Solutions for 2025.docx
Top 10 Client Portal Software Solutions for 2025.docx
Portli
 
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Orangescrum
 
Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)
Allon Mureinik
 
WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)
sh607827
 
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
F-Secure Freedome VPN 2025 Crack Plus Activation  New VersionF-Secure Freedome VPN 2025 Crack Plus Activation  New Version
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
saimabibi60507
 
Expand your AI adoption with AgentExchange
Expand your AI adoption with AgentExchangeExpand your AI adoption with AgentExchange
Expand your AI adoption with AgentExchange
Fexle Services Pvt. Ltd.
 
Not So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java WebinarNot So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java Webinar
Tier1 app
 
Creating Automated Tests with AI - Cory House - Applitools.pdf
Creating Automated Tests with AI - Cory House - Applitools.pdfCreating Automated Tests with AI - Cory House - Applitools.pdf
Creating Automated Tests with AI - Cory House - Applitools.pdf
Applitools
 
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
Andre Hora
 
How can one start with crypto wallet development.pptx
How can one start with crypto wallet development.pptxHow can one start with crypto wallet development.pptx
How can one start with crypto wallet development.pptx
laravinson24
 
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
saimabibi60507
 
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Andre Hora
 
Implementing promises with typescripts, step by step
Implementing promises with typescripts, step by stepImplementing promises with typescripts, step by step
Implementing promises with typescripts, step by step
Ran Wahle
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
Revolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptxRevolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptx
nidhisingh691197
 
Ad

The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs