SlideShare a Scribd company logo
RESTful Web API Patterns
and Practices
Mike Amundsen
@mamund
"This guide shows you the
rules, routines, commands,
and protocols—the glue—that
integrates individual
microservices so they can
function together in a safe,
scalable, and reliable way."
-- O'Reilly Media
Overview
● Pattern Thinking
● Design
● Clients
● Services
● Data
● Workflow
● Summary
Pattern Thinking
Pattern Thinking
A framework for
understanding,
designing, and
constructing systems
Pattern Thinking
Inductive reasoning is any of various
methods of reasoning in which broad
generalizations or principles are derived
from a body of observations.
Pattern Thinking
"Each pattern describes a problem
which occurs over and over again, and
then describes the core of the solution
to that problem, in such a way that you
can use this solution a million times
over, without ever doing it the same way
twice"
-- Christopher Alexander
Pattern Thinking
Web-centric implementations
rely on three key elements:
messages, actions, and
vocabularies.
Design
Design Patterns
Design systems so that machines
built by different people who have
never met can successfully
interact with each other.
Design Patterns
3.1 Creating Interoperability with Registered Media Types
3.2 Ensuring Future Compatibility with Structured Media Types
3.3 Sharing Domain Specifics Via Published Vocabularies
3.4 Describing Problem Spaces with Semantic Profiles
3.5 Expressing Domain Actions at Run-time with Embedded Hypermedia
3.6 Designing Consistent Data Writes with Idempotent Actions
3.7 Enabling Interoperability with Inter-Service State Transfers
3.8 Design for Repeatable Actions
3.9 Design for Reversible Actions
3.10 Design for Extensible Messages
3.11 Design for Modifiable Interfaces
Design Patterns
3.1 Creating Interoperability with Registered Media Types
3.2 Ensuring Future Compatibility with Structured Media Types
3.3 Sharing Domain Specifics Via Published Vocabularies
3.4 Describing Problem Spaces with Semantic Profiles
3.5 Expressing Domain Actions at Run-time with Embedded Hypermedia
3.6 Designing Consistent Data Writes with Idempotent Actions
3.7 Enabling Interoperability with Inter-Service State Transfers
3.8 Design for Repeatable Actions
3.9 Design for Reversible Actions
3.10 Design for Extensible Messages
3.11 Design for Modifiable Interfaces
Design Patterns
3.1 Creating Interoperability with Registered Media Types
3.2 Ensuring Future Compatibility with Structured Media Types
3.3 Sharing Domain Specifics Via Published Vocabularies
3.4 Describing Problem Spaces with Semantic Profiles
3.5 Expressing Domain Actions at Run-time with Embedded Hypermedia
3.6 Designing Consistent Data Writes with Idempotent Actions
3.7 Enabling Interoperability with Inter-Service State Transfers
3.8 Design for Repeatable Actions
3.9 Design for Reversible Actions
3.10 Design for Extensible Messages
3.11 Design for Modifiable Interfaces
Design Patterns
3.1 Creating Interoperability with Registered Media Types
3.2 Ensuring Future Compatibility with Structured Media Types
3.3 Sharing Domain Specifics Via Published Vocabularies
3.4 Describing Problem Spaces with Semantic Profiles
3.5 Expressing Domain Actions at Run-time with Embedded Hypermedia
3.6 Designing Consistent Data Writes with Idempotent Actions
3.7 Enabling Interoperability with Inter-Service State Transfers
3.8 Design for Repeatable Actions
3.9 Design for Reversible Actions
3.10 Design for Extensible Messages
3.11 Design for Modifiable Interfaces
Design Patterns
Describing Problem Spaces with
Semantic Profiles
Design Patterns
Describing Problem Spaces with
Semantic Profiles
Design Patterns
Describing Problem Spaces with Semantic Profiles
Make designs composable
Clients
Client Patterns
Create API consumer apps that
make few assertions about how
they communicate (protocol,
message model, and vocabulary)
with servers and let the server
supply the details (the what) at
runtime.
Client Patterns
4.1 Limiting the use of Hard-Coded URLs
4.2 Code Clients to be HTTP-Aware
4.3 Coding More Resilient Clients With Message-Centric Implementations
4.4 Coding Effective Clients to Understand Vocabulary Profiles
4.5 Negotiate for Profile Support at Runtime
4.6 Managing Representation Formats At Runtime
4.7 Using Schema Documents as a Source of Message Metadata
4.8 Every Important Element Within a Response Needs an Identifier
4.9 Relying on Hypermedia Controls In the Response
4.10 Supporting Links and Forms for Non-Hypermedia Services
4.11 Validating Data Properties At Runtime
4.12 Using Document Schemas to Validate Outgoing Messages
4.13 Using Document Queries to Validate Incoming Messages
4.14 Validating Incoming Data
4.15 Maintaining Your Own State
4.16 Having A Goal In Mind
Client Patterns
4.1 Limiting the use of Hard-Coded URLs
4.2 Code Clients to be HTTP-Aware
4.3 Coding More Resilient Clients With Message-Centric Implementations
4.4 Coding Effective Clients to Understand Vocabulary Profiles
4.5 Negotiate for Profile Support at Runtime
4.6 Managing Representation Formats At Runtime
4.7 Using Schema Documents as a Source of Message Metadata
4.8 Every Important Element Within a Response Needs an Identifier
4.9 Relying on Hypermedia Controls In the Response
4.10 Supporting Links and Forms for Non-Hypermedia Services
4.11 Validating Data Properties At Runtime
4.12 Using Document Schemas to Validate Outgoing Messages
4.13 Using Document Queries to Validate Incoming Messages
4.14 Validating Incoming Data
4.15 Maintaining Your Own State
4.16 Having A Goal In Mind
Client Patterns
4.1 Limiting the use of Hard-Coded URLs
4.2 Code Clients to be HTTP-Aware
4.3 Coding More Resilient Clients With Message-Centric Implementations
4.4 Coding Effective Clients to Understand Vocabulary Profiles
4.5 Negotiate for Profile Support at Runtime
4.6 Managing Representation Formats At Runtime
4.7 Using Schema Documents as a Source of Message Metadata
4.8 Every Important Element Within a Response Needs an Identifier
4.9 Relying on Hypermedia Controls In the Response
4.10 Supporting Links and Forms for Non-Hypermedia Services
4.11 Validating Data Properties At Runtime
4.12 Using Document Schemas to Validate Outgoing Messages
4.13 Using Document Queries to Validate Incoming Messages
4.14 Validating Incoming Data
4.15 Maintaining Your Own State
4.16 Having A Goal In Mind
Client Patterns
4.1 Limiting the use of Hard-Coded URLs
4.2 Code Clients to be HTTP-Aware
4.3 Coding More Resilient Clients With Message-Centric Implementations
4.4 Coding Effective Clients to Understand Vocabulary Profiles
4.5 Negotiate for Profile Support at Runtime
4.6 Managing Representation Formats At Runtime
4.7 Using Schema Documents as a Source of Message Metadata
4.8 Every Important Element Within a Response Needs an Identifier
4.9 Relying on Hypermedia Controls In the Response
4.10 Supporting Links and Forms for Non-Hypermedia Services
4.11 Validating Data Properties At Runtime
4.12 Using Document Schemas to Validate Outgoing Messages
4.13 Using Document Queries to Validate Incoming Messages
4.14 Validating Incoming Data
4.15 Maintaining Your Own State
4.16 Having A Goal In Mind
Client Patterns
4.1 Limiting the use of Hard-Coded URLs
4.2 Code Clients to be HTTP-Aware
4.3 Coding More Resilient Clients With Message-Centric Implementations
4.4 Coding Effective Clients to Understand Vocabulary Profiles
4.5 Negotiate for Profile Support at Runtime
4.6 Managing Representation Formats At Runtime
4.7 Using Schema Documents as a Source of Message Metadata
4.8 Every Important Element Within a Response Needs an Identifier
4.9 Relying on Hypermedia Controls In the Response
4.10 Supporting Links and Forms for Non-Hypermedia Services
4.11 Validating Data Properties At Runtime
4.12 Using Document Schemas to Validate Outgoing Messages
4.13 Using Document Queries to Validate Incoming Messages
4.14 Validating Incoming Data
4.15 Maintaining Your Own State
4.16 Having A Goal In Mind
Client Patterns
Managing Representation Formats
at Runtime
Client Patterns
Managing Representation Formats
at Runtime
Client Patterns
Managing Representation Formats
at Runtime
Client Patterns
Managing Representation Formats
at Runtime
Make clients adaptable
Services
Service Patterns
The API is the contract — the
promise that needs to be kept.
Service Patterns
5.1 Publishing at Least One Stable URL
5.2 Preventing Internal Model Leaks
5.3 Converting Internal Models to External Messages
5.4 Expressing Internal Functions as External Actions
5.5 Advertising Support for Client Preferences for Responses
5.6 Supporting HTTP Content Negotiation
5.7 Publishing Complete Vocabularies for Machine Clients
5.8 Supporting Shared Vocabularies in Standard Formats
5.9 Publishing Service Definition Documents
5.10 Publishing API Metadata
5.11 Supporting Service Health Monitoring
5.12 Standardizing Error Reporting
5.13 Improve Service Discoverability with a Runtime Service Registry
5.14 Increasing Throughput with Client-Supplied Identifiers
5.15 Improving Reliability with Idempotent Create
5.16 Providing Runtime Fallbacks for Dependent Services
5.17 Using Semantic Proxies to Access Non-Compliant Services
Service Patterns
5.1 Publishing at Least One Stable URL
5.2 Preventing Internal Model Leaks
5.3 Converting Internal Models to External Messages
5.4 Expressing Internal Functions as External Actions
5.5 Advertising Support for Client Preferences for Responses
5.6 Supporting HTTP Content Negotiation
5.7 Publishing Complete Vocabularies for Machine Clients
5.8 Supporting Shared Vocabularies in Standard Formats
5.9 Publishing Service Definition Documents
5.10 Publishing API Metadata
5.11 Supporting Service Health Monitoring
5.12 Standardizing Error Reporting
5.13 Improve Service Discoverability with a Runtime Service Registry
5.14 Increasing Throughput with Client-Supplied Identifiers
5.15 Improving Reliability with Idempotent Create
5.16 Providing Runtime Fallbacks for Dependent Services
5.17 Using Semantic Proxies to Access Non-Compliant Services
Service Patterns
5.1 Publishing at Least One Stable URL
5.2 Preventing Internal Model Leaks
5.3 Converting Internal Models to External Messages
5.4 Expressing Internal Functions as External Actions
5.5 Advertising Support for Client Preferences for Responses
5.6 Supporting HTTP Content Negotiation
5.7 Publishing Complete Vocabularies for Machine Clients
5.8 Supporting Shared Vocabularies in Standard Formats
5.9 Publishing Service Definition Documents
5.10 Publishing API Metadata
5.11 Supporting Service Health Monitoring
5.12 Standardizing Error Reporting
5.13 Improve Service Discoverability with a Runtime Service Registry
5.14 Increasing Throughput with Client-Supplied Identifiers
5.15 Improving Reliability with Idempotent Create
5.16 Providing Runtime Fallbacks for Dependent Services
5.17 Using Semantic Proxies to Access Non-Compliant Services
Service Patterns
5.1 Publishing at Least One Stable URL
5.2 Preventing Internal Model Leaks
5.3 Converting Internal Models to External Messages
5.4 Expressing Internal Functions as External Actions
5.5 Advertising Support for Client Preferences for Responses
5.6 Supporting HTTP Content Negotiation
5.7 Publishing Complete Vocabularies for Machine Clients
5.8 Supporting Shared Vocabularies in Standard Formats
5.9 Publishing Service Definition Documents
5.10 Publishing API Metadata
5.11 Supporting Service Health Monitoring
5.12 Standardizing Error Reporting
5.13 Improve Service Discoverability with a Runtime Service Registry
5.14 Increasing Throughput with Client-Supplied Identifiers
5.15 Improving Reliability with Idempotent Create
5.16 Providing Runtime Fallbacks for Dependent Services
5.17 Using Semantic Proxies to Access Non-Compliant Services
Improve Service Discoverability with a Runtime Service Registry
Service Patterns
Service Patterns
Improve Service Discoverability with a Runtime Service Registry
Make services modifiable
Data
Data Patterns
"Your data model is not your object
model is not your resource model is
not your representation model."
-- Amundsen's Maxim
Data Patterns
6.1 Hiding Your Data Storage Internals
6.2 Making All Changes Idempotent
6.3 Hide Data Relationships for External Actions
6.4 Leveraging HTTP URLs to Support “Contains” and “And” Queries
6.5 Returning Metadata for Query Responses
6.6 Returning HTTP 200 vs. HTTP 400 for Data-Centric Queries
6.7 Using Media Types for Data Queries
6.8 Ignore Unknown Data Fields
6.9 Improving Performance with Caching Directives
6.10 Modifying Data Models In Production
6.11 Extending Remote Data Stores
6.12 Limiting Large Scale Responses
6.13 Using Pass-Through Proxies for Data Exchange
Data Patterns
6.1 Hiding Your Data Storage Internals
6.2 Making All Changes Idempotent
6.3 Hide Data Relationships for External Actions
6.4 Leveraging HTTP URLs to Support “Contains” and “And” Queries
6.5 Returning Metadata for Query Responses
6.6 Returning HTTP 200 vs. HTTP 400 for Data-Centric Queries
6.7 Using Media Types for Data Queries
6.8 Ignore Unknown Data Fields
6.9 Improving Performance with Caching Directives
6.10 Modifying Data Models In Production
6.11 Extending Remote Data Stores
6.12 Limiting Large Scale Responses
6.13 Using Pass-Through Proxies for Data Exchange
Data Patterns
6.1 Hiding Your Data Storage Internals
6.2 Making All Changes Idempotent
6.3 Hide Data Relationships for External Actions
6.4 Leveraging HTTP URLs to Support “Contains” and “And” Queries
6.5 Returning Metadata for Query Responses
6.6 Returning HTTP 200 vs. HTTP 400 for Data-Centric Queries
6.7 Using Media Types for Data Queries
6.8 Ignore Unknown Data Fields
6.9 Improving Performance with Caching Directives
6.10 Modifying Data Models In Production
6.11 Extending Remote Data Stores
6.12 Limiting Large Scale Responses
6.13 Using Pass-Through Proxies for Data Exchange
Data Patterns
6.1 Hiding Your Data Storage Internals
6.2 Making All Changes Idempotent
6.3 Hide Data Relationships for External Actions
6.4 Leveraging HTTP URLs to Support “Contains” and “And” Queries
6.5 Returning Metadata for Query Responses
6.6 Returning HTTP 200 vs. HTTP 400 for Data-Centric Queries
6.7 Using Media Types for Data Queries
6.8 Ignore Unknown Data Fields
6.9 Improving Performance with Caching Directives
6.10 Modifying Data Models In Production
6.11 Extending Remote Data Stores
6.12 Limiting Large Scale Responses
6.13 Using Pass-Through Proxies for Data Exchange
Data Patterns
Modifying Data Models in
Production
Data Patterns
Modifying Data Models in
Production
Data Patterns
Modifying Data Models in
Production
Make data portable
Workflow
Workflow Patterns
Each service that is enlisted
in a workflow should be a
composable service.
Workflow Patterns
7.1 Designing Workflow-Compliant Services
7.2 Supporting Shared State for Workflows
7.3 Describing Workflow as Code
7.4 Describing Workflow as DSL
7.5 Describing Workflow as Documents
7.6 Supporting RESTful Job Control Language
7.7 Exposing a Progress Resource for Your Workflows
7.8 Returning All Related Actions
7.9 Returning Most-Recently Used Resources (MRUs)
7.10 Supporting Stateful Work-In-Progress
7.11 Enabling Standard List Navigation
7.12 Supporting Partial Form Submit
7.13 Using State-Watch to Enable Client-Driven Workflow
7.14 Optimizing Queries With Stored Replays
7.15 Synchronous Reply for Incomplete Work with 202 Accepted
7.16 Short-Term Fixes with Automatic Retries
7.17 Supporting Local Undo/Rollback
7.18 Calling for Help
7.19 Scaling Workflow with Queues and Clusters
7.20 Using Workflow Proxies to Enlist Non-Compliant Services
7.1 Designing Workflow-Compliant Services
7.2 Supporting Shared State for Workflows
7.3 Describing Workflow as Code
7.4 Describing Workflow as DSL
7.5 Describing Workflow as Documents
7.6 Supporting RESTful Job Control Language
7.7 Exposing a Progress Resource for Your Workflows
7.8 Returning All Related Actions
7.9 Returning Most-Recently Used Resources (MRUs)
7.10 Supporting Stateful Work-In-Progress
7.11 Enabling Standard List Navigation
7.12 Supporting Partial Form Submit
7.13 Using State-Watch to Enable Client-Driven Workflow
7.14 Optimizing Queries With Stored Replays
7.15 Synchronous Reply for Incomplete Work with 202 Accepted
7.16 Short-Term Fixes with Automatic Retries
7.17 Supporting Local Undo/Rollback
7.18 Calling for Help
7.19 Scaling Workflow with Queues and Clusters
7.20 Using Workflow Proxies to Enlist Non-Compliant Services
Workflow Patterns
Workflow Patterns
7.1 Designing Workflow-Compliant Services
7.2 Supporting Shared State for Workflows
7.3 Describing Workflow as Code
7.4 Describing Workflow as DSL
7.5 Describing Workflow as Documents
7.6 Supporting RESTful Job Control Language
7.7 Exposing a Progress Resource for Your Workflows
7.8 Returning All Related Actions
7.9 Returning Most-Recently Used Resources (MRUs)
7.10 Supporting Stateful Work-In-Progress
7.11 Enabling Standard List Navigation
7.12 Supporting Partial Form Submit
7.13 Using State-Watch to Enable Client-Driven Workflow
7.14 Optimizing Queries With Stored Replays
7.15 Synchronous Reply for Incomplete Work with 202 Accepted
7.16 Short-Term Fixes with Automatic Retries
7.17 Supporting Local Undo/Rollback
7.18 Calling for Help
7.19 Scaling Workflow with Queues and Clusters
7.20 Using Workflow Proxies to Enlist Non-Compliant Services
Workflow Patterns
7.1 Designing Workflow-Compliant Services
7.2 Supporting Shared State for Workflows
7.3 Describing Workflow as Code
7.4 Describing Workflow as DSL
7.5 Describing Workflow as Documents
7.6 Supporting RESTful Job Control Language
7.7 Exposing a Progress Resource for Your Workflows
7.8 Returning All Related Actions
7.9 Returning Most-Recently Used Resources (MRUs)
7.10 Supporting Stateful Work-In-Progress
7.11 Enabling Standard List Navigation
7.12 Supporting Partial Form Submit
7.13 Using State-Watch to Enable Client-Driven Workflow
7.14 Optimizing Queries With Stored Replays
7.15 Synchronous Reply for Incomplete Work with 202 Accepted
7.16 Short-Term Fixes with Automatic Retries
7.17 Supporting Local Undo/Rollback
7.18 Calling for Help
7.19 Scaling Workflow with Queues and Clusters
7.20 Using Workflow Proxies to Enlist Non-Compliant Services
Workflow Patterns
RESTful Job Control Language
Workflow Patterns
RESTful Job Control Language
Workflow Patterns
RESTful Job Control Language
Workflow Patterns
RESTful Job Control Language
Workflow Patterns
RESTful Job Control Language
Workflow Patterns
RESTful Job Control Language
Make workflow flexible
And so …
Goals
● Make designs composable
● Make clients adaptable
● Make services modifiable
● Make data portable
● Make workflow flexible
Goals
● Make designs composable
● Make clients adaptable
● Make services modifiable
● Make data portable
● Make workflow flexible
Goals
● Make designs composable
● Make clients adaptable
● Make services modifiable
● Make data portable
● Make workflow flexible
Goals
● Make designs composable
● Make clients adaptable
● Make services modifiable
● Make data portable
● Make workflow flexible
Goals
● Make designs composable
● Make clients adaptable
● Make services modifiable
● Make data portable
● Make workflow flexible
Goals
● Make designs composable
● Make clients adaptable
● Make services modifiable
● Make data portable
● Make workflow flexible
The RESTful Web API Principle
"Leverage global reach
to solve problems you
haven’t thought of for
people you have
never met."
The RESTful Web API Principle
"Leverage global reach
to solve problems you
haven’t thought of for
people you have
never met."
The RESTful Web API Principle
"Leverage global reach
to solve problems you
haven’t thought of for
people you have
never met."
The RESTful Web API Principle
"Leverage global reach
to solve problems you
haven’t thought of for
people you have
never met."
The RESTful Web API Principle
"Leverage global reach
to solve problems you
haven’t thought of for
people you have
never met."
The RESTful Web API Principle
"Leverage global reach
to solve problems you
haven’t thought of for
people you have
never met."
Pattern Thinking -- and Models
"Everything we think we know about the
world is a model."
-- Donella Meadows, 2008
Pattern Thinking
"The difference between the novice and
the teacher is simply that the novice has
not learnt, yet, how to do things in such
a way that they can afford to make
small mistakes."
-- Christopher Alexander
Pattern Thinking
"The difference between the novice and
the teacher is simply that the novice
has not learnt, yet, how to do things in
such a way that they can afford to make
small mistakes."
-- Christopher Alexander
RESTful Web API Patterns
and Practices
Mike Amundsen
@mamund
RESTful Web API Patterns
and Practices
Mike Amundsen
@mamund

