SlideShare a Scribd company logo
1 of 59
GET /presentation HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"what": "The REST And Then Some",
"where": "Nordic APIs 2016 Platform Summit",
"when": "2016-10-25T14:40+02:00"
}
Asbjørn Ulsberg
Business Architect
Web, API, Interfaces
1941
The Garden of Forking Paths
Jorge Luis Borges
“Hypertext”
“Hypermedia”
1963
1968
“The Mother Of All Demos”
oN-Line System
1987
1989
“WorldWideWeb”
2000
Architectural Styles and the Design of
Network-based Software Architectures
By
“Representational State Transfer”“REST”
Roy Thomas Fielding
Defining REST
POST Does ”something” with the resource
GET Retrieves the resource
PUT Replaces or creates the resource.
PATCH Given right state in client, apply a diff operation
DELETE Delete the resource
…
Defining REST: CRUD
Defining REST: URIs
http://api.com/harddrives/format?drive=c
http://api.com/orders/getOrderById?id=13
http://api.com/orders/13/edit-form
http://api.com/orders/13
http://api.com/731bef1e-8ffa-11e6-96e8
Defining REST: URIs
URI Method Description
http://api.com/v1/customers POST Creates a new customer
http://api.com/v1/customers/{id} GET Retrieves customer
http://api.com/v1/customers/{id} PUT Updates customer
http://api.com/v1/customers/{id} DELETE Deletes customer
http://api.com/v1/customers/{id}/orders GET Retrieves customer’s orders
http://api.com/v1/customers/{id}/notes GET Retrieves customer’s notes
Defining REST: URIs
Defining REST: URIs
Defining REST: URIs
URI Method Description
http://api.com/v1/customers POST Creates a new customer
http://api.com/v1/customers/{id} GET Retrieves customer
http://api.com/v1/customers/{id} PUT Updates customer
http://api.com/v1/customers/{id} DELETE Deletes customer
http://api.com/v1/customers/{id}/orders GET Retrieves customer’s orders
http://api.com/v1/customers/{id}/notes GET Retrieves customer’s notes
Defining REST: URIs
URI Method Description
http://api.com/v1/customers POST Creates a new customer
http://api.com/v1/customers/{id} GET Retrieves customer
http://api.com/v1/customers/{id} PUT Updates customer
http://api.com/v1/customers/{id} DELETE Deletes customer
http://orders.com/orders-for-customer/{id} GET Retrieves customer’s orders
http://api.com/v1/customers/{id}/notes GET Retrieves customer’s notes
Defining REST: URIs
URI Method Description
http://api.com/v1/customers POST Creates a new customer
http://api.com/v1/customers/{id} GET Retrieves customer
http://api.com/v1/customers/{id} PUT Updates customer
http://api.com/v1/customers/{id} DELETE Deletes customer
http://orders.com/orders-for-customer/{id} GET Retrieves customer’s orders
http://api.com/v2/customers/{id}/notes GET Retrieves customer’s notes
Defining REST: URIs
URI Method Description
http://api.com/v2/customers POST Creates a new customer
http://api.com/v2/customers/{id} GET Retrieves customer
http://api.com/v2/customers/{id} PUT Updates customer
http://api.com/v2/customers/{id} DELETE Deletes customer
http://orders.com/orders-for-customer/{id} GET Retrieves customer’s orders
http://api.com/v2/customers/{id}/notes GET Retrieves customer’s notes
What is the best practice for
versioning a REST API?
REST
I feel warmer and more relaxed
in Spanish
German makes me reason
more carefully
REST: Constraints
1. Client-Server
2. Stateless
3. Cacheable
4. Layered
5. Code on demand (optional)
6. Uniform Interface
1. Identification of resources
2. Manipulation of resources
3. Self-descriptive messages
4. Hypermedia as the engine of application state (HATEOAS)
REST: Constraints
1. Client-Server
2. Stateless
3. Cacheable
4. Layered
5. Code on demand (optional)
6. Uniform Interface
1. Identification of resources
2. Manipulation of resources
3. Self-descriptive messages
4. Hypermedia as the engine of application state (HATEOAS)
Hypermedia as the engine of
application state is a REST constraint.
Not an option. Not an ideal.
Hypermedia is a constraint. As in,
you either do it or you aren’t doing
REST.
Hypermedia
Hypermedia: Affordances
Hypermedia: Affordances
Do people know what to do based on
what they see?
Hypermedia: Affordances
Do machines know what to do based on
what they see?
Hypermedia
<a href="/toaster">Toaster</a>
<img src="toaster.jpeg" alt="Toaster">
<video src="toaster.mp4">Toaster</video>
<form action="/toaster" method="post" rel="on">
<button type="submit"
name="state"
value="on">Turn on</button>
</form>
Hypermedia
<a href="/toaster">Toaster</a>
<img src="toaster.jpeg" alt="Toaster">
<video src="toaster.mp4">Toaster</video>
<form action="/toaster" method="post" rel="on">
<button type="submit"
name="state"
value="on">Turn on</button>
</form>
<a href="/toaster">Toaster</a>
<img href="toaster.jpeg" alt="Toaster">
<video href="toaster.mp4">Toaster</video>
<form href="/toaster" method="post" rel="on">
<button type="submit"
name="state"
value="on">Turn on</button>
</form>
<id href="/toaster" title="Toaster">
<image href="toaster.jpeg" title="Toaster">
<video href="toaster.mp4" title="Toaster">
<operation href="/toaster" method="put" rel="on">
<expects name="state" value="on" />
</operation>
{ "id": "/toaster", "title": "Toaster" }
{ "image": "toaster.jpeg", "title": "Toaster" }
{ "video": "toaster.mp4", "title": "Toaster" }
{ "operation": "/toaster", "method": "PUT", "rel": "on",
"expects": { "state": "on" }
}
{ "id": "/toaster", "title": "Toaster" }
{ "image": "toaster.jpeg", "title": "Toaster" },
{ "video": "toaster.mp4", "title": "Toaster" }
"operation": {
"rel": "on",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "on" }
}
{
"id": "/toaster",
"links": [
{ "image": "toaster.jpeg", "title": "Toaster" },
{ "video": "toaster.mp4", "title": "Toaster" }
],
"operations": [{
"rel": "on",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "on" }
}]
}
Hypermedia: State Machine
OnOff Shutting down
Shut Down
Off
Shut Down
Upper Limit Lower Limit
Heating
Idle
Do/Turn Off
Heater
Turn On
Off
GET /toaster HTTP/1.1
Off
HTTP/1.1 200 OK
{
"id": "/toaster",
"state": "off",
"operations": [{
"rel": "on",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "on" }
}]
}
Off
HTTP/1.1 200 OK
{
"id": "/toaster",
"state": "off",
"operations": [{
"rel": "on",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "on" }
}]
}
Off
PUT
/toaster
{ "state": "on" }
Off
PUT
/toaster
{ "state": "on" }
Off
PUT
/toaster
{
"state": "on"
}
Off
Turn On
On
PUT /toaster HTTP/1.1
{
"state": "on"
}
HTTP/1.1 200 OK
{
"id": "/toaster",
"state": "on",
"strength": 0,
"operations": [{
"rel": "off",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "off" }
}, {
"rel": "strength",
"method": "PUT",
"href": "/fcef93ba988011e6833f",
"expects": {
"strength": [1, 2, 3, 4, 5, 6]
}
}]
}
On
PUT
/fcef93ba988011e6833f
{
"strength": [1, 2, 3, 4, 5, 6]
}
On
PUT /fcef93ba988011e6833f
{
"strength": [1, 2, 3, 4, 5, 6]
}
On Heating
HTTP/1.1 200 OK
{
"id": "/toaster",
"state": "heating",
"strength": 3,
"operations": [{
"rel": "off",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "off" }
}, {
"rel": "strength",
"method": "PUT",
"href": "/fcef93ba988011e6833f",
"expects": {
"strength": [1, 2, 3, 4, 5, 6]
}
}]
}
PUT /fcef93ba988011e6833f HTTP/1.1
{
"strength": 3
}
Heating
/toaster
Upper Limit
Idle
Do/Turn Off
Heater
Heating
HTTP/1.1 200 OK
{
"id": "/toaster",
"state": "idle",
"operations": [{
"rel": "off",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "off" }
}, {
"rel": "strength",
"method": "PUT",
"href": "/fcef93ba988011e6833f",
"expects": {
"strength": [1, 2, 3, 4, 5, 6]
}
}]
}
GET /toaster HTTP/1.1
Shut Down
Shutting down
Idle
Do/Turn Off
Heater
GET /toaster HTTP/1.1HTTP/1.1 200 OK
{
"id": "/toaster",
"state": "shutting-down",
"operations": []
}
Shutting down
GET /toaster HTTP/1.1
Off
HTTP/1.1 200 OK
{
"id": "/toaster",
"state": "off",
"operations": [{
"rel": "on",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "on" }
}]
}
{
"id": "/toaster",
"state": "off",
"slot": "/toaster/slot",
"operations": [{
"rel": "on",
"method": "PUT",
"href": "/toaster",
"expects": { "state": "on" }
}]
}
Questions?
Thank You!
- @asbjornu
- asbjorn.ulsberg@payex.com
- slack.httpapis.com
Asbjørn Ulsberg

