Denna presentation är licensierat under en
Creative Commons Erkännande 3.0 Unported Licens. (Där inte annat anges)
Synliggöra data Application programming interface Skillnaden från en webbapplikation Maskin till maskin Distribuerade system
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
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.
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/
Standardisering av W3C
XML, XML, XML
Möjlighet till automatgenererad kod
Enterprise, "Big Web services"
Transaction, Security, Hantering av state....osv
Web Service dumt namn mycket automatiskt, mycket overhead
VS.
GET http://www.example.org/stockprice/IBM.xml
Foto cc by: http://www.flickr.com/photos/joeshlabotnik/
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
RESTful är en arkitektonisk stil
Foto cc by: http://www.flickr.com/photos/rhymereverie/
"But it is not restful if you...."
Foto cc by: http://www.flickr.com/photos/remek/
Foto cc by: http://www.flickr.com/photos/ginnerobot/
Singular vs. plural?
id vs. name?
Hur djupt ska man nästla?
Studera andras APIer...
Svårt att veta olika urler, stökigt
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
Foto cc by: http://www.flickr.com/photos/dm-set/
Foto cc by: http://www.flickr.com/photos/crobj/
// 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
Ditt API meddelar klienten genom fördefinierade statuskoder i HTTP
POST http://example.com/products Accept: application/json Content-Type: application/json ... { "product_name" : "Bultbräda 2000", "price" : 324.50, "category" : 3 }
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" } }
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