More Related Content

Similar to Apidays New York 2024 - RESTful API Patterns and Practices by Mike Amundsen, API Strategist

Semantic Mediation Bus Presentation at VORTE 2012
Semantic Mediation Bus Presentation at VORTE 2012Semantic Mediation Bus Presentation at VORTE 2012
Semantic Mediation Bus Presentation at VORTE 2012
Wen Zhu
 
Get Ready for SharePoint 2016
Get Ready for SharePoint 2016Get Ready for SharePoint 2016
Get Ready for SharePoint 2016
Trigent_Senthil
 
Web Services Best Practices 072604.ppt
Web Services Best Practices 072604.pptWeb Services Best Practices 072604.ppt
Web Services Best Practices 072604.ppt
mercurial02
 
PPT - A slice of cake php
PPT - A slice of cake phpPPT - A slice of cake php
PPT - A slice of cake php
Konstant Infosolutions Pvt. Ltd.
 
Managed Metadata and Taxonomies in SharePoint 2013
Managed Metadata and Taxonomies in SharePoint 2013Managed Metadata and Taxonomies in SharePoint 2013
Managed Metadata and Taxonomies in SharePoint 2013
Chris McNulty
 
VidyaBhooshanMishra_CV
VidyaBhooshanMishra_CVVidyaBhooshanMishra_CV
VidyaBhooshanMishra_CV
Landis+Gyr
 
