Webbramverk, 1DV450
Linnéuniversitetet, vt 2016



RESTful Webb-API

Vad är ett (webb-)API?

"API is UI to Data"

Synliggöra data Application programming interface Skillnaden från en webbapplikation Maskin till maskin Distribuerade system

API Driven development

Foto cc by: http://www.flickr.com/photos/teegardin/

Vi har data, utveckla ni (twitter) Plattformsoberoende, flera enheter och miljöer Skalbarhet, utbyggningsbart Mashups, en backend olika frontends

För vem skriver man ett API?

Andra utvecklare...

Du vet inte dina API-användares användningsfall

Foto cc by: http://www.flickr.com/photos/sylvainkalache/

Inga user cases. Vi vet inte hur vårt API kommer att användas.

Historik

Behov av att kunna utbyta information mellan applikationer, tjänsteorienterad arkitektur, SOA
Web Services...

Foto cc by Wilgengebroed on Flickr: https://www.flickr.com/photos/wilgengebroed/5514783718/

Web Service

Standardisering av W3C
XML, XML, XML
Möjlighet till automatgenererad kod

Enterprise, "Big Web services"
Transaction, Security, Hantering av state....osv

http://www.w3.org/2002/ws/

Web Service dumt namn mycket automatiskt, mycket overhead

WSDL

SOAP

VS.

GET http://www.example.org/stockprice/IBM.xml

REST

Foto cc by: http://www.flickr.com/photos/joeshlabotnik/

REST

Representational State Transfer

Roy Fielding, 2000
”Architectural styles and the design of networked-based architecture”
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

REST användes egentligen som ett exempel på att visa hur webben fungerar

Roy författare till HTTP specifikationen, Apache HTTP server project

Vad REST inte är!

RESTful är en arkitektonisk stil

Foto cc by: http://www.flickr.com/photos/rhymereverie/

RESTafarian
eller pragmatiker?

"But it is not restful if you...."

Begrepp när man pratar REST

Foto cc by: http://www.flickr.com/photos/remek/

Varje "sak" är en resurs (resource)

Foto cc by: http://www.flickr.com/photos/ginnerobot/

Varje resurs måste kunna adresseras via en URI

Singular vs. plural?
id vs. name?
Hur djupt ska man nästla?
Studera andras APIer...

URLer - Anti-pattern

Svårt att veta olika urler, stökigt

Använd HTTP-verbs för att beskriva "actions"

Ditt api behandlar resursen beroende på vilken HTTP-metod som klienten anropar din URL med

http://www.api.example.com/v1/users
http://www.api.example.com/v1/users/129387

POST vs. PUT

Foto cc by: http://www.flickr.com/photos/dm-set/

Multipla representationer

Foto cc by: http://www.flickr.com/photos/crobj/

Accept-header

// I header från klienten
Accept: application/xml, text/csv, text/plain
Accept: application/json
Accept: application/thajo+json
Accept: application/vnd.github.v3+json

http://www.api.example.com/users/thajo.json
http://www.api.example.com/users/thajo.xml

// I header från server - berättar om dataformatet
Content-Type: application/thajo+json

HTTP Status Code

Ditt API meddelar klienten genom fördefinierade statuskoder i HTTP

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
HTTP Status Cats

Exempel - Skapa en resurs

POST http://example.com/products
Accept: application/json
Content-Type: application/json
...
{
   "product_name"  : "Bultbräda 2000",
   "price"  : 324.50,
   "category" : 3
}

Exempel - Skapa en resurs

201 Created
Content-Type: application/json
...
{
   "id" : 123
   "message": "A new product was created",
   "link": "http://example.com/products/123",
   "created_at": "2015-01-14T16:00:49Z",
   "updated_at": "2015-01-14T16:00:49Z",
   "category" {
     "id": 3,
     "category_name": "Toys",
     "url": "http://example.com/categories/3"
     "category_url" : "http://example.com/categories"
  }
}

Exempel - Skapa en resurs (postman)

Exempel - Felmeddelande

HATEOAS

Hypermedia As The Engine Of Application State

The model of application is an engine that moves from one state to another by picking alternative state transitions in current set of representations