More Related Content

What's hot

REST API Best Practices & Implementing in Codeigniter
REST API Best Practices & Implementing in CodeigniterREST API Best Practices & Implementing in Codeigniter
REST API Best Practices & Implementing in CodeigniterSachin G Kulkarni
 
Exposing Salesforce REST Services Using Swagger
Exposing Salesforce REST Services Using SwaggerExposing Salesforce REST Services Using Swagger
Exposing Salesforce REST Services Using SwaggerSalesforce Developers
 
RESTful API Design Fundamentals
RESTful API Design FundamentalsRESTful API Design Fundamentals
RESTful API Design FundamentalsHüseyin BABAL
 
Designing and Running a GraphQL API
Designing and Running a GraphQL APIDesigning and Running a GraphQL API
Designing and Running a GraphQL APIAtlassian
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRaymond Camden
 
Getting Started With Angular
Getting Started With AngularGetting Started With Angular
Getting Started With AngularStormpath
 
HATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleHATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleApigee | Google Cloud
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsJim Jeffers
 
Single page apps_with_cf_and_angular[1]
Single page apps_with_cf_and_angular[1]Single page apps_with_cf_and_angular[1]
Single page apps_with_cf_and_angular[1]ColdFusionConference
 
Picking the Right Node.js Framework for Your Use Case
Picking the Right Node.js Framework for Your Use CasePicking the Right Node.js Framework for Your Use Case
Picking the Right Node.js Framework for Your Use CaseJimmy Guerrero
 
StrongLoop Node.js API Security & Customization
StrongLoop Node.js API Security & CustomizationStrongLoop Node.js API Security & Customization
StrongLoop Node.js API Security & Customizationjguerrero999
 
Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Diego Zuluaga
 
The web - What it has, what it lacks and where it must go - Istanbul
The web - What it has, what it lacks and where it must go - IstanbulThe web - What it has, what it lacks and where it must go - Istanbul
The web - What it has, what it lacks and where it must go - IstanbulRobert Nyman
 
Mobile APIs: Optimizing APIs for Many Devices
Mobile APIs: Optimizing APIs for Many DevicesMobile APIs: Optimizing APIs for Many Devices
Mobile APIs: Optimizing APIs for Many DevicesApigee | Google Cloud
 
REST API and CRUD
REST API and CRUDREST API and CRUD
REST API and CRUDPrem Sanil
 