What’s new in the 4.5
What’s new in the 4.5What’s new in the 4.5
What’s new in the 4.5
Yuriy Seniuk
 
Leveraging Governance in the IBM WebSphere Service Registry and Repository fo...
Leveraging Governance in the IBM WebSphere Service Registry and Repository fo...Leveraging Governance in the IBM WebSphere Service Registry and Repository fo...
Leveraging Governance in the IBM WebSphere Service Registry and Repository fo...
Prolifics
 
Asp.net brochure
Asp.net  brochureAsp.net  brochure
Asp.net brochure
Zabeel Institute
 
Sreeraj_Resume
Sreeraj_ResumeSreeraj_Resume
Sreeraj_Resume
Sreeraj Neelakantan
 
Intro to SharePoint for Developers
Intro to SharePoint for DevelopersIntro to SharePoint for Developers
Intro to SharePoint for Developers
Rob Wilson
 
Top 13 Backend Frameworks for Web development in 2024
Top 13 Backend Frameworks for Web development in 2024Top 13 Backend Frameworks for Web development in 2024
Top 13 Backend Frameworks for Web development in 2024
Clarion Technologies
 
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePointINFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
Jonathan Ralton
 
Asp.net
Asp.netAsp.net
Asp.net
Rizwan Ahmed
 
