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)

KEY
Linked data: spreading data over the web
shellac
 
PDF
Real World REST with Atom/AtomPub
Peter Keane
 
PPTX
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Atlassian
 
PDF
Rest web services
Paulo Gandra de Sousa
 
PDF
Web Services
Katrien Verbert
 
PPT
Semantic Web, an introduction for bioscientists
Emanuele Della Valle
 
PDF
An Introduction to Tornado
Gavin Roy
 
PDF
Making Java REST with JAX-RS 2.0
Dmytro Chyzhykov
 
PDF
REST Introduction (PHP London)
Paul James
 
PPT
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
Crossref
 
PDF
Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...
ruyalarcon
 
PPTX
CrossRef Technical Basics 2010 CrossRef Workshops
Crossref
 
PPTX
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
Pat Patterson
 
PDF
Using Document Databases with TYPO3 Flow
Karsten Dambekalns
 
PPTX
Application integration with the W3C Linked Data standards
Nandana Mihindukulasooriya
 
PDF
Opening up the Social Web - Standards that are bridging the Islands
Bastian Hofmann
 
PDF
E2 appspresso hands on lab
NAVER D2
 
PDF
E3 appspresso hands on lab
NAVER D2
 
PDF
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Lucidworks
 
PDF
JLeRN Paradata Challenge at Dev8D 2012
Bharti Gupta
 
Linked data: spreading data over the web
shellac
 
Real World REST with Atom/AtomPub
Peter Keane
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Atlassian
 
Rest web services
Paulo Gandra de Sousa
 
Web Services
Katrien Verbert
 
Semantic Web, an introduction for bioscientists
Emanuele Della Valle
 
An Introduction to Tornado
Gavin Roy
 
Making Java REST with JAX-RS 2.0
Dmytro Chyzhykov
 
REST Introduction (PHP London)
Paul James
 
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
Crossref
 
Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...
ruyalarcon
 
CrossRef Technical Basics 2010 CrossRef Workshops
Crossref
 
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
Pat Patterson
 
Using Document Databases with TYPO3 Flow
Karsten Dambekalns
 
Application integration with the W3C Linked Data standards
Nandana Mihindukulasooriya
 
Opening up the Social Web - Standards that are bridging the Islands
Bastian Hofmann
 
E2 appspresso hands on lab
NAVER D2
 
E3 appspresso hands on lab
NAVER D2
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Lucidworks
 
JLeRN Paradata Challenge at Dev8D 2012
Bharti Gupta
 
Ad

Recently uploaded (20)

PDF
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
PDF
Doc9.....................................
SofiaCollazos
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PPTX
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
Doc9.....................................
SofiaCollazos
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 

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