Working with LoopBack Models
Working with LoopBack ModelsWorking with LoopBack Models
Working with LoopBack ModelsRaymond Feng
 
The Internet as Web Services: introduction to ReST
The Internet as Web Services: introduction to ReSTThe Internet as Web Services: introduction to ReST
The Internet as Web Services: introduction to ReSTBruno Kessler Foundation
 

What's hot (20)

REST API Best Practices & Implementing in Codeigniter
REST API Best Practices & Implementing in CodeigniterREST API Best Practices & Implementing in Codeigniter
REST API Best Practices & Implementing in Codeigniter
 
Exposing Salesforce REST Services Using Swagger
Exposing Salesforce REST Services Using SwaggerExposing Salesforce REST Services Using Swagger
Exposing Salesforce REST Services Using Swagger
 
RESTful API - Best Practices
RESTful API - Best PracticesRESTful API - Best Practices
RESTful API - Best Practices
 
RESTful API Design Fundamentals
RESTful API Design FundamentalsRESTful API Design Fundamentals
RESTful API Design Fundamentals
 
Designing and Running a GraphQL API
Designing and Running a GraphQL APIDesigning and Running a GraphQL API
Designing and Running a GraphQL API
 
API for Beginners
API for BeginnersAPI for Beginners
API for Beginners
 
An Introduction To REST API
An Introduction To REST APIAn Introduction To REST API
An Introduction To REST API
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoop
 
Getting Started With Angular
Getting Started With AngularGetting Started With Angular
Getting Started With Angular
 
HATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleHATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API Style
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
 
Single page apps_with_cf_and_angular[1]
Single page apps_with_cf_and_angular[1]Single page apps_with_cf_and_angular[1]
Single page apps_with_cf_and_angular[1]
 
Picking the Right Node.js Framework for Your Use Case
Picking the Right Node.js Framework for Your Use CasePicking the Right Node.js Framework for Your Use Case
Picking the Right Node.js Framework for Your Use Case
 
StrongLoop Node.js API Security & Customization
StrongLoop Node.js API Security & CustomizationStrongLoop Node.js API Security & Customization
StrongLoop Node.js API Security & Customization
 
Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0
 
The web - What it has, what it lacks and where it must go - Istanbul
The web - What it has, what it lacks and where it must go - IstanbulThe web - What it has, what it lacks and where it must go - Istanbul
The web - What it has, what it lacks and where it must go - Istanbul
 
Mobile APIs: Optimizing APIs for Many Devices
Mobile APIs: Optimizing APIs for Many DevicesMobile APIs: Optimizing APIs for Many Devices
Mobile APIs: Optimizing APIs for Many Devices
 
REST API and CRUD
REST API and CRUDREST API and CRUD
REST API and CRUD
 
Working with LoopBack Models
Working with LoopBack ModelsWorking with LoopBack Models
Working with LoopBack Models
 
The Internet as Web Services: introduction to ReST
The Internet as Web Services: introduction to ReSTThe Internet as Web Services: introduction to ReST
The Internet as Web Services: introduction to ReST
 

Viewers also liked

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
 
Don't roll your own HTTP server
Don't roll your own HTTP serverDon't roll your own HTTP server
Don't roll your own HTTP serverNordic APIs
 
Criticality of identity
Criticality of identityCriticality of identity
Criticality of identityNordic APIs
 
Corso sicurezza SCUOLA FREUD
Corso sicurezza SCUOLA FREUD Corso sicurezza SCUOLA FREUD
Corso sicurezza SCUOLA FREUD DANIELE NAPPO
 
Venezuela India Trade & Investment Promotion Group
Venezuela India Trade & Investment Promotion GroupVenezuela India Trade & Investment Promotion Group
Venezuela India Trade & Investment Promotion GroupIndia Advisors
 
RealDolmen introduction ICT students Thomas More 2013
RealDolmen introduction ICT students Thomas More 2013RealDolmen introduction ICT students Thomas More 2013
RealDolmen introduction ICT students Thomas More 2013Wonne Keysers
 
E governance initiatives in india
E governance initiatives in indiaE governance initiatives in india
E governance initiatives in indiaAfnan Hanif
 
Employee engagement: Consequences and Antecedents
Employee engagement: Consequences and AntecedentsEmployee engagement: Consequences and Antecedents
Employee engagement: Consequences and AntecedentsYandi Satya Situngkir
 
Урок 11 для 9 класу - Пошук інформації на комп’ютері. Використання автономної...
Урок 11 для 9 класу - Пошук інформації на комп’ютері. Використання автономної...Урок 11 для 9 класу - Пошук інформації на комп’ютері. Використання автономної...
Урок 11 для 9 класу - Пошук інформації на комп’ютері. Використання автономної...VsimPPT
 
School star for jesus presentazione
School star for jesus presentazioneSchool star for jesus presentazione
School star for jesus presentazioneMassimiliano F. Feo
 
An Overview of Global Fund for Women’s AmplifyChange Initiative
An Overview of Global Fund for Women’s AmplifyChange InitiativeAn Overview of Global Fund for Women’s AmplifyChange Initiative
An Overview of Global Fund for Women’s AmplifyChange InitiativeKathy Levinson
 
8 шокуючих фактів про вироби з хутра
8 шокуючих фактів про вироби з хутра8 шокуючих фактів про вироби з хутра
8 шокуючих фактів про вироби з хутраКатерина Білоконь
 
Les Organisations Agile : embarquer le sens
Les Organisations Agile : embarquer le sensLes Organisations Agile : embarquer le sens
Les Organisations Agile : embarquer le sensOana Juncu
 

Viewers also liked (20)

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)
 
Don't roll your own HTTP server
Don't roll your own HTTP serverDon't roll your own HTTP server
Don't roll your own HTTP server
 
Criticality of identity
Criticality of identityCriticality of identity
Criticality of identity
 
Ser padres-coca cola
Ser padres-coca colaSer padres-coca cola
Ser padres-coca cola
 