JavaPerformanceChapter_9
JavaPerformanceChapter_9JavaPerformanceChapter_9
JavaPerformanceChapter_9
Saurav Basu
 
Introducing the WSO2 Enterprise Integrator 6.1
Introducing the WSO2 Enterprise Integrator 6.1Introducing the WSO2 Enterprise Integrator 6.1
Introducing the WSO2 Enterprise Integrator 6.1
WSO2
 
Sharepoint And Clearspace
Sharepoint And ClearspaceSharepoint And Clearspace
Sharepoint And Clearspace
Saurabh Raisinghani
 
Presentation
PresentationPresentation
Presentation
Ashley Lawson
 
New Ways To Engage With Tiempo 2011
New Ways To Engage With Tiempo 2011New Ways To Engage With Tiempo 2011
New Ways To Engage With Tiempo 2011
rgfordham
 
Koneksys Presentation March 2021
Koneksys Presentation March 2021Koneksys Presentation March 2021
Koneksys Presentation March 2021
Axel Reichwein
 

Similar to Apidays New York 2024 - RESTful API Patterns and Practices by Mike Amundsen, API Strategist (20)

Semantic Mediation Bus Presentation at VORTE 2012
Semantic Mediation Bus Presentation at VORTE 2012Semantic Mediation Bus Presentation at VORTE 2012
Semantic Mediation Bus Presentation at VORTE 2012
 
Get Ready for SharePoint 2016
Get Ready for SharePoint 2016Get Ready for SharePoint 2016
Get Ready for SharePoint 2016
 
Web Services Best Practices 072604.ppt
Web Services Best Practices 072604.pptWeb Services Best Practices 072604.ppt
Web Services Best Practices 072604.ppt
 
PPT - A slice of cake php
PPT - A slice of cake phpPPT - A slice of cake php
PPT - A slice of cake php
 
Managed Metadata and Taxonomies in SharePoint 2013
Managed Metadata and Taxonomies in SharePoint 2013Managed Metadata and Taxonomies in SharePoint 2013
Managed Metadata and Taxonomies in SharePoint 2013
 
VidyaBhooshanMishra_CV
VidyaBhooshanMishra_CVVidyaBhooshanMishra_CV
VidyaBhooshanMishra_CV
 
What’s new in the 4.5
What’s new in the 4.5What’s new in the 4.5
What’s new in the 4.5
 
Leveraging Governance in the IBM WebSphere Service Registry and Repository fo...
Leveraging Governance in the IBM WebSphere Service Registry and Repository fo...Leveraging Governance in the IBM WebSphere Service Registry and Repository fo...
Leveraging Governance in the IBM WebSphere Service Registry and Repository fo...
 
Asp.net brochure
Asp.net  brochureAsp.net  brochure
Asp.net brochure
 
Sreeraj_Resume
Sreeraj_ResumeSreeraj_Resume
Sreeraj_Resume
 
Intro to SharePoint for Developers
Intro to SharePoint for DevelopersIntro to SharePoint for Developers
Intro to SharePoint for Developers
 
Top 13 Backend Frameworks for Web development in 2024
Top 13 Backend Frameworks for Web development in 2024Top 13 Backend Frameworks for Web development in 2024
Top 13 Backend Frameworks for Web development in 2024
 
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePointINFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
 
Asp.net
Asp.netAsp.net
Asp.net
 
JavaPerformanceChapter_9
JavaPerformanceChapter_9JavaPerformanceChapter_9
JavaPerformanceChapter_9
 
Introducing the WSO2 Enterprise Integrator 6.1
Introducing the WSO2 Enterprise Integrator 6.1Introducing the WSO2 Enterprise Integrator 6.1
Introducing the WSO2 Enterprise Integrator 6.1
 
Sharepoint And Clearspace
Sharepoint And ClearspaceSharepoint And Clearspace
Sharepoint And Clearspace
 
Presentation
PresentationPresentation
Presentation
 
New Ways To Engage With Tiempo 2011
New Ways To Engage With Tiempo 2011New Ways To Engage With Tiempo 2011
New Ways To Engage With Tiempo 2011
 
Koneksys Presentation March 2021
Koneksys Presentation March 2021Koneksys Presentation March 2021
Koneksys Presentation March 2021
 

More from apidays

Apidays Helsinki 2024 - Sustainable IT and API Performance - How to Bring The...
Apidays Helsinki 2024 - Sustainable IT and API Performance - How to Bring The...Apidays Helsinki 2024 - Sustainable IT and API Performance - How to Bring The...
Apidays Helsinki 2024 - Sustainable IT and API Performance - How to Bring The...
apidays
 
Apidays Helsinki 2024 - APIs ahoy, the case of Customer Booking APIs in Finn...
Apidays Helsinki 2024 -  APIs ahoy, the case of Customer Booking APIs in Finn...Apidays Helsinki 2024 -  APIs ahoy, the case of Customer Booking APIs in Finn...
Apidays Helsinki 2024 - APIs ahoy, the case of Customer Booking APIs in Finn...
apidays
 
Apidays Helsinki 2024 - From Chaos to Calm- Navigating Emerging API Security...
Apidays Helsinki 2024 -  From Chaos to Calm- Navigating Emerging API Security...Apidays Helsinki 2024 -  From Chaos to Calm- Navigating Emerging API Security...
Apidays Helsinki 2024 - From Chaos to Calm- Navigating Emerging API Security...
apidays
 
