SlideShare ist ein Scribd-Unternehmen logo
1 von 90
Downloaden Sie, um offline zu lesen
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
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
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
{
"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”
}
]
{
“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
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
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
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

Weitere ähnliche Inhalte

Was ist angesagt?

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 UnicornsNeil 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 SolutionsBill 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 APIs3scale
 
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 PlatformAntonio 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 FrustrationNordic 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 #WCNYCCaldera 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 Dunglasapidays
 
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 StackCaldera Labs
 
Node.js Frameworks & Design Patterns Webinar
Node.js Frameworks & Design Patterns WebinarNode.js Frameworks & Design Patterns Webinar
Node.js Frameworks & Design Patterns WebinarShubhra 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 applicationsLibbySchulze
 
API Best Practices
API Best PracticesAPI Best Practices
API Best PracticesSai 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
 

Was ist angesagt? (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
 
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
 
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?
 
API 101 - Understanding APIs
API 101 - Understanding APIsAPI 101 - Understanding APIs
API 101 - Understanding APIs
 
API SECURITY
API SECURITYAPI SECURITY
API SECURITY
 
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)
 
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
 
REST full API Design
REST full API DesignREST full API Design
REST full API Design
 
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
 
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
 
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
 
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
 
Node.js Frameworks & Design Patterns Webinar
Node.js Frameworks & Design Patterns WebinarNode.js Frameworks & Design Patterns Webinar
Node.js Frameworks & Design Patterns Webinar
 
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
 
API Best Practices
API Best PracticesAPI Best Practices
API Best Practices
 
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...
 

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

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 integrationDavid Gómez García
 
Ibm_interconnect_restapi_workshop
Ibm_interconnect_restapi_workshopIbm_interconnect_restapi_workshop
Ibm_interconnect_restapi_workshopShubhra Kar
 
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 MohammedDevSecCon
 
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 challengesMohammed A. Imran
 
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 Sturgeonapidays
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPressTaylor Lovett
 
Be a microservices hero
Be a microservices heroBe a microservices hero
Be a microservices heroOpenRestyCon
 
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 StandardsAPIsecure_ 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-2014openi_ict
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPressTaylor Lovett
 
RAML - APIs By Design
RAML - APIs By DesignRAML - APIs By Design
RAML - APIs By DesignUri 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 APILaunchAny
 
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 proxyBruce 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 APIsPeter Hendriks
 

Ähnlich wie 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 ...
 
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
 
Ibm_interconnect_restapi_workshop
Ibm_interconnect_restapi_workshopIbm_interconnect_restapi_workshop
Ibm_interconnect_restapi_workshop
 
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
 
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
 
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
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
 
Be a microservices hero
Be a microservices heroBe a microservices hero
Be a microservices hero
 
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 ...
 
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
 
Walter api
Walter apiWalter api
Walter api
 
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
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
 
Introduction to Hydra
Introduction to HydraIntroduction to Hydra
Introduction to Hydra
 
Swift meetup22june2015
Swift meetup22june2015Swift meetup22june2015
Swift meetup22june2015
 
RAML - APIs By Design
RAML - APIs By DesignRAML - APIs By Design
RAML - APIs By Design
 
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
 
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
 
Mulesoft Raml APIs
Mulesoft Raml APIsMulesoft Raml APIs
Mulesoft Raml APIs
 
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
 

Kürzlich hochgeladen

Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Intelisync
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 

Kürzlich hochgeladen (20)

Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 

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