My Documents for NG SA
My Documents for NG SAMy Documents for NG SA
My Documents for NG SA
 
Corso sicurezza SCUOLA FREUD
Corso sicurezza SCUOLA FREUD Corso sicurezza SCUOLA FREUD
Corso sicurezza SCUOLA FREUD
 
Venezuela India Trade & Investment Promotion Group
Venezuela India Trade & Investment Promotion GroupVenezuela India Trade & Investment Promotion Group
Venezuela India Trade & Investment Promotion Group
 
RealDolmen introduction ICT students Thomas More 2013
RealDolmen introduction ICT students Thomas More 2013RealDolmen introduction ICT students Thomas More 2013
RealDolmen introduction ICT students Thomas More 2013
 
Triz
Triz Triz
Triz
 
E governance initiatives in india
E governance initiatives in indiaE governance initiatives in india
E governance initiatives in india
 
Pelatihan Manajemen Mutu ISO 9001 Versi 2008
Pelatihan Manajemen Mutu ISO 9001 Versi 2008Pelatihan Manajemen Mutu ISO 9001 Versi 2008
Pelatihan Manajemen Mutu ISO 9001 Versi 2008
 
Employee engagement: Consequences and Antecedents
Employee engagement: Consequences and AntecedentsEmployee engagement: Consequences and Antecedents
Employee engagement: Consequences and Antecedents
 
Power Point Pelibatan Pemberdayaan Karyawan
Power Point Pelibatan Pemberdayaan KaryawanPower Point Pelibatan Pemberdayaan Karyawan
Power Point Pelibatan Pemberdayaan Karyawan
 
Урок 11 для 9 класу - Пошук інформації на комп’ютері. Використання автономної...
Урок 11 для 9 класу - Пошук інформації на комп’ютері. Використання автономної...Урок 11 для 9 класу - Пошук інформації на комп’ютері. Використання автономної...
Урок 11 для 9 класу - Пошук інформації на комп’ютері. Використання автономної...
 
Pelatihan Finance for Non-Finance Manager
Pelatihan Finance for Non-Finance ManagerPelatihan Finance for Non-Finance Manager
Pelatihan Finance for Non-Finance Manager
 
TRAINING OF TRAINERS (TOT)
TRAINING OF TRAINERS (TOT)TRAINING OF TRAINERS (TOT)
TRAINING OF TRAINERS (TOT)
 
School star for jesus presentazione
School star for jesus presentazioneSchool star for jesus presentazione
School star for jesus presentazione
 
An Overview of Global Fund for Women’s AmplifyChange Initiative
An Overview of Global Fund for Women’s AmplifyChange InitiativeAn Overview of Global Fund for Women’s AmplifyChange Initiative
An Overview of Global Fund for Women’s AmplifyChange Initiative
 
8 шокуючих фактів про вироби з хутра
8 шокуючих фактів про вироби з хутра8 шокуючих фактів про вироби з хутра
8 шокуючих фактів про вироби з хутра
 
Les Organisations Agile : embarquer le sens
Les Organisations Agile : embarquer le sensLes Organisations Agile : embarquer le sens
Les Organisations Agile : embarquer le sens
 

Similar to The REST And Then Some

REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011Alessandro Nadalin
 
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
 Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data... Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...Big Data Spain
 
Python tools for testing web services over HTTP
Python tools for testing web services over HTTPPython tools for testing web services over HTTP
Python tools for testing web services over HTTPMykhailo Kolesnyk
 
REST and Resource Oriented Architecture - okcDG March 2008
REST and Resource Oriented Architecture - okcDG March 2008REST and Resource Oriented Architecture - okcDG March 2008
REST and Resource Oriented Architecture - okcDG March 2008Ryan Hoegg
 
Api Design and More (Friday Training at Itnig)
Api Design and More (Friday Training at Itnig)Api Design and More (Friday Training at Itnig)
Api Design and More (Friday Training at Itnig)itnig
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPressTaylor Lovett
 
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...chbornet
 
Jordi Romero Api for-the-mobile-era
Jordi Romero Api for-the-mobile-eraJordi Romero Api for-the-mobile-era
Jordi Romero Api for-the-mobile-era.toster
 
Service approach for development Rest API in Symfony2
Service approach for development Rest API in Symfony2Service approach for development Rest API in Symfony2
Service approach for development Rest API in Symfony2Sumy PHP User Grpoup
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPressTaylor Lovett
 
Together Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with HypermediaTogether Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with HypermediaVladimir Tsukur
 
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIsThe liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIsJorge Ferrer
 
Progressive web apps
Progressive web appsProgressive web apps
Progressive web appsFastly
 
POX to HATEOAS: Our Company's Journey Building a Hypermedia API
POX to HATEOAS: Our Company's Journey Building a Hypermedia APIPOX to HATEOAS: Our Company's Journey Building a Hypermedia API
POX to HATEOAS: Our Company's Journey Building a Hypermedia APILuke Stokes
 

Similar to The REST And Then Some (20)

REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
 
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
 Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data... Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
 
Python tools for testing web services over HTTP
Python tools for testing web services over HTTPPython tools for testing web services over HTTP
Python tools for testing web services over HTTP
 
REST and Resource Oriented Architecture - okcDG March 2008
REST and Resource Oriented Architecture - okcDG March 2008REST and Resource Oriented Architecture - okcDG March 2008
REST and Resource Oriented Architecture - okcDG March 2008
 
Design Hypermedia APIs
Design Hypermedia APIsDesign Hypermedia APIs
Design Hypermedia APIs
 
Api Design and More (Friday Training at Itnig)
Api Design and More (Friday Training at Itnig)Api Design and More (Friday Training at Itnig)
Api Design and More (Friday Training at Itnig)
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
 
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
 
Jordi Romero Api for-the-mobile-era
Jordi Romero Api for-the-mobile-eraJordi Romero Api for-the-mobile-era
Jordi Romero Api for-the-mobile-era
 
Service approach for development Rest API in Symfony2
Service approach for development Rest API in Symfony2Service approach for development Rest API in Symfony2
Service approach for development Rest API in Symfony2
 
Crafting APIs
Crafting APIsCrafting APIs
Crafting APIs
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
 
Together Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with HypermediaTogether Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with Hypermedia
 
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIsThe liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
 
REST in Peace
REST in PeaceREST in Peace
REST in Peace
 
Progressive web apps
Progressive web appsProgressive web apps
Progressive web apps
 
Web services tutorial
Web services tutorialWeb services tutorial
Web services tutorial
 
POX to HATEOAS: Our Company's Journey Building a Hypermedia API
POX to HATEOAS: Our Company's Journey Building a Hypermedia APIPOX to HATEOAS: Our Company's Journey Building a Hypermedia API
POX to HATEOAS: Our Company's Journey Building a Hypermedia API
 
Web Services Tutorial
Web Services TutorialWeb Services Tutorial
Web Services Tutorial
 
JugTAAS ReSTful
JugTAAS ReSTfulJugTAAS ReSTful
JugTAAS ReSTful
 

More from Nordic APIs

How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Tod...
How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Tod...How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Tod...
How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Tod...Nordic APIs
 
The Art of API Design, by David Biesack at Apiture
The Art of API Design, by David Biesack at ApitureThe Art of API Design, by David Biesack at Apiture
The Art of API Design, by David Biesack at ApitureNordic APIs
 
ABAC, ReBAC, Zanzibar, ALFA… How Should I Implement AuthZ in My APIs? by Dav...
ABAC, ReBAC, Zanzibar, ALFA…  How Should I Implement AuthZ in My APIs? by Dav...ABAC, ReBAC, Zanzibar, ALFA…  How Should I Implement AuthZ in My APIs? by Dav...
ABAC, ReBAC, Zanzibar, ALFA… How Should I Implement AuthZ in My APIs? by Dav...Nordic APIs
 
Crafting a Cloud Native API Platform to Accelerate Your Platform Maturity - B...
Crafting a Cloud Native API Platform to Accelerate Your Platform Maturity - B...Crafting a Cloud Native API Platform to Accelerate Your Platform Maturity - B...
Crafting a Cloud Native API Platform to Accelerate Your Platform Maturity - B...Nordic APIs
 
The Federated Future: Pioneering Next-Gen Solutions in API Management - Marku...
The Federated Future: Pioneering Next-Gen Solutions in API Management - Marku...The Federated Future: Pioneering Next-Gen Solutions in API Management - Marku...
The Federated Future: Pioneering Next-Gen Solutions in API Management - Marku...Nordic APIs
 
API Authorization Using an Identity Server and Gateway - Aldo Pietropaolo, SGNL
API Authorization Using an Identity Server and Gateway - Aldo Pietropaolo, SGNLAPI Authorization Using an Identity Server and Gateway - Aldo Pietropaolo, SGNL
API Authorization Using an Identity Server and Gateway - Aldo Pietropaolo, SGNLNordic APIs
 
API Discovery from Crawl to Run - Rob Dickinson, Graylog
API Discovery from Crawl to Run - Rob Dickinson, GraylogAPI Discovery from Crawl to Run - Rob Dickinson, Graylog
API Discovery from Crawl to Run - Rob Dickinson, GraylogNordic APIs
 
Productizing and Monetizing APIs - Derric Gilling, Moseif
Productizing and Monetizing APIs - Derric Gilling, MoseifProductizing and Monetizing APIs - Derric Gilling, Moseif
Productizing and Monetizing APIs - Derric Gilling, MoseifNordic APIs
 
Securely Boosting Any Product with Generative AI APIs - Ruben Sitbon, Sipios
Securely Boosting Any Product with Generative AI APIs - Ruben Sitbon, SipiosSecurely Boosting Any Product with Generative AI APIs - Ruben Sitbon, Sipios
Securely Boosting Any Product with Generative AI APIs - Ruben Sitbon, SipiosNordic APIs
 
Security of LLM APIs by Ankita Gupta, Akto.io
Security of LLM APIs by Ankita Gupta, Akto.ioSecurity of LLM APIs by Ankita Gupta, Akto.io
Security of LLM APIs by Ankita Gupta, Akto.ioNordic APIs
 
I'm an API Hacker, Here's How to Go from Making APIs to Breaking Them - Katie...
I'm an API Hacker, Here's How to Go from Making APIs to Breaking Them - Katie...I'm an API Hacker, Here's How to Go from Making APIs to Breaking Them - Katie...
I'm an API Hacker, Here's How to Go from Making APIs to Breaking Them - Katie...Nordic APIs
 
Unleashing the Potential of GraphQL with Streaming Data - Kishore Banala, Net...
Unleashing the Potential of GraphQL with Streaming Data - Kishore Banala, Net...Unleashing the Potential of GraphQL with Streaming Data - Kishore Banala, Net...
Unleashing the Potential of GraphQL with Streaming Data - Kishore Banala, Net...Nordic APIs
 
Reigniting the API Description Wars with TypeSpec and the Next Generation of ...
Reigniting the API Description Wars with TypeSpec and the Next Generation of...Reigniting the API Description Wars with TypeSpec and the Next Generation of...
Reigniting the API Description Wars with TypeSpec and the Next Generation of ...Nordic APIs
 
Establish, Grow, and Mature Your API Platform - James Higginbotham, LaunchAny
Establish, Grow, and Mature Your API Platform - James Higginbotham, LaunchAnyEstablish, Grow, and Mature Your API Platform - James Higginbotham, LaunchAny
Establish, Grow, and Mature Your API Platform - James Higginbotham, LaunchAnyNordic APIs
 
