SlideShare a Scribd company logo
REST teori og praksis




            Erlend Hamnaberg
            javaBin styreleder
                 @hamnis
        1
HTTP == REST



     2
HTTP != REST


      2
Powered by
                        REST

http://www.flickr.com/photos/dullhunk/3930915541
                     3
History



   4
Architectural Styles and the
 Design of Network-based
  Software Architectures



             5
Elevates Data to a first-
   class architectural
        element

           6
Client / Server



       7
Uniform Interface



        8
Identifying resources
     using URIs


          9
10
ftp://example.com/tmp/bar

       file:///tmp/bar

http://example.com/baz

     urn:id:123
           10
Resource




   11
Resource




   11
Resource


http://www.flickr.com/photos/dalee/908535267/




                                                  11
Resource


http://www.flickr.com/photos/dalee/908535267/




                                                  11
Resource


http://www.flickr.com/photos/dalee/908535267/           http://www.flickr.com/photos/foolstopzanet/151936713/




                                                  11
Resource


http://www.flickr.com/photos/dalee/908535267/           http://www.flickr.com/photos/foolstopzanet/151936713/




                                                  11
manipulation of
resources through
 representations

        12
Representation




      13
Representation




      13
Representation




      13
Representation
<?xml version="1.0" encoding="utf-8"?>

<feed xmlns="http://www.w3.org/2005/Atom">

          <title>Example Feed</title>
          <subtitle>A subtitle.</subtitle>
          <link href="http://example.org/feed/" rel="self" />
          <link href="http://example.org/" />
          <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
          <updated>2003-12-13T18:30:02Z</updated>
          <author>
                   <name>John Doe</name>
                   <email>johndoe@example.com</email>
          </author>

          <entry>
                     <title>Atom-Powered Robots Run Amok</title>
                     <link href="http://example.org/2003/12/13/atom03" />
                     <link rel="alternate" type="text/html" href="http://example.org/2003/12/13/atom03.html"/>
                     <link rel="edit" href="http://example.org/2003/12/13/atom03/edit"/>
                     <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
                     <updated>2003-12-13T18:30:02Z</updated>
                     <summary>Some text.</summary>
          </entry>

</feed>




                                                        14
Representation
{ "collection" :
  {
    "version" : "1.0",
    "href" : "http://example.org/friends/",

        "links" : [
           {"rel" : "feed", "href" : "http://example.org/friends/rss"},
           {"rel" : "queries", "href" : "http://example.org/friends/?queries"},
           {"rel" : "template", "href" : "http://example.org/friends/?template"}
        ],

        "items" : [
          {
            "href" : "http://example.org/friends/jdoe",
            "data" : [
               {"name" : "full-name", "value" : "J. Doe", "prompt" : "Full Name"},
               {"name" : "email", "value" : "jdoe@example.org", "prompt" : "Email"}
            ],
            "links" : [
               {"rel" : "blog", "href" : "http://examples.org/blogs/jdoe", "prompt" : "Blog"},
               {"rel" : "avatar", "href" : "http://examples.org/images/jdoe", "prompt" : "Avatar", "render" : "image"}
            ]
          }
        ]
    }
}




                                                            15
self-descriptive
   messages


       16
Stateless protocol



        17
18
HATEOAS



   18
Hypertext as the
engine of appliation
       state

         18
The hypertext
  constraint


      18
Layered System



      19
Caching



   20
Code on demand
    Optional




        21
“The World Wide Web [...](the Web) is a system of
interlinked hypertext documents accessed via the Internet.
  With a web browser, one can view web pages that may
   contain text, images, videos, and other multimedia and
           navigate between them via hyperlinks.




          http://en.wikipedia.org/wiki/World_Wide_Web
                            22
text, images, videos, and other
multimedia and navigate between them via
             hyperlinks
                              my emphasis




                   23
Hypermedia

     23
Hypermedia factors



        24
25
26
REST == HTTP +
  Hypermedia



      27
References
http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
http://amundsen.com/hypermedia/hfactor/




                           28
REST teori og praksis; REST in theory and practice
Case
http://github.com/javabin/ems-redux




                30
Event

                           1

                           *
             *   1
Attachment           Session
             1                 1
                                   * speaker
                                    1

             *                           1


                 1

                     Contact   1



                      31
Translated to resources
• /events
• /events/{id}
• /events/{id}/sessions
• /events/{eid}/sessions/{sid}
• /binary/{id}
• /contact/{id}
                      32
Serialization



      33
Serialized Java objects



           34
POX ( Plain Old XML)



         35
<session>
 <title>REST in theory and practice</title>
 <body>....</body>
 ...
</session



                    36
JSON



 37
"session" : {
	

 "title" : "REST in theory and practice",
	

 "body" : "..."
	

 ...
}



                    38