Apidays Helsinki 2024 - What is next now that your organization created a (si...
Apidays Helsinki 2024 - What is next now that your organization created a (si...Apidays Helsinki 2024 - What is next now that your organization created a (si...
Apidays Helsinki 2024 - What is next now that your organization created a (si...
apidays
 
Apidays Helsinki 2024 - There’s no AI without API, but what does this mean fo...
Apidays Helsinki 2024 - There’s no AI without API, but what does this mean fo...Apidays Helsinki 2024 - There’s no AI without API, but what does this mean fo...
Apidays Helsinki 2024 - There’s no AI without API, but what does this mean fo...
apidays
 
Apidays Helsinki 2024 - Security Vulnerabilities in your APIs by Lukáš Ďurovs...
Apidays Helsinki 2024 - Security Vulnerabilities in your APIs by Lukáš Ďurovs...Apidays Helsinki 2024 - Security Vulnerabilities in your APIs by Lukáš Ďurovs...
Apidays Helsinki 2024 - Security Vulnerabilities in your APIs by Lukáš Ďurovs...
apidays
 
Apidays Helsinki 2024 - Data, API’s and Banks, with AI on top by Sergio Giral...
Apidays Helsinki 2024 - Data, API’s and Banks, with AI on top by Sergio Giral...Apidays Helsinki 2024 - Data, API’s and Banks, with AI on top by Sergio Giral...
Apidays Helsinki 2024 - Data, API’s and Banks, with AI on top by Sergio Giral...
apidays
 
Apidays Helsinki 2024 - Data Ecosystems Driving the Green Transition by Olli ...
Apidays Helsinki 2024 - Data Ecosystems Driving the Green Transition by Olli ...Apidays Helsinki 2024 - Data Ecosystems Driving the Green Transition by Olli ...
Apidays Helsinki 2024 - Data Ecosystems Driving the Green Transition by Olli ...
apidays
 
Apidays Helsinki 2024 - Bridging the Gap Between Backend and Frontend API Tes...
Apidays Helsinki 2024 - Bridging the Gap Between Backend and Frontend API Tes...Apidays Helsinki 2024 - Bridging the Gap Between Backend and Frontend API Tes...
Apidays Helsinki 2024 - Bridging the Gap Between Backend and Frontend API Tes...
apidays
 
Apidays Helsinki 2024 - API Compliance by Design by Marjukka Niinioja, Osaango
Apidays Helsinki 2024 - API Compliance by Design by Marjukka Niinioja, OsaangoApidays Helsinki 2024 - API Compliance by Design by Marjukka Niinioja, Osaango
Apidays Helsinki 2024 - API Compliance by Design by Marjukka Niinioja, Osaango
apidays
 
Apidays Helsinki 2024 - ABLOY goes API economy – Transformation story by Hann...
Apidays Helsinki 2024 - ABLOY goes API economy – Transformation story by Hann...Apidays Helsinki 2024 - ABLOY goes API economy – Transformation story by Hann...
Apidays Helsinki 2024 - ABLOY goes API economy – Transformation story by Hann...
apidays
 
Apidays New York 2024 - The subtle art of API rate limiting by Josh Twist, Zuplo
Apidays New York 2024 - The subtle art of API rate limiting by Josh Twist, ZuploApidays New York 2024 - The subtle art of API rate limiting by Josh Twist, Zuplo
Apidays New York 2024 - The subtle art of API rate limiting by Josh Twist, Zuplo
apidays
 
Apidays New York 2024 - Putting AI into API Security by Corey Ball, Moss Adams
Apidays New York 2024 - Putting AI into API Security by Corey Ball, Moss AdamsApidays New York 2024 - Putting AI into API Security by Corey Ball, Moss Adams
Apidays New York 2024 - Putting AI into API Security by Corey Ball, Moss Adams
apidays
 
Apidays New York 2024 - Prototype-first - A modern API development workflow b...
Apidays New York 2024 - Prototype-first - A modern API development workflow b...Apidays New York 2024 - Prototype-first - A modern API development workflow b...
Apidays New York 2024 - Prototype-first - A modern API development workflow b...
apidays
 
Apidays New York 2024 - Post-Quantum API Security by Francois Lascelles, Broa...
Apidays New York 2024 - Post-Quantum API Security by Francois Lascelles, Broa...Apidays New York 2024 - Post-Quantum API Security by Francois Lascelles, Broa...
Apidays New York 2024 - Post-Quantum API Security by Francois Lascelles, Broa...
apidays
 
Apidays New York 2024 - Increase your productivity with no-code GraphQL mocki...
Apidays New York 2024 - Increase your productivity with no-code GraphQL mocki...Apidays New York 2024 - Increase your productivity with no-code GraphQL mocki...
Apidays New York 2024 - Increase your productivity with no-code GraphQL mocki...
apidays
 
Apidays New York 2024 - Driving API & EDA Success by Marcelo Caponi, Danone
Apidays New York 2024 - Driving API & EDA Success by Marcelo Caponi, DanoneApidays New York 2024 - Driving API & EDA Success by Marcelo Caponi, Danone
Apidays New York 2024 - Driving API & EDA Success by Marcelo Caponi, Danone
apidays
 
Apidays New York 2024 - Build a terrible API for people you hate by Jim Benne...
Apidays New York 2024 - Build a terrible API for people you hate by Jim Benne...Apidays New York 2024 - Build a terrible API for people you hate by Jim Benne...
Apidays New York 2024 - Build a terrible API for people you hate by Jim Benne...
apidays
 
Apidays New York 2024 - API Secret Tokens Exposed by Tristan Kalos and Antoin...
Apidays New York 2024 - API Secret Tokens Exposed by Tristan Kalos and Antoin...Apidays New York 2024 - API Secret Tokens Exposed by Tristan Kalos and Antoin...
Apidays New York 2024 - API Secret Tokens Exposed by Tristan Kalos and Antoin...
apidays
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
apidays
 

More from apidays (20)

Apidays Helsinki 2024 - Sustainable IT and API Performance - How to Bring The...
Apidays Helsinki 2024 - Sustainable IT and API Performance - How to Bring The...Apidays Helsinki 2024 - Sustainable IT and API Performance - How to Bring The...
Apidays Helsinki 2024 - Sustainable IT and API Performance - How to Bring The...
 
Apidays Helsinki 2024 - APIs ahoy, the case of Customer Booking APIs in Finn...
Apidays Helsinki 2024 -  APIs ahoy, the case of Customer Booking APIs in Finn...Apidays Helsinki 2024 -  APIs ahoy, the case of Customer Booking APIs in Finn...
Apidays Helsinki 2024 - APIs ahoy, the case of Customer Booking APIs in Finn...
 
Apidays Helsinki 2024 - From Chaos to Calm- Navigating Emerging API Security...
Apidays Helsinki 2024 -  From Chaos to Calm- Navigating Emerging API Security...Apidays Helsinki 2024 -  From Chaos to Calm- Navigating Emerging API Security...
Apidays Helsinki 2024 - From Chaos to Calm- Navigating Emerging API Security...
 
Apidays Helsinki 2024 - What is next now that your organization created a (si...
Apidays Helsinki 2024 - What is next now that your organization created a (si...Apidays Helsinki 2024 - What is next now that your organization created a (si...
Apidays Helsinki 2024 - What is next now that your organization created a (si...
 
Apidays Helsinki 2024 - There’s no AI without API, but what does this mean fo...
Apidays Helsinki 2024 - There’s no AI without API, but what does this mean fo...Apidays Helsinki 2024 - There’s no AI without API, but what does this mean fo...
Apidays Helsinki 2024 - There’s no AI without API, but what does this mean fo...
 
Apidays Helsinki 2024 - Security Vulnerabilities in your APIs by Lukáš Ďurovs...
Apidays Helsinki 2024 - Security Vulnerabilities in your APIs by Lukáš Ďurovs...Apidays Helsinki 2024 - Security Vulnerabilities in your APIs by Lukáš Ďurovs...
Apidays Helsinki 2024 - Security Vulnerabilities in your APIs by Lukáš Ďurovs...
 
Apidays Helsinki 2024 - Data, API’s and Banks, with AI on top by Sergio Giral...
Apidays Helsinki 2024 - Data, API’s and Banks, with AI on top by Sergio Giral...Apidays Helsinki 2024 - Data, API’s and Banks, with AI on top by Sergio Giral...
Apidays Helsinki 2024 - Data, API’s and Banks, with AI on top by Sergio Giral...
 
Apidays Helsinki 2024 - Data Ecosystems Driving the Green Transition by Olli ...
Apidays Helsinki 2024 - Data Ecosystems Driving the Green Transition by Olli ...Apidays Helsinki 2024 - Data Ecosystems Driving the Green Transition by Olli ...
Apidays Helsinki 2024 - Data Ecosystems Driving the Green Transition by Olli ...
 
Apidays Helsinki 2024 - Bridging the Gap Between Backend and Frontend API Tes...
Apidays Helsinki 2024 - Bridging the Gap Between Backend and Frontend API Tes...Apidays Helsinki 2024 - Bridging the Gap Between Backend and Frontend API Tes...
Apidays Helsinki 2024 - Bridging the Gap Between Backend and Frontend API Tes...
 
Apidays Helsinki 2024 - API Compliance by Design by Marjukka Niinioja, Osaango
Apidays Helsinki 2024 - API Compliance by Design by Marjukka Niinioja, OsaangoApidays Helsinki 2024 - API Compliance by Design by Marjukka Niinioja, Osaango
Apidays Helsinki 2024 - API Compliance by Design by Marjukka Niinioja, Osaango
 
Apidays Helsinki 2024 - ABLOY goes API economy – Transformation story by Hann...
Apidays Helsinki 2024 - ABLOY goes API economy – Transformation story by Hann...Apidays Helsinki 2024 - ABLOY goes API economy – Transformation story by Hann...
Apidays Helsinki 2024 - ABLOY goes API economy – Transformation story by Hann...
 
Apidays New York 2024 - The subtle art of API rate limiting by Josh Twist, Zuplo
Apidays New York 2024 - The subtle art of API rate limiting by Josh Twist, ZuploApidays New York 2024 - The subtle art of API rate limiting by Josh Twist, Zuplo
Apidays New York 2024 - The subtle art of API rate limiting by Josh Twist, Zuplo
 
Apidays New York 2024 - Putting AI into API Security by Corey Ball, Moss Adams
Apidays New York 2024 - Putting AI into API Security by Corey Ball, Moss AdamsApidays New York 2024 - Putting AI into API Security by Corey Ball, Moss Adams
Apidays New York 2024 - Putting AI into API Security by Corey Ball, Moss Adams
 
Apidays New York 2024 - Prototype-first - A modern API development workflow b...
Apidays New York 2024 - Prototype-first - A modern API development workflow b...Apidays New York 2024 - Prototype-first - A modern API development workflow b...
Apidays New York 2024 - Prototype-first - A modern API development workflow b...
 
Apidays New York 2024 - Post-Quantum API Security by Francois Lascelles, Broa...
Apidays New York 2024 - Post-Quantum API Security by Francois Lascelles, Broa...Apidays New York 2024 - Post-Quantum API Security by Francois Lascelles, Broa...
Apidays New York 2024 - Post-Quantum API Security by Francois Lascelles, Broa...
 
Apidays New York 2024 - Increase your productivity with no-code GraphQL mocki...
Apidays New York 2024 - Increase your productivity with no-code GraphQL mocki...Apidays New York 2024 - Increase your productivity with no-code GraphQL mocki...
Apidays New York 2024 - Increase your productivity with no-code GraphQL mocki...
 
Apidays New York 2024 - Driving API & EDA Success by Marcelo Caponi, Danone
Apidays New York 2024 - Driving API & EDA Success by Marcelo Caponi, DanoneApidays New York 2024 - Driving API & EDA Success by Marcelo Caponi, Danone
Apidays New York 2024 - Driving API & EDA Success by Marcelo Caponi, Danone
 
Apidays New York 2024 - Build a terrible API for people you hate by Jim Benne...
Apidays New York 2024 - Build a terrible API for people you hate by Jim Benne...Apidays New York 2024 - Build a terrible API for people you hate by Jim Benne...
Apidays New York 2024 - Build a terrible API for people you hate by Jim Benne...
 
Apidays New York 2024 - API Secret Tokens Exposed by Tristan Kalos and Antoin...
Apidays New York 2024 - API Secret Tokens Exposed by Tristan Kalos and Antoin...Apidays New York 2024 - API Secret Tokens Exposed by Tristan Kalos and Antoin...
Apidays New York 2024 - API Secret Tokens Exposed by Tristan Kalos and Antoin...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 

Recently uploaded

Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Jeffrey Haguewood
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 

Recently uploaded (20)

Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 

Apidays New York 2024 - RESTful API Patterns and Practices by Mike Amundsen, API Strategist

  • 1. RESTful Web API Patterns and Practices Mike Amundsen @mamund
  • 2.
  • 3.
  • 4. "This guide shows you the rules, routines, commands, and protocols—the glue—that integrates individual microservices so they can function together in a safe, scalable, and reliable way." -- O'Reilly Media
  • 5. Overview ● Pattern Thinking ● Design ● Clients ● Services ● Data ● Workflow ● Summary
  • 7. Pattern Thinking A framework for understanding, designing, and constructing systems
  • 8. Pattern Thinking Inductive reasoning is any of various methods of reasoning in which broad generalizations or principles are derived from a body of observations.
  • 9. Pattern Thinking "Each pattern describes a problem which occurs over and over again, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice" -- Christopher Alexander
  • 10. Pattern Thinking Web-centric implementations rely on three key elements: messages, actions, and vocabularies.
  • 12. Design Patterns Design systems so that machines built by different people who have never met can successfully interact with each other.
  • 13. Design Patterns 3.1 Creating Interoperability with Registered Media Types 3.2 Ensuring Future Compatibility with Structured Media Types 3.3 Sharing Domain Specifics Via Published Vocabularies 3.4 Describing Problem Spaces with Semantic Profiles 3.5 Expressing Domain Actions at Run-time with Embedded Hypermedia 3.6 Designing Consistent Data Writes with Idempotent Actions 3.7 Enabling Interoperability with Inter-Service State Transfers 3.8 Design for Repeatable Actions 3.9 Design for Reversible Actions 3.10 Design for Extensible Messages 3.11 Design for Modifiable Interfaces
  • 14. Design Patterns 3.1 Creating Interoperability with Registered Media Types 3.2 Ensuring Future Compatibility with Structured Media Types 3.3 Sharing Domain Specifics Via Published Vocabularies 3.4 Describing Problem Spaces with Semantic Profiles 3.5 Expressing Domain Actions at Run-time with Embedded Hypermedia 3.6 Designing Consistent Data Writes with Idempotent Actions 3.7 Enabling Interoperability with Inter-Service State Transfers 3.8 Design for Repeatable Actions 3.9 Design for Reversible Actions 3.10 Design for Extensible Messages 3.11 Design for Modifiable Interfaces
  • 15. Design Patterns 3.1 Creating Interoperability with Registered Media Types 3.2 Ensuring Future Compatibility with Structured Media Types 3.3 Sharing Domain Specifics Via Published Vocabularies 3.4 Describing Problem Spaces with Semantic Profiles 3.5 Expressing Domain Actions at Run-time with Embedded Hypermedia 3.6 Designing Consistent Data Writes with Idempotent Actions 3.7 Enabling Interoperability with Inter-Service State Transfers 3.8 Design for Repeatable Actions 3.9 Design for Reversible Actions 3.10 Design for Extensible Messages 3.11 Design for Modifiable Interfaces
  • 16. Design Patterns 3.1 Creating Interoperability with Registered Media Types 3.2 Ensuring Future Compatibility with Structured Media Types 3.3 Sharing Domain Specifics Via Published Vocabularies 3.4 Describing Problem Spaces with Semantic Profiles 3.5 Expressing Domain Actions at Run-time with Embedded Hypermedia 3.6 Designing Consistent Data Writes with Idempotent Actions 3.7 Enabling Interoperability with Inter-Service State Transfers 3.8 Design for Repeatable Actions 3.9 Design for Reversible Actions 3.10 Design for Extensible Messages 3.11 Design for Modifiable Interfaces
  • 17. Design Patterns Describing Problem Spaces with Semantic Profiles
  • 18. Design Patterns Describing Problem Spaces with Semantic Profiles
  • 19. Design Patterns Describing Problem Spaces with Semantic Profiles
  • 22. Client Patterns Create API consumer apps that make few assertions about how they communicate (protocol, message model, and vocabulary) with servers and let the server supply the details (the what) at runtime.
  • 23. Client Patterns 4.1 Limiting the use of Hard-Coded URLs 4.2 Code Clients to be HTTP-Aware 4.3 Coding More Resilient Clients With Message-Centric Implementations 4.4 Coding Effective Clients to Understand Vocabulary Profiles 4.5 Negotiate for Profile Support at Runtime 4.6 Managing Representation Formats At Runtime 4.7 Using Schema Documents as a Source of Message Metadata 4.8 Every Important Element Within a Response Needs an Identifier 4.9 Relying on Hypermedia Controls In the Response 4.10 Supporting Links and Forms for Non-Hypermedia Services 4.11 Validating Data Properties At Runtime 4.12 Using Document Schemas to Validate Outgoing Messages 4.13 Using Document Queries to Validate Incoming Messages 4.14 Validating Incoming Data 4.15 Maintaining Your Own State 4.16 Having A Goal In Mind
  • 24. Client Patterns 4.1 Limiting the use of Hard-Coded URLs 4.2 Code Clients to be HTTP-Aware 4.3 Coding More Resilient Clients With Message-Centric Implementations 4.4 Coding Effective Clients to Understand Vocabulary Profiles 4.5 Negotiate for Profile Support at Runtime 4.6 Managing Representation Formats At Runtime 4.7 Using Schema Documents as a Source of Message Metadata 4.8 Every Important Element Within a Response Needs an Identifier 4.9 Relying on Hypermedia Controls In the Response 4.10 Supporting Links and Forms for Non-Hypermedia Services 4.11 Validating Data Properties At Runtime 4.12 Using Document Schemas to Validate Outgoing Messages 4.13 Using Document Queries to Validate Incoming Messages 4.14 Validating Incoming Data 4.15 Maintaining Your Own State 4.16 Having A Goal In Mind
  • 25. Client Patterns 4.1 Limiting the use of Hard-Coded URLs 4.2 Code Clients to be HTTP-Aware 4.3 Coding More Resilient Clients With Message-Centric Implementations 4.4 Coding Effective Clients to Understand Vocabulary Profiles 4.5 Negotiate for Profile Support at Runtime 4.6 Managing Representation Formats At Runtime 4.7 Using Schema Documents as a Source of Message Metadata 4.8 Every Important Element Within a Response Needs an Identifier 4.9 Relying on Hypermedia Controls In the Response 4.10 Supporting Links and Forms for Non-Hypermedia Services 4.11 Validating Data Properties At Runtime 4.12 Using Document Schemas to Validate Outgoing Messages 4.13 Using Document Queries to Validate Incoming Messages 4.14 Validating Incoming Data 4.15 Maintaining Your Own State 4.16 Having A Goal In Mind
  • 26. Client Patterns 4.1 Limiting the use of Hard-Coded URLs 4.2 Code Clients to be HTTP-Aware 4.3 Coding More Resilient Clients With Message-Centric Implementations 4.4 Coding Effective Clients to Understand Vocabulary Profiles 4.5 Negotiate for Profile Support at Runtime 4.6 Managing Representation Formats At Runtime 4.7 Using Schema Documents as a Source of Message Metadata 4.8 Every Important Element Within a Response Needs an Identifier 4.9 Relying on Hypermedia Controls In the Response 4.10 Supporting Links and Forms for Non-Hypermedia Services 4.11 Validating Data Properties At Runtime 4.12 Using Document Schemas to Validate Outgoing Messages 4.13 Using Document Queries to Validate Incoming Messages 4.14 Validating Incoming Data 4.15 Maintaining Your Own State 4.16 Having A Goal In Mind
  • 27. Client Patterns 4.1 Limiting the use of Hard-Coded URLs 4.2 Code Clients to be HTTP-Aware 4.3 Coding More Resilient Clients With Message-Centric Implementations 4.4 Coding Effective Clients to Understand Vocabulary Profiles 4.5 Negotiate for Profile Support at Runtime 4.6 Managing Representation Formats At Runtime 4.7 Using Schema Documents as a Source of Message Metadata 4.8 Every Important Element Within a Response Needs an Identifier 4.9 Relying on Hypermedia Controls In the Response 4.10 Supporting Links and Forms for Non-Hypermedia Services 4.11 Validating Data Properties At Runtime 4.12 Using Document Schemas to Validate Outgoing Messages 4.13 Using Document Queries to Validate Incoming Messages 4.14 Validating Incoming Data 4.15 Maintaining Your Own State 4.16 Having A Goal In Mind
  • 34. Service Patterns The API is the contract — the promise that needs to be kept.
  • 35. Service Patterns 5.1 Publishing at Least One Stable URL 5.2 Preventing Internal Model Leaks 5.3 Converting Internal Models to External Messages 5.4 Expressing Internal Functions as External Actions 5.5 Advertising Support for Client Preferences for Responses 5.6 Supporting HTTP Content Negotiation 5.7 Publishing Complete Vocabularies for Machine Clients 5.8 Supporting Shared Vocabularies in Standard Formats 5.9 Publishing Service Definition Documents 5.10 Publishing API Metadata 5.11 Supporting Service Health Monitoring 5.12 Standardizing Error Reporting 5.13 Improve Service Discoverability with a Runtime Service Registry 5.14 Increasing Throughput with Client-Supplied Identifiers 5.15 Improving Reliability with Idempotent Create 5.16 Providing Runtime Fallbacks for Dependent Services 5.17 Using Semantic Proxies to Access Non-Compliant Services
  • 36. Service Patterns 5.1 Publishing at Least One Stable URL 5.2 Preventing Internal Model Leaks 5.3 Converting Internal Models to External Messages 5.4 Expressing Internal Functions as External Actions 5.5 Advertising Support for Client Preferences for Responses 5.6 Supporting HTTP Content Negotiation 5.7 Publishing Complete Vocabularies for Machine Clients 5.8 Supporting Shared Vocabularies in Standard Formats 5.9 Publishing Service Definition Documents 5.10 Publishing API Metadata 5.11 Supporting Service Health Monitoring 5.12 Standardizing Error Reporting 5.13 Improve Service Discoverability with a Runtime Service Registry 5.14 Increasing Throughput with Client-Supplied Identifiers 5.15 Improving Reliability with Idempotent Create 5.16 Providing Runtime Fallbacks for Dependent Services 5.17 Using Semantic Proxies to Access Non-Compliant Services
  • 37. Service Patterns 5.1 Publishing at Least One Stable URL 5.2 Preventing Internal Model Leaks 5.3 Converting Internal Models to External Messages 5.4 Expressing Internal Functions as External Actions 5.5 Advertising Support for Client Preferences for Responses 5.6 Supporting HTTP Content Negotiation 5.7 Publishing Complete Vocabularies for Machine Clients 5.8 Supporting Shared Vocabularies in Standard Formats 5.9 Publishing Service Definition Documents 5.10 Publishing API Metadata 5.11 Supporting Service Health Monitoring 5.12 Standardizing Error Reporting 5.13 Improve Service Discoverability with a Runtime Service Registry 5.14 Increasing Throughput with Client-Supplied Identifiers 5.15 Improving Reliability with Idempotent Create 5.16 Providing Runtime Fallbacks for Dependent Services 5.17 Using Semantic Proxies to Access Non-Compliant Services
  • 38. Service Patterns 5.1 Publishing at Least One Stable URL 5.2 Preventing Internal Model Leaks 5.3 Converting Internal Models to External Messages 5.4 Expressing Internal Functions as External Actions 5.5 Advertising Support for Client Preferences for Responses 5.6 Supporting HTTP Content Negotiation 5.7 Publishing Complete Vocabularies for Machine Clients 5.8 Supporting Shared Vocabularies in Standard Formats 5.9 Publishing Service Definition Documents 5.10 Publishing API Metadata 5.11 Supporting Service Health Monitoring 5.12 Standardizing Error Reporting 5.13 Improve Service Discoverability with a Runtime Service Registry 5.14 Increasing Throughput with Client-Supplied Identifiers 5.15 Improving Reliability with Idempotent Create 5.16 Providing Runtime Fallbacks for Dependent Services 5.17 Using Semantic Proxies to Access Non-Compliant Services
  • 39. Improve Service Discoverability with a Runtime Service Registry Service Patterns
  • 40. Service Patterns Improve Service Discoverability with a Runtime Service Registry
  • 42. Data
  • 43. Data Patterns "Your data model is not your object model is not your resource model is not your representation model." -- Amundsen's Maxim
  • 44. Data Patterns 6.1 Hiding Your Data Storage Internals 6.2 Making All Changes Idempotent 6.3 Hide Data Relationships for External Actions 6.4 Leveraging HTTP URLs to Support “Contains” and “And” Queries 6.5 Returning Metadata for Query Responses 6.6 Returning HTTP 200 vs. HTTP 400 for Data-Centric Queries 6.7 Using Media Types for Data Queries 6.8 Ignore Unknown Data Fields 6.9 Improving Performance with Caching Directives 6.10 Modifying Data Models In Production 6.11 Extending Remote Data Stores 6.12 Limiting Large Scale Responses 6.13 Using Pass-Through Proxies for Data Exchange
  • 45. Data Patterns 6.1 Hiding Your Data Storage Internals 6.2 Making All Changes Idempotent 6.3 Hide Data Relationships for External Actions 6.4 Leveraging HTTP URLs to Support “Contains” and “And” Queries 6.5 Returning Metadata for Query Responses 6.6 Returning HTTP 200 vs. HTTP 400 for Data-Centric Queries 6.7 Using Media Types for Data Queries 6.8 Ignore Unknown Data Fields 6.9 Improving Performance with Caching Directives 6.10 Modifying Data Models In Production 6.11 Extending Remote Data Stores 6.12 Limiting Large Scale Responses 6.13 Using Pass-Through Proxies for Data Exchange
  • 46. Data Patterns 6.1 Hiding Your Data Storage Internals 6.2 Making All Changes Idempotent 6.3 Hide Data Relationships for External Actions 6.4 Leveraging HTTP URLs to Support “Contains” and “And” Queries 6.5 Returning Metadata for Query Responses 6.6 Returning HTTP 200 vs. HTTP 400 for Data-Centric Queries 6.7 Using Media Types for Data Queries 6.8 Ignore Unknown Data Fields 6.9 Improving Performance with Caching Directives 6.10 Modifying Data Models In Production 6.11 Extending Remote Data Stores 6.12 Limiting Large Scale Responses 6.13 Using Pass-Through Proxies for Data Exchange
  • 47. Data Patterns 6.1 Hiding Your Data Storage Internals 6.2 Making All Changes Idempotent 6.3 Hide Data Relationships for External Actions 6.4 Leveraging HTTP URLs to Support “Contains” and “And” Queries 6.5 Returning Metadata for Query Responses 6.6 Returning HTTP 200 vs. HTTP 400 for Data-Centric Queries 6.7 Using Media Types for Data Queries 6.8 Ignore Unknown Data Fields 6.9 Improving Performance with Caching Directives 6.10 Modifying Data Models In Production 6.11 Extending Remote Data Stores 6.12 Limiting Large Scale Responses 6.13 Using Pass-Through Proxies for Data Exchange
  • 48. Data Patterns Modifying Data Models in Production
  • 49. Data Patterns Modifying Data Models in Production
  • 50. Data Patterns Modifying Data Models in Production
  • 53. Workflow Patterns Each service that is enlisted in a workflow should be a composable service.
  • 54. Workflow Patterns 7.1 Designing Workflow-Compliant Services 7.2 Supporting Shared State for Workflows 7.3 Describing Workflow as Code 7.4 Describing Workflow as DSL 7.5 Describing Workflow as Documents 7.6 Supporting RESTful Job Control Language 7.7 Exposing a Progress Resource for Your Workflows 7.8 Returning All Related Actions 7.9 Returning Most-Recently Used Resources (MRUs) 7.10 Supporting Stateful Work-In-Progress 7.11 Enabling Standard List Navigation 7.12 Supporting Partial Form Submit 7.13 Using State-Watch to Enable Client-Driven Workflow 7.14 Optimizing Queries With Stored Replays 7.15 Synchronous Reply for Incomplete Work with 202 Accepted 7.16 Short-Term Fixes with Automatic Retries 7.17 Supporting Local Undo/Rollback 7.18 Calling for Help 7.19 Scaling Workflow with Queues and Clusters 7.20 Using Workflow Proxies to Enlist Non-Compliant Services
  • 55. 7.1 Designing Workflow-Compliant Services 7.2 Supporting Shared State for Workflows 7.3 Describing Workflow as Code 7.4 Describing Workflow as DSL 7.5 Describing Workflow as Documents 7.6 Supporting RESTful Job Control Language 7.7 Exposing a Progress Resource for Your Workflows 7.8 Returning All Related Actions 7.9 Returning Most-Recently Used Resources (MRUs) 7.10 Supporting Stateful Work-In-Progress 7.11 Enabling Standard List Navigation 7.12 Supporting Partial Form Submit 7.13 Using State-Watch to Enable Client-Driven Workflow 7.14 Optimizing Queries With Stored Replays 7.15 Synchronous Reply for Incomplete Work with 202 Accepted 7.16 Short-Term Fixes with Automatic Retries 7.17 Supporting Local Undo/Rollback 7.18 Calling for Help 7.19 Scaling Workflow with Queues and Clusters 7.20 Using Workflow Proxies to Enlist Non-Compliant Services Workflow Patterns
  • 56. Workflow Patterns 7.1 Designing Workflow-Compliant Services 7.2 Supporting Shared State for Workflows 7.3 Describing Workflow as Code 7.4 Describing Workflow as DSL 7.5 Describing Workflow as Documents 7.6 Supporting RESTful Job Control Language 7.7 Exposing a Progress Resource for Your Workflows 7.8 Returning All Related Actions 7.9 Returning Most-Recently Used Resources (MRUs) 7.10 Supporting Stateful Work-In-Progress 7.11 Enabling Standard List Navigation 7.12 Supporting Partial Form Submit 7.13 Using State-Watch to Enable Client-Driven Workflow 7.14 Optimizing Queries With Stored Replays 7.15 Synchronous Reply for Incomplete Work with 202 Accepted 7.16 Short-Term Fixes with Automatic Retries 7.17 Supporting Local Undo/Rollback 7.18 Calling for Help 7.19 Scaling Workflow with Queues and Clusters 7.20 Using Workflow Proxies to Enlist Non-Compliant Services
  • 57. Workflow Patterns 7.1 Designing Workflow-Compliant Services 7.2 Supporting Shared State for Workflows 7.3 Describing Workflow as Code 7.4 Describing Workflow as DSL 7.5 Describing Workflow as Documents 7.6 Supporting RESTful Job Control Language 7.7 Exposing a Progress Resource for Your Workflows 7.8 Returning All Related Actions 7.9 Returning Most-Recently Used Resources (MRUs) 7.10 Supporting Stateful Work-In-Progress 7.11 Enabling Standard List Navigation 7.12 Supporting Partial Form Submit 7.13 Using State-Watch to Enable Client-Driven Workflow 7.14 Optimizing Queries With Stored Replays 7.15 Synchronous Reply for Incomplete Work with 202 Accepted 7.16 Short-Term Fixes with Automatic Retries 7.17 Supporting Local Undo/Rollback 7.18 Calling for Help 7.19 Scaling Workflow with Queues and Clusters 7.20 Using Workflow Proxies to Enlist Non-Compliant Services
  • 58. Workflow Patterns RESTful Job Control Language
  • 59. Workflow Patterns RESTful Job Control Language
  • 60. Workflow Patterns RESTful Job Control Language
  • 61. Workflow Patterns RESTful Job Control Language
  • 62. Workflow Patterns RESTful Job Control Language
  • 63. Workflow Patterns RESTful Job Control Language
  • 66. Goals ● Make designs composable ● Make clients adaptable ● Make services modifiable ● Make data portable ● Make workflow flexible
  • 67. Goals ● Make designs composable ● Make clients adaptable ● Make services modifiable ● Make data portable ● Make workflow flexible
  • 68. Goals ● Make designs composable ● Make clients adaptable ● Make services modifiable ● Make data portable ● Make workflow flexible
  • 69. Goals ● Make designs composable ● Make clients adaptable ● Make services modifiable ● Make data portable ● Make workflow flexible
  • 70. Goals ● Make designs composable ● Make clients adaptable ● Make services modifiable ● Make data portable ● Make workflow flexible
  • 71. Goals ● Make designs composable ● Make clients adaptable ● Make services modifiable ● Make data portable ● Make workflow flexible
  • 72. The RESTful Web API Principle "Leverage global reach to solve problems you haven’t thought of for people you have never met."
  • 73. The RESTful Web API Principle "Leverage global reach to solve problems you haven’t thought of for people you have never met."
  • 74. The RESTful Web API Principle "Leverage global reach to solve problems you haven’t thought of for people you have never met."
  • 75. The RESTful Web API Principle "Leverage global reach to solve problems you haven’t thought of for people you have never met."
  • 76. The RESTful Web API Principle "Leverage global reach to solve problems you haven’t thought of for people you have never met."
  • 77. The RESTful Web API Principle "Leverage global reach to solve problems you haven’t thought of for people you have never met."
  • 78. Pattern Thinking -- and Models "Everything we think we know about the world is a model." -- Donella Meadows, 2008
  • 79. Pattern Thinking "The difference between the novice and the teacher is simply that the novice has not learnt, yet, how to do things in such a way that they can afford to make small mistakes." -- Christopher Alexander
  • 80. Pattern Thinking "The difference between the novice and the teacher is simply that the novice has not learnt, yet, how to do things in such a way that they can afford to make small mistakes." -- Christopher Alexander
  • 81. RESTful Web API Patterns and Practices Mike Amundsen @mamund
  • 82. RESTful Web API Patterns and Practices Mike Amundsen @mamund