Inclusive, Accessible Tech: Bias-Free Language in Code and Configurations - A...
Inclusive, Accessible Tech: Bias-Free Language in Code and Configurations - A...Inclusive, Accessible Tech: Bias-Free Language in Code and Configurations - A...
Inclusive, Accessible Tech: Bias-Free Language in Code and Configurations - A...Nordic APIs
 
Going Platinum: How to Make a Hit API by Bill Doerrfeld, Nordic APIs
Going Platinum: How to Make a Hit API by Bill Doerrfeld, Nordic APIsGoing Platinum: How to Make a Hit API by Bill Doerrfeld, Nordic APIs
Going Platinum: How to Make a Hit API by Bill Doerrfeld, Nordic APIsNordic APIs
 
Getting Better at Risk Management Using Event Driven Mesh Architecture - Ragh...
Getting Better at Risk Management Using Event Driven Mesh Architecture - Ragh...Getting Better at Risk Management Using Event Driven Mesh Architecture - Ragh...
Getting Better at Risk Management Using Event Driven Mesh Architecture - Ragh...Nordic APIs
 
GenAI: Producing and Consuming APIs by Paul Dumas, Gartner
GenAI: Producing and Consuming APIs by Paul Dumas, GartnerGenAI: Producing and Consuming APIs by Paul Dumas, Gartner
GenAI: Producing and Consuming APIs by Paul Dumas, GartnerNordic APIs
 
The SAS developer portal – developer.sas.com 2.0: How we built it by Joe Furb...
The SAS developer portal –developer.sas.com 2.0: How we built it by Joe Furb...The SAS developer portal –developer.sas.com 2.0: How we built it by Joe Furb...
The SAS developer portal – developer.sas.com 2.0: How we built it by Joe Furb...Nordic APIs
 
How Netflix Uses Data Abstraction to Operate Services at Scale - Vidhya Arvin...
How Netflix Uses Data Abstraction to Operate Services at Scale - Vidhya Arvin...How Netflix Uses Data Abstraction to Operate Services at Scale - Vidhya Arvin...
How Netflix Uses Data Abstraction to Operate Services at Scale - Vidhya Arvin...Nordic APIs
 

More from Nordic APIs (20)

How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Tod...
How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Tod...How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Tod...
How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Tod...
 
The Art of API Design, by David Biesack at Apiture
The Art of API Design, by David Biesack at ApitureThe Art of API Design, by David Biesack at Apiture
The Art of API Design, by David Biesack at Apiture
 
ABAC, ReBAC, Zanzibar, ALFA… How Should I Implement AuthZ in My APIs? by Dav...
ABAC, ReBAC, Zanzibar, ALFA…  How Should I Implement AuthZ in My APIs? by Dav...ABAC, ReBAC, Zanzibar, ALFA…  How Should I Implement AuthZ in My APIs? by Dav...
ABAC, ReBAC, Zanzibar, ALFA… How Should I Implement AuthZ in My APIs? by Dav...
 
Crafting a Cloud Native API Platform to Accelerate Your Platform Maturity - B...
Crafting a Cloud Native API Platform to Accelerate Your Platform Maturity - B...Crafting a Cloud Native API Platform to Accelerate Your Platform Maturity - B...
Crafting a Cloud Native API Platform to Accelerate Your Platform Maturity - B...
 
The Federated Future: Pioneering Next-Gen Solutions in API Management - Marku...
The Federated Future: Pioneering Next-Gen Solutions in API Management - Marku...The Federated Future: Pioneering Next-Gen Solutions in API Management - Marku...
The Federated Future: Pioneering Next-Gen Solutions in API Management - Marku...
 
API Authorization Using an Identity Server and Gateway - Aldo Pietropaolo, SGNL
API Authorization Using an Identity Server and Gateway - Aldo Pietropaolo, SGNLAPI Authorization Using an Identity Server and Gateway - Aldo Pietropaolo, SGNL
API Authorization Using an Identity Server and Gateway - Aldo Pietropaolo, SGNL
 
API Discovery from Crawl to Run - Rob Dickinson, Graylog
API Discovery from Crawl to Run - Rob Dickinson, GraylogAPI Discovery from Crawl to Run - Rob Dickinson, Graylog
API Discovery from Crawl to Run - Rob Dickinson, Graylog
 
Productizing and Monetizing APIs - Derric Gilling, Moseif
Productizing and Monetizing APIs - Derric Gilling, MoseifProductizing and Monetizing APIs - Derric Gilling, Moseif
Productizing and Monetizing APIs - Derric Gilling, Moseif
 
Securely Boosting Any Product with Generative AI APIs - Ruben Sitbon, Sipios
Securely Boosting Any Product with Generative AI APIs - Ruben Sitbon, SipiosSecurely Boosting Any Product with Generative AI APIs - Ruben Sitbon, Sipios
Securely Boosting Any Product with Generative AI APIs - Ruben Sitbon, Sipios
 
Security of LLM APIs by Ankita Gupta, Akto.io
Security of LLM APIs by Ankita Gupta, Akto.ioSecurity of LLM APIs by Ankita Gupta, Akto.io
Security of LLM APIs by Ankita Gupta, Akto.io
 
I'm an API Hacker, Here's How to Go from Making APIs to Breaking Them - Katie...
I'm an API Hacker, Here's How to Go from Making APIs to Breaking Them - Katie...I'm an API Hacker, Here's How to Go from Making APIs to Breaking Them - Katie...
I'm an API Hacker, Here's How to Go from Making APIs to Breaking Them - Katie...
 
Unleashing the Potential of GraphQL with Streaming Data - Kishore Banala, Net...
Unleashing the Potential of GraphQL with Streaming Data - Kishore Banala, Net...Unleashing the Potential of GraphQL with Streaming Data - Kishore Banala, Net...
Unleashing the Potential of GraphQL with Streaming Data - Kishore Banala, Net...
 
Reigniting the API Description Wars with TypeSpec and the Next Generation of ...
Reigniting the API Description Wars with TypeSpec and the Next Generation of...Reigniting the API Description Wars with TypeSpec and the Next Generation of...
Reigniting the API Description Wars with TypeSpec and the Next Generation of ...
 