YAM™



 39
YAM™
Yet Another Mediatype




          39
<session href="/session/2">
 <title>REST in theory and practice</title>
 <body>....</body>
 ...

 <link href="/publish" type="text/uri-list" rel="publish"/>
 <link href="/session/2" type="application/vnd.jb.session"
rel="edit"/>
</session
                              40
"session" : {
	

 "href" : "/session/2"
	

 "title" : "REST in theory and practice",
	

 "body" : "..."
	

 ...
	

 "_meta" : {
	

 "_links" : [
	

 	

 {"href" : "/session/2", "type" : "application/
vnd.jb.session", "rel": "edit"}
       ]
	

 }
}                                  41
collection+json



       42
"collection" {
	

 "version" : "1.0",
	

 "href" : "/session/2",
	

 "items" : {
	

 	

 "href" : "/session/2"
	

 	

 "data" : [
	

 	

 	

 {"name" : "title", "value" : "REST in theory and practice"},
	

 	

 	

 {"name" : "body", "value" : "..."}
	

 	

 ]
	

 },
	

 "template" : {
	

 	

 "data" : [
	

 	

 	

 {"name" : "title", "value" : "REST in theory and practice"},
	

 	

 	

 {"name" : "body", "value" : "..."}
	

 	

 ]
	

 }
}                                      43
Atom



 44
<?xml version="1.0" encoding="utf-8"?>

 <entry xmlns="http://www.w3.org/2005/Atom" xml:base=”http://api.java.no/>
   <title>REST in theory and practice</title>
   <link href="session/2" />
   <link rel="alternate" type="text/html" href="session/2.html"/>
   <link rel="edit" href="session/2"/>
   <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
   <updated>2003-12-13T18:30:02Z</updated>
   <summary>Some text.</summary>
   <author>
     <name>John Doe</name>
     <email>johndoe@example.com</email>
   </author>
 </entry>




                                           45
HTML



 46
Operations



    47
Creating a new session



          48
Updating a session



        49
Partial updates?



       50
Deleting a session



        51
Searching



    52
Publish a session



        53
Authentication



      54
SSL + Basic



     55
SSL + Digest



     56
Three legged auth.



        57
WebID



  58
BrowserID



    59
Google ClientLogin



        60
Roll-your-own™



      61
“[...]Any method that hands over the password (or a
password-equivalent like a password in hashed form) as
current browsers do should be banned outright, and
anyone who implements hand-over-the-password should
killed and eaten to prevent them from passing on the
genes[...]
“ -- Peter Gutmann

                          62
API-nøkler



    63
References
•   http://tools.ietf.org/html/rfc4287
•   http://www.amundsen.com/media-types/collection/
•   http://www.ics.uci.edu/~fielding/pubs/dissertation/
    top.htm
•   http://amundsen.com/hypermedia/hfactor/
•   http://tools.ietf.org/html/rfc5023
•   http://www.w3.org/wiki/WebID
•
                            64
References

• RESTful webservices cookbook (Subbu et
  al.)
• REST in Practice (Webber et al.)
• Building hypermedia APIs with HTML 5 and
  Node JS (Amundsen)



                    65

More Related Content

PDF
HTML5 APIs - Where No Man Has Gone Before! - GothamJS
Robert Nyman
 
PPTX
Meta Buscadores
pechever
 
PDF
03. ElasticSearch : Data In, Data Out
OpenThink Labs
 
KEY
JSON-LD: JSON for Linked Data
Gregg Kellogg
 
PDF
Introduction to python
Hyun-hwan Jeong
 
PPTX
Cookies
vamsi krishna
 
PPTX
Twas the night before Malware...
DoktorMandrake
 
PDF
Jersey
Yung-Lin Ho
 
HTML5 APIs - Where No Man Has Gone Before! - GothamJS
Robert Nyman
 
Meta Buscadores
pechever
 
03. ElasticSearch : Data In, Data Out
OpenThink Labs
 
JSON-LD: JSON for Linked Data
Gregg Kellogg
 
Introduction to python
Hyun-hwan Jeong
 
Cookies
vamsi krishna
 
Twas the night before Malware...
DoktorMandrake
 
Jersey
Yung-Lin Ho
 

What's hot (7)

PDF
Data Exploration with Elasticsearch
Aleksander Stensby
 
PPTX
Chris Gutteridge: RDF Crash Course
devxs
 
PDF
SmartData Webinar Slides JSON-LD
DATAVERSITY
 
PDF
Fun with Python
Narong Intiruk
 
PDF
[2B1]검색엔진의 패러다임 전환
NAVER D2
 
TXT
Sustainable livelihood-framework-sr-presentation
guest6899d4f
 
PPT
Preserving the scholarly record with WebCite (www.webcitation.org): an archiv...
Gunther Eysenbach
 
Data Exploration with Elasticsearch
Aleksander Stensby
 
Chris Gutteridge: RDF Crash Course
devxs
 
SmartData Webinar Slides JSON-LD
DATAVERSITY
 
Fun with Python
Narong Intiruk
 
[2B1]검색엔진의 패러다임 전환
NAVER D2
 
Sustainable livelihood-framework-sr-presentation
guest6899d4f
 
Preserving the scholarly record with WebCite (www.webcitation.org): an archiv...
Gunther Eysenbach
 
Ad

Similar to REST teori og praksis; REST in theory and practice (20)

PDF
REST Introduction (PHP London)
Paul James
 
PDF
You Look Like You Could Use Some REST!
Ben Ramsey
 
PDF
Cwinters Intro To Rest And JerREST and Jersey Introductionsey
elliando dias
 
PDF
Introduction to REST and Jersey
Chris Winters
 
PDF
REST in Practice
Guilherme Silveira
 
PPTX
RESTful Web Services
Greg Hines
 
KEY
Web 30 and RSS
Helmut Doll
 
PPT
Filling in the Blanks: Capturing Dynamically Generated Content
Justin Brunelle
 
PDF
A Provenance-Aware Linked Data Application for Trip Management and Organization
Boris Villazón-Terrazas
 
PDF
Grokking the REST Architectural Style
Ben Ramsey
 
PDF
Real World REST with Atom/AtomPub
Peter Keane
 
PPTX
Web 2.0
Dileep Pradeep
 
PPTX
Documentation 2.0: DIY Content Delivery and Feedback in Real-time
lykhinin
 
PDF
Brief Introduction to REST
Colin Harrington
 
PDF
SOA2010 SOA with REST
Cesare Pautasso
 
PPTX
RESTful Web Services
Gordon Dickens
 
PDF
Creating a Web of Data with Restlet
guest7d0e11
 
PPTX
Web2 0-111020043404-phpapp01
pumascomm
 
PDF
Python Ireland Nov 2010 - RESTing with Django
Python Ireland
 
ZIP
REST: Theory vs Practice
Subbu Allamaraju
 
REST Introduction (PHP London)
Paul James
 
You Look Like You Could Use Some REST!
Ben Ramsey
 
Cwinters Intro To Rest And JerREST and Jersey Introductionsey
elliando dias
 
Introduction to REST and Jersey
Chris Winters
 
REST in Practice
Guilherme Silveira
 
RESTful Web Services
Greg Hines
 
Web 30 and RSS
Helmut Doll
 
Filling in the Blanks: Capturing Dynamically Generated Content
Justin Brunelle
 
A Provenance-Aware Linked Data Application for Trip Management and Organization
Boris Villazón-Terrazas
 
Grokking the REST Architectural Style
Ben Ramsey
 
Real World REST with Atom/AtomPub
Peter Keane
 
Documentation 2.0: DIY Content Delivery and Feedback in Real-time
lykhinin
 
Brief Introduction to REST
Colin Harrington
 
SOA2010 SOA with REST
Cesare Pautasso
 
RESTful Web Services
Gordon Dickens
 
Creating a Web of Data with Restlet
guest7d0e11
 
Web2 0-111020043404-phpapp01
pumascomm
 
Python Ireland Nov 2010 - RESTing with Django
Python Ireland
 
REST: Theory vs Practice
Subbu Allamaraju
 
Ad

Recently uploaded (20)

PDF
CIFDAQ's Teaching Thursday: Moving Averages Made Simple
CIFDAQ
 
PDF
Google’s NotebookLM Unveils Video Overviews
SOFTTECHHUB
 
PPTX
The Power of IoT Sensor Integration in Smart Infrastructure and Automation.pptx
Rejig Digital
 
PDF
Shreyas_Phanse_Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
SHREYAS PHANSE
 
PDF
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
SMACT Works
 
PDF
Chapter 2 Digital Image Fundamentals.pdf
Getnet Tigabie Askale -(GM)
 
PDF
Doc9.....................................
SofiaCollazos
 
PDF
REPORT: Heating appliances market in Poland 2024
SPIUG
 
PDF
Why Your AI & Cybersecurity Hiring Still Misses the Mark in 2025
Virtual Employee Pvt. Ltd.
 
PPTX
ChatGPT's Deck on The Enduring Legacy of Fax Machines
Greg Swan
 
PDF
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
AVTRON Technologies LLC
 
PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
PDF
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
PDF
agentic-ai-and-the-future-of-autonomous-systems.pdf
siddharthnetsavvies
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
CIFDAQ
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
CIFDAQ's Teaching Thursday: Moving Averages Made Simple
CIFDAQ
 
Google’s NotebookLM Unveils Video Overviews
SOFTTECHHUB
 
The Power of IoT Sensor Integration in Smart Infrastructure and Automation.pptx
Rejig Digital
 
Shreyas_Phanse_Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
SHREYAS PHANSE
 
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
SMACT Works
 
Chapter 2 Digital Image Fundamentals.pdf
Getnet Tigabie Askale -(GM)
 
Doc9.....................................
SofiaCollazos
 
REPORT: Heating appliances market in Poland 2024
SPIUG
 
Why Your AI & Cybersecurity Hiring Still Misses the Mark in 2025
Virtual Employee Pvt. Ltd.
 
ChatGPT's Deck on The Enduring Legacy of Fax Machines
Greg Swan
 
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
AVTRON Technologies LLC
 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
agentic-ai-and-the-future-of-autonomous-systems.pdf
siddharthnetsavvies
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
CIFDAQ
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 

REST teori og praksis; REST in theory and practice

Editor's Notes

  • #2: \n
  • #3: Hvor mange tror dette?\nDet stemmer ikke. REST er ikke det samme som HTTP, men det er vanlig &amp;#xE5; bruke HTTP for &amp;#xE5; oppn&amp;#xE5; en RESTful arktitektur. Jeg kommer til &amp;#xE5; bruke HTTP som hovedbestanddel i denne presentasjonen.\n
  • #4: Hvor mange tror dette?\nDet stemmer ikke. REST er ikke det samme som HTTP, men det er vanlig &amp;#xE5; bruke HTTP for &amp;#xE5; oppn&amp;#xE5; en RESTful arktitektur. Jeg kommer til &amp;#xE5; bruke HTTP som hovedbestanddel i denne presentasjonen.\n
  • #5: \n
  • #6: F&amp;#xF8;rst litt historikk: Dr. Roy Fielding var en av de som var med &amp;#xE5; utvikle HTTP, og i denne prosessen skrev han ogs&amp;#xE5; doktoravhandlingen sin om arkitektoniske stiler. \n
  • #7: Denne ble utgitt i 2000. Han beskriver arkitektoniske stiler som et sett med begrensninger for &amp;#xE5; oppn&amp;#xE5; visse kvaliteter eller egenskaper i en konkret arkitektur. REST er eksempelet i dette doktoravhandlingen. For en doktoravhandling er den forbausende lettlest, og jeg anbefaler alle &amp;#xE5; gj&amp;#xF8;re dette. Linken til denne vil st&amp;#xE5; p&amp;#xE5; slutten av teoridelen. Det er med andre ord mulig &amp;#xE5; kunne bruke denne doktoravhandlingen til mye mer enn bare for REST som eksempelform. Det er mye fornuftig skrevet her.\n
  • #8: Den viktigste designoperasjonen i en restful arkitektur er design av dataformater, eller hypermedia formater. Jeg kommer tilbake til dette litt senere. Et av m&amp;#xE5;lene til REST er &amp;#xE5; frikoble data mer fra serveren / klienten, og heller la alle ting bli oppdaget ved hjelp av hypertekst.\n
  • #9: Denne begrensningen er relativt selvforklarende. REST er Request/response basert. Hovedforskjellen i forhold til en RPC basert akritektur, er at serveren har mye mer makt i forholdet her. Dette gjelder blant annet statelessness i kommunikasjon, noe som vi skal komme tilbake til senere. Klientene har et mye st&amp;#xF8;rre ansvar i &amp;#xE5; holde p&amp;#xE5; kontekst i forhold til det de er ute etter p&amp;#xE5; serveren. Klienten m&amp;#xE5; vite hvorfor den gj&amp;#xF8;r de valgene som trengs. Kontekst er utrolig viktig.\n
  • #10: Det unforme interfacet er bygget opp i flere deler, jeg vil g&amp;#xE5; igjennom de hver for seg.\n
  • #11: Roy Fielding satt ogs&amp;#xE5; i komiteen som definerte URI\nURI er et superset av URL og URN Eksempler f&amp;#xF8;lger p&amp;#xE5; neste slide.\n\nRessurser er alle ting som kan modelleres. Feks en Bil, en aktikkel, en annonse, en event osv. Det er viktig &amp;#xE5; tenke p&amp;#xE5; ressurser som substantiv, men der er unntak der ogs&amp;#xE5;... en ressurs kan ha flere urier.\n
  • #12: \n
  • #13: \n
  • #14: \n
  • #15: \n
  • #16: \n
  • #17: \n
  • #18: \n
  • #19: \n
  • #20: \n
  • #21: En representasjon er alt som blir servert i bodyen til en melding.\n
  • #22: HTML. Rendert. &lt;click&gt; Eller amazon kunne vel sett slik ut? ehm, kanskje ikke helt, men dere ser poenget.\n
  • #23: HTML. Rendert. &lt;click&gt; Eller amazon kunne vel sett slik ut? ehm, kanskje ikke helt, men dere ser poenget.\n
  • #24: Dette er et Atom feed som dere sikkert ser.\n
  • #25: Dette er et format som heter collection+json, jeg kommer tilbake til dette senere.\n
  • #26: Dette betyr at meldingen inneholder alle ting som skal gj&amp;#xF8;re den forst&amp;#xE5;elig for en klient. \n\nSelf-descriptive betyr metadata + data. Man skal kunne inspisere headerene og forst&amp;#xE5; hvordan kroppen p&amp;#xE5; meldingen skal prosesseres basert p&amp;#xE5; headeren + status kode i HTTP. Content-Type headeren betyr hva innholdet er. \nAkkurat dette er en litt vanskelig bit av REST. Det har med noe som man kaller &amp;#x2018;visiblitity&amp;#x2019; eller synlighet. Om man bruker et standardformat, kan man lettere utnytte nettverksinfrastruktur som forst&amp;#xE5;r disse formatene. Feks om man bruker HTML kan google webaccelerator gj&amp;#xF8;re dns oppslag p&amp;#xE5; forh&amp;#xE5;nd osv.\n\nMark Nottingham sier det ganske bra: &amp;#x201C;I want to follow my nose when consuming an API&amp;#x201D;. Dette betyr at dokumentasjonen m&amp;#xE5; v&amp;#xE6;re lett tilgjengelig, gjerne linket til i meldingen.\n\nDersom man serverer noe som er for generisk, feks application/json eller application/xml er ikke meldingen lenger self-descriptive, og systemet kan ikke gj&amp;#xF8;re noe med meldingen uten out-of-band informasjon. Dette &amp;#xF8;ker koblingen mellom klient og tjener, og er en av de tingene som REST pr&amp;#xF8;ver &amp;#xE5; unng&amp;#xE5;. Koblingen blir bibliotekstyrt i forhold til nettverksstyrt, dette er uheldig\n
  • #27: Hver request skal inneholde alt som skal til for &amp;#xE5; kunne tilfredstille serveren. Dette betyr at serveren ikke skal ha noen form for &amp;#x201C;midlertidig&amp;#x201D; informasjon om hvilke klienter som er koblet til.\nAuthentication og slikt er et eget kapittel, som jeg skal pr&amp;#xF8;ve &amp;#xE5; f&amp;#xE5; behandlet i den praktiske biten.\n
  • #28: Dette er en av de viktigste og mest misforst&amp;#xE5;tte bitene av REST, og det krever nesten et eget foredrag. Hovedsaklig betyr det at man bruker hypertekst les; linker, skjemaer mm., for &amp;#xE5; kunne gj&amp;#xF8;re valg som man fikk i den forrige responsen fra serveren. Et &amp;#x201C;skjermbilde&amp;#x201D; p&amp;#xE5; en klient kan v&amp;#xE6;re bygd opp av MANGE ressurser. Hvordan klienten velger &amp;#xE5; vise frem ting er out-of-scope for serveren sin del. Serveren sin interaksjon slutter n&amp;#xE5;r den har levert fra seg responsen.\n
  • #29: Dette er en av de viktigste og mest misforst&amp;#xE5;tte bitene av REST, og det krever nesten et eget foredrag. Hovedsaklig betyr det at man bruker hypertekst les; linker, skjemaer mm., for &amp;#xE5; kunne gj&amp;#xF8;re valg som man fikk i den forrige responsen fra serveren. Et &amp;#x201C;skjermbilde&amp;#x201D; p&amp;#xE5; en klient kan v&amp;#xE6;re bygd opp av MANGE ressurser. Hvordan klienten velger &amp;#xE5; vise frem ting er out-of-scope for serveren sin del. Serveren sin interaksjon slutter n&amp;#xE5;r den har levert fra seg responsen.\n
  • #30: Dette er en av de viktigste og mest misforst&amp;#xE5;tte bitene av REST, og det krever nesten et eget foredrag. Hovedsaklig betyr det at man bruker hypertekst les; linker, skjemaer mm., for &amp;#xE5; kunne gj&amp;#xF8;re valg som man fikk i den forrige responsen fra serveren. Et &amp;#x201C;skjermbilde&amp;#x201D; p&amp;#xE5; en klient kan v&amp;#xE6;re bygd opp av MANGE ressurser. Hvordan klienten velger &amp;#xE5; vise frem ting er out-of-scope for serveren sin del. Serveren sin interaksjon slutter n&amp;#xE5;r den har levert fra seg responsen.\n
  • #31: Dette er en av de viktigste og mest misforst&amp;#xE5;tte bitene av REST, og det krever nesten et eget foredrag. Hovedsaklig betyr det at man bruker hypertekst les; linker, skjemaer mm., for &amp;#xE5; kunne gj&amp;#xF8;re valg som man fikk i den forrige responsen fra serveren. Et &amp;#x201C;skjermbilde&amp;#x201D; p&amp;#xE5; en klient kan v&amp;#xE6;re bygd opp av MANGE ressurser. Hvordan klienten velger &amp;#xE5; vise frem ting er out-of-scope for serveren sin del. Serveren sin interaksjon slutter n&amp;#xE5;r den har levert fra seg responsen.\n
  • #32: Dette er en av de viktigste og mest misforst&amp;#xE5;tte bitene av REST, og det krever nesten et eget foredrag. Hovedsaklig betyr det at man bruker hypertekst les; linker, skjemaer mm., for &amp;#xE5; kunne gj&amp;#xF8;re valg som man fikk i den forrige responsen fra serveren. Et &amp;#x201C;skjermbilde&amp;#x201D; p&amp;#xE5; en klient kan v&amp;#xE6;re bygd opp av MANGE ressurser. Hvordan klienten velger &amp;#xE5; vise frem ting er out-of-scope for serveren sin del. Serveren sin interaksjon slutter n&amp;#xE5;r den har levert fra seg responsen.\n
  • #33: Dette betyr at arkitekturen skal v&amp;#xE6;re slik at man kan sette noe man kaller en &amp;#x201C;intermediary&amp;#x201D; p&amp;#xE5; forskjellige deler i nettverket, slik at man feks kan redusere latens, feks med caching (kommer tilbake til det), DNS pre-lookup, Bildeskalering osv.\n
  • #34: Dette er annen viktig bit av REST. Hver klient som bruker REST b&amp;#xF8;r ha en form for klientcaching. Dette for &amp;#xE5; unng&amp;#xE5; &amp;#xE5; m&amp;#xE5;tte g&amp;#xE5; til serveren med hver eneste request. Serveren skal sende metadata som forteller hver komponent i nettverket om hvor lenge de kan cache den gjeldende responsen.\n
  • #35: Dette er typisk javascript. Dette er for &amp;#xE5; kunne servere generiske hypermedia formater, som kan igjen f&amp;#xE5; ny funksjonalitet.\nMan kan i teorien ogs&amp;#xE5; gi andre scriptspr&amp;#xE5;k basert p&amp;#xE5; hvilken klienttype man er; feks python script til python klienter, eller scalascript til Scala klienter. Dette er dog ikke mulig i dagens HTTP, da det mangler content negotiation p&amp;#xE5; &amp;#x201C;embedded ressurser&amp;#x201D;. Det er, dog, en interessant tanke.\n
  • #36: \n
  • #37: \n
  • #38: \n
  • #39: \n
  • #40: Dette er noen faktorer utviklet av Mike Amundsen, som har skrevet boken som jeg loddet ut i sta.\n
  • #41: \n
  • #42: \n
  • #43: Det er ogs&amp;#xE5; mulig &amp;#xE5; bruke REST med andre protokoller, men dette er den mest vanlige kombinasjonen. Hypermedia M&amp;#xC5; man ha for &amp;#xE5; kunne kalle det REST.\n
  • #44: \n
  • #45: \n
  • #46: Vi skal lage et system som er et register over Events, sesjoner, og kontakter. En Event har en dato, og navn. En session har et abstract + noe metadata. En kontakt er en person av et slag. En sesjon kan ha flere speakers, som er en &amp;#x201C;embedded&amp;#x201D; kontakt. Dersom det er noen javaBin folk her, s&amp;#xE5; vet de kanskje hvilket system det er :)\n
  • #47: Dette er et fors&amp;#xF8;k p&amp;#xE5; &amp;#xE5; vise sammenhengen mellom entitetene.\n
  • #48: Disse ressursene og navnene er viktige for en utvikler som skal implementere serveren. En klient skal aldri vite hvordan disse urlene skal konstrueres, med mindre man har blitt fortalt det av serveren (URL Templating). Der er flere ogs&amp;#xE5;, som kan kalles skjulte ressurser, men vi kommer tilbake til de etterhvert.\n
  • #49: Her finnes det veldig mange muligheter; Noen er mer restfulle enn andre. Jeg vil g&amp;#xE5; igjennom et utvalg her.\n
  • #50: Denne er jo ganske straight forward. Man skriver javaobjektene direkte til outputstream. Noen som kan fortelle meg hva som ikke er bra med dette? SerialVersionUUID +++ Det gj&amp;#xF8;r det veldig vanskelig &amp;#xE5; vedlikeholde server og klient p&amp;#xE5; forskjellige stadier, det gir kobling, noe som REST pr&amp;#xF8;ver &amp;#xE5; unng&amp;#xE5;. Hvilke av H-Factorene finnes i serialiserte javaobjekter? Ingen. I den f&amp;#xF8;rste versjonen av EMS som vi lagde gjorde vi nettopp dette; Dette f&amp;#xF8;rte til at vi m&amp;#xE5;tte fikse klientene hver gang vi la til et nytt felt i domenemodellen. Dette skalerer &amp;#xE5;penbart ikke n&amp;#xE5;r man f&amp;#xE5;r flere klienter, og sannsynligvis har man ikke kontroll p&amp;#xE5; de heller.\n
  • #51: Vi kan feks bruke JAXB eller XStream og serialisere domenemodellen v&amp;#xE5;r direkte? Hva gir dette oss? Hvordan er det med veldikeholdbarhet? Mange inkluderer &lt;atom:link&gt; i xml outputen, dette gj&amp;#xF8;r det litt bedre, men dersom dette fortsatt blir servert som application/xml s&amp;#xE5; kan jeg ikke ta noen beslutninger p&amp;#xE5; dette.\n
  • #52: \n
  • #53: En direkteserialisering til JSON er ogs&amp;#xE5; mulig; Hvilke HFaktorer innehoder JSON? Ingen. Hvordan kan vi da oppdage de operasjonene som er mulig &amp;#xE5; gj&amp;#xF8;re? vi kan ikke det uten sterk kjennskap til hvordan serveren serialiserer objektene. Dette er greit n&amp;#xE5;r man har full kontroll mellom server/klient, ikke s&amp;#xE5; greit n&amp;#xE5;r man skalerer over det.\n
  • #54: \n
  • #55: Dette er en farbar vei. N&amp;#xE5; kan vi bestemme n&amp;#xF8;yaktig hvordan dataformatet skal lages. Dette har jeg gjort flere ganger, og kan godt v&amp;#xE6;re en l&amp;#xF8;sning n&amp;#xE5;r man ikke finner noe som passer til det man skal gj&amp;#xF8;re. Lager man et eget format kan det hjelpe konsumenter, om man registrerer det med IANA (The internet assigned numbers authority).\n
  • #56: \n
  • #57: \n
  • #58: Dette er en ny mediatype laget av Mike Amundsen, som ogs&amp;#xE5; jeg har hjulpet til med &amp;#xE5; lage. Den ligner litt p&amp;#xE5; Atom i forhold til det meste er modellert i kontekst av collections + items. Denne har flere av HFaktorene, som blant annet er Templated queries, Embedded links, outgoing links og idempotent updates.\n
  • #59: \n
  • #60: Dette er en ganske vanlig m&amp;#xE5;te &amp;#xE5; kunne utrykke hypermedia. Her finnes flere av HFaktorene, noe som man kan se utfra siden til Mike. Atom er bygget for &amp;#xE5; v&amp;#xE6;re extensible, s&amp;#xE5; man kan gj&amp;#xF8;re mye med formatet dersom det ikke passer helt.\n
  • #61: \n
  • #62: Man kan ogs&amp;#xE5; bruke HTML for ogs&amp;#xE5; &amp;#xE5; utrykke data. Se gjerne referansene p&amp;#xE5; slutten av presentasjonen for &amp;#xE5; finne noen eksempler p&amp;#xE5; dette.\n
  • #63: Hvordan gj&amp;#xF8;r jeg ting med det jeg f&amp;#xE5;r tilbake? Hvordan vet jeg hvor jeg skal POSTe en ny sesjon? hvordan oppdaterer jeg?\n\nI Hovedsak h&amp;#xE5;per jeg at jeg har vist hvordan dette gj&amp;#xF8;res ved at man ser p&amp;#xE5; Hfaktorene for det gitte formatet man har.\n\nMan m&amp;#xE5; ogs&amp;#xE5; dokumentere hvordan man gj&amp;#xF8;r operasjoner, feks hvilke relasjonstyper som er tilgjengelige og hva disse betyr. Helst b&amp;#xF8;r man bruke de som allerede er registrert, link vil v&amp;#xE6;re i referansene. Eller om mediaformatet har et eget register, b&amp;#xF8;r man bruke det.\n
  • #64: Bruker man AtomPub s&amp;#xE5; har man mulighet til &amp;#xE5; gj&amp;#xF8;re det man gj&amp;#xF8;re en HTTP POST til den ressursen som er designert collection ressursen.\n\nI collection+json kan man bruke template som f&amp;#xF8;lger med en collection ressurs til &amp;#xE5; lage en ny.\n\nI HTML fyller man inn et skjema.\n
  • #65: F&amp;#xF8;rer til en HTTP PUT de fleste tilfeller\n\nI Atom: PUT av ressursen som er markert som &amp;#x201C;edit&amp;#x201D;.\n\nI Collection+json: Transformer &amp;#x201C;data&amp;#x201D; til en template og PUT den tilbake\n\nI HTML: Enten code-on-demand for PUT st&amp;#xF8;tte, eller et annet skjema med HTTP POST\n\nStatuskoder er typisk: 204 No Content eller 200 OK med full body og en Content-Location med samme href. Dette gj&amp;#xF8;r man for at cacher skal oppf&amp;#xF8;re seg korrekt.\n
  • #66: Dette er en interessant greie:\n * Man kan gj&amp;#xF8;re dete ved HTTP PUT til en sub-resource av den tingen man oppdaterer. Dette er et problem for caching, pga en vet ikke hvilke ressurser som skal invalideres. Kan l&amp;#xF8;ses ved kort cache-tid + validering eller ved at man bruker cache-channels.\n\n* Man kan bruke HTTP Patch.\nMan kan detektere at en ressurs st&amp;#xF8;tter partial updates ved at man ser p&amp;#xE5; &amp;#x201C;Accept-Patch:&amp;#x201D; conneg headeren. Dersom denne finnes, s&amp;#xE5; kan systemet gj&amp;#xF8;re partial updates. Jeg vet desverre ikke om noen mediatyper som i dag st&amp;#xF8;tter partial-updates.\n
  • #67: HTTP DELETE st&amp;#xF8;tte finnes ikke i alle formater\n\nI Atom vil det v&amp;#xE6;re det samme som for PUT. HTTP DELETE for ressursen som er markert som &amp;#x201C;edit&amp;#x201D;.\n\nI Collection+json, HTTP DELETE til &amp;#x201C;href&amp;#x201D; i en Item\n\nI HTML: her m&amp;#xE5; man bruke HTTP POST i en form, eller HTTP DELETE via code-on-demand\n\nStatuskoder er viktige. Man kan f&amp;#xE5; tilbake 204 No Content p&amp;#xE5; f&amp;#xF8;rste, eller 404 om den ikke finnes. Man kan ogs&amp;#xE5; f&amp;#xE5; 410 GONE om man allerede har slettet.\n
  • #68: S&amp;#xF8;k er en interessant greie, der finnes noen kandidater her ogs&amp;#xE5;:\n\n - Opensearch + Atom|RSS2.0\n - HTML get forms + HTML resultat\n - Collection+JSON Querys\n
  • #69: N&amp;#xE5;r en sesjon er godkjent av programkomiteen skal denne publiseres.\nDette kan man gj&amp;#xF8;re ved enten:\n * Partial update p&amp;#xE5; published.\n * Lagre sesjonen p&amp;#xE5; nytt med &amp;#x201C;published&amp;#x201D; flagget satt.\n * en egen publiseringstjeneste:\n ** en eller flere URLer som skal publiseres.\n *** POST en text/url-list med alle som skal publiseres\n *** denne tjenesten m&amp;#xE5; oppdages. feks via en link med rel=&amp;#x201D;publish&amp;#x201D;\n ** HTML form med et enkelt tekstarea hvor man fyller inn en linje pr url.\n\n
  • #70: S&amp;#xE5; var det denne. Her finnes det ganske mange forskjellige l&amp;#xF8;sninger. De fleste er ganske greie &amp;#xE5; ha med &amp;#xE5; gj&amp;#xF8;re.\n
  • #71: Dette er iogforseg greit nok. Problemet er her at man sender passordet over tr&amp;#xE5;den noe som aldri er bra.\n
  • #72: Dette er mye sikrere enn HTTP basic.\n
  • #73: Her har man forskjellige protokoller:\nDe st&amp;#xF8;rste er:\n * OAuth\n * OpenID\n
  • #74: En veldig spennende spec som utvikles av W3C for &amp;#xF8;yeblikket.\nBasert p&amp;#xE5; PKI og RDF; Les FOAF (friend of a friend)\n
  • #75: En interessant spec fra Mozilla labs.\n
  • #76: En ganske interessant greie som Google har laget. Krever Google konto + SSL\n
  • #77: Dette er det veldig mange som gj&amp;#xF8;r. Det er desverre de skjelden bygger p&amp;#xE5; WWW-Authenticate med venner. Pr&amp;#xF8;v &amp;#xE5; unng&amp;#xE5; dette.\n
  • #78: Et sitat hentet fra http-auth mailinglisten. Jeg har en mistanke om at det er en sp&amp;#xF8;k ;)\n
  • #79: G&amp;#xE5;r typisk under &amp;#x201C;roll-your-own&amp;#x201D;. Det er dog efforts fra IETF for &amp;#xE5; fikse opp i dette. Det g&amp;#xE5;r kanskje an &amp;#xE5; l&amp;#xE6;re noe fra \n
  • #80: \n
  • #81: \n