Establish, Grow, and Mature Your API Platform - James Higginbotham, LaunchAny
Establish, Grow, and Mature Your API Platform - James Higginbotham, LaunchAnyEstablish, Grow, and Mature Your API Platform - James Higginbotham, LaunchAny
Establish, Grow, and Mature Your API Platform - James Higginbotham, LaunchAny
 
Inclusive, Accessible Tech: Bias-Free Language in Code and Configurations - A...
Inclusive, Accessible Tech: Bias-Free Language in Code and Configurations - A...Inclusive, Accessible Tech: Bias-Free Language in Code and Configurations - A...
Inclusive, Accessible Tech: Bias-Free Language in Code and Configurations - A...
 
Going Platinum: How to Make a Hit API by Bill Doerrfeld, Nordic APIs
Going Platinum: How to Make a Hit API by Bill Doerrfeld, Nordic APIsGoing Platinum: How to Make a Hit API by Bill Doerrfeld, Nordic APIs
Going Platinum: How to Make a Hit API by Bill Doerrfeld, Nordic APIs
 
Getting Better at Risk Management Using Event Driven Mesh Architecture - Ragh...
Getting Better at Risk Management Using Event Driven Mesh Architecture - Ragh...Getting Better at Risk Management Using Event Driven Mesh Architecture - Ragh...
Getting Better at Risk Management Using Event Driven Mesh Architecture - Ragh...
 
GenAI: Producing and Consuming APIs by Paul Dumas, Gartner
GenAI: Producing and Consuming APIs by Paul Dumas, GartnerGenAI: Producing and Consuming APIs by Paul Dumas, Gartner
GenAI: Producing and Consuming APIs by Paul Dumas, Gartner
 
The SAS developer portal – developer.sas.com 2.0: How we built it by Joe Furb...
The SAS developer portal –developer.sas.com 2.0: How we built it by Joe Furb...The SAS developer portal –developer.sas.com 2.0: How we built it by Joe Furb...
The SAS developer portal – developer.sas.com 2.0: How we built it by Joe Furb...
 
How Netflix Uses Data Abstraction to Operate Services at Scale - Vidhya Arvin...
How Netflix Uses Data Abstraction to Operate Services at Scale - Vidhya Arvin...How Netflix Uses Data Abstraction to Operate Services at Scale - Vidhya Arvin...
How Netflix Uses Data Abstraction to Operate Services at Scale - Vidhya Arvin...
 

Recently uploaded

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 

Recently uploaded (20)

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 

The REST And Then Some

Editor's Notes

  1. Hello! Thank you all for coming. I'm going to talk a bit about REST and hypermedia today.
  2. I’m Asbjørn Ulsberg, Business Architect for Web, API design and interfaces. In PayEx.
  3. Now that we have looked a bit at what REST is not, let's try to figure out what it is.
  4. The Argentinian author Jorge Luis Borges. (Horxe Luis Borxes) Started thinking about hypertext concepts in the 1930’s 1941: The Garden of Forking Paths: The first black on white reference to hypertext. About the Chinese Doctor Yu Tsun, a former professor of English, now a German spy in England during World War 1. Tsun can take multiple possible actions, but regardless of what actions he takes, he will always end up being arrested by Captain Richard Madden. “The Library of Babel” and ”The Book of Sands” expands on the hypertext ideas.
  5. The same concept as The Garden of Forking Paths can be found in modern RPG-style games like Bioshock Infinite and Fallout 3, where each decision forks the story in a new direction.
  6. 1963: Ted Nelson coined the terms 'hypertext' and 'hypermedia' in a model he developed for creating and using linked content (first published reference 1965). 1967: worked with Andries van Dam to develop the Hypertext Editing System (text editing) at Brown University.
  7. In December 1968, the first public demonstration of a hypertext interface was performed by Douglas Engelbart oN-Line System or more commonly, NLS. "The Mother of All Demos”: Mouse pointer, hypertext editing, word processing, e-mail and a windowing environment. Word processing was born Many of Engelbart's team members went on to start the Palo Alto Research Center, known as Xerox PARC, in 1971: http://www.thocp.net/biographies/engelbart_douglas.html
  8. In 1987, Bill Atkinson at Apple Computer created HyperCard. It was a successor to lots and lots of things: Xcode before Xcode (programming environment) AppleScript before AppleScript (near-english programming language) Java before Java (JIT) Interface Builder before Interface Builder, which was Visual Basic before Visual Basic. Flash before Flash (animations) FileMaker before FileMaker (build databases) Built-in debugger ”Fix and continue” before “fix and continue”
  9. Tim Berners-Lee 1989: Develops "WorldWideWeb” at CERN, on a NeXTStep computer. 1991: HTTP 0.9, Formal description, no status codes, GET only. 1996: HTTP 1.0, RFC 1945 1997: HTTP 1.1, RFC 2068 1998: Dave Winer utvikler og publiserer XML-RPC 1999: HTTP/1.1 RFC 2616 2015: HTTP/2
  10. The co-author of foundational specifications such as HTTP/1.1 (RFC 2616) and URI (RFC 2396) 2000: Roy Fielding doctorate dissertation Architectural Styles and the Design of Network-based Software Architectures Chapter 5: Representational State Transfer REST
  11. What is REST, exactly? Difficult to answer. What I do know is that it is surrounded with a lot of misconceptions. I wish I had time to go through them all, but I’ve picked a couple of the most common ones here.
  12. The first misconception I’ve chosen is that REST maps directly to CRUD. It doesn’t. Without going into the details about REST being an architectural style and not a protocol, let’s go through the methods. POST can create, manipulate or represent any method. It is used to tunnel the whole SOAP protocol, for instance. PUT can both create and replace, but not really update a resource. Only GET and DELETE map, the rest of the methods does something completely different. Secondly, focusing on CRUD will lead to a badly designed API.
  13. The second misconception is about URIs. URIs, then. Are they important? Which of these are most RESTful? RESTful URI: You have no idea. That doesn’t mean pretty and human readable, consistent URIs aren’t important. But from a REST perspective, it is just an opaque identifier. You will discover URIs through hypermedia, so what it is shouldn’t matter one ounce. What's important is what surrounds the URI, such as the: method input data response
  14. Does this look familiar? Who thinks this is good API documentation? If your API is overly concerned with URIs and enumerating them in the documentation, you don't have a RESTful API. You have what Stefan Tilkov calls a “URI API” The bad thing about this is that you burden the clients with server details, while giving up control over something the server should be master of.
  15. Let's say you have a database table Wouldn't it be annoying if you couldn't rename it because a client you didn't control had the table name hard coded in its SQL statements?
  16. The right spelling of Referer is with two r's, but since you've made the clients dependent on your spelling error, you can never rename the table.
  17. You have what Stefan Tilkov calls a “URI API” The bad thing about this is that you burden the clients with server details, while giving up control over something the server should be master of.
  18. It's the same way with URI-dependent APIs. If you want to move a resource to a different URL, every client needs to be updated.
  19. If you want to make a backward incompatible change to the notes resource, you give it a new version number.
  20. You now need to give all resources a new version, even though they didn’t change. Do tedious work on your URIs and what operations you can perform on them Don’t write it down in documentation. Write it down into your resources instead, as inline hypermedia controls. Makes the resources self descriptive, decouples the client from the server and makes the server much more flexible in what it can do. URI templates are for APIs what GET <form> is for HTML.
  21. Roy Fielding gave a talk for the Adobe Evolve conference in 2013 There, he proposed the following question: What is the best practice for versioning a REST API? His answer?
  22. https://www.infoq.com/articles/roy-fielding-on-versioning/
  23. So, now that we know what REST is not, let’s discuss what it might be.
  24. I like to think of learning REST like learning a foreign language. A study called: "The Foreign-Language Effect: Thinking in a Foreign Tongue Reduces Decision Biases” (by Boaz Keysar, Sayuri L. Hayakawa and Sun Gyu An in Psychological Science) http://www.economist.com/blogs/johnson/2012/05/foreign-languages-and-thinking Proves that different languages affect how we think, act and feel.
  25. The same applies to architectural principles and programming languages. Who here knows functional programming? Would you say it makes you think and develop differently than you do (or did) with procedural languages? It at least means that you can't use your RPC competency and just apply it to REST. You will fail.
  26. REST consists of 6 constraints. Another way to look at it: Guarantees.
  27. Of all the constraints, I believe the last one here is both most important and less understood. That's why I'm going to try to explain it.
  28. In an 2014 interview with Mike Amundsen, Roy Fielding said this. https://www.infoq.com/articles/roy-fielding-on-versioning/
  29. Links and operations
  30. Those links and operations are analogous to real-life affordances, as popularized by Don Norman in his book the "Design of Everyday things”. Like a cup “wants” to be held and lifted and a button “wants” to be pushed, hypermedia should explain to the client what the resource ”wants” the client to do.
  31. Don Norman defines an affordance by “Do people know what to do based on what they see?”
  32. In the same way, we can define hypermedia by “do machines know what to do based on what they see”.
  33. So, how does hypermedia look like? Does it look familiar? Forms are hypermedia recipes of how the next request is going to look like How do we transport our knowledge of hypermedia in HTML to an API?
  34. Let's start by reformatting the HTML
  35. Replacing all attributes with common ones, makes it more consistent and more "API-like".
  36. Making further adjustments
  37. Like generating a new WSDL in the response to every request. Just like HTML.
  38. So, how can we use hypermedia in practice? As REST defines, hypermedia should be the engine of application state. Here’s what that means.
  39. Let's use a toaster as an example
  40. Initial state of a toaster is Off. We turn it on, and it reaches on status, eventually heating our bread. After it has been heating for a while, it reaches an upper temperature limit Bringing it into an idle state. When it reaches a lower temperature limit, it will go back into heating state. Eventually, the bread will be done and the toaster will enter the shutting down state Ending in the off state, just as we started.
  41. If we turn our toaster into an HTTP resource, how does it look like? Let's try to GET it.
  42. We can see that it has an off state
  43. We can also see that it has an operation that allows us to turn it on
  44. Let's look at that operation a little more closely
  45. If we just reformat it a little
  46. It starts looking like an HTTP request
  47. Well, look at that! The toaster is now on. We see that we can now turn it off again, but we can also increase the heating strength. By the way, does anyone notice anything different hre
  48. Well, look at that! The toaster is now on. We see that we can now turn it off again, but we can also increase the heating strength. By the way, does anyone notice anything different hre
  49. Well, look at that! The toaster is now on. We see that we can now turn it off again, but we can also increase the heating strength. By the way, does anyone notice anything different here?
  50. Ah. The toaster is now heating at strength 3. We see that we can still turn it off and adjust the strength. But what about that ID up there? Doesn't that look suspiciously like a URI?
  51. It seems the toaster has reached an upper temperature limit, putting it into an idle state. Although it may look like it, we did not alter the state of the toaster with our GET request. We just discovered that the state had changed, by doing a safe, idempotent request.
  52. Let's repeat the GET request and see what's happened. Seems like our bread is done and the toaster is shutting down. We now have no available operations, since we can't do anything while the toaster is shutting down.
  53. Getting back to versioning, when you use hypermedia, you're much more flexible: Adding properties to JSON is fine. Adding relations to new resources is fine. Adding new representations to the same resource is also fine. So we have a lot of ways we can guide new clients to new content without: Affecting old clients Adding a version number to our URIs
  54. You can reach me on: Twitter E-mail Slack. Join the HTTP API slack! It's full of great people in love with the web and APIs.