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
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

What's hot

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

What's hot (7)

Data Exploration with Elasticsearch
Data Exploration with ElasticsearchData Exploration with Elasticsearch
Data Exploration with Elasticsearch
 
Chris Gutteridge: RDF Crash Course
Chris Gutteridge: RDF Crash CourseChris Gutteridge: RDF Crash Course
Chris Gutteridge: RDF Crash Course
 
SmartData Webinar Slides JSON-LD
SmartData Webinar Slides JSON-LD SmartData Webinar Slides JSON-LD
SmartData Webinar Slides JSON-LD
 
Fun with Python
Fun with PythonFun with Python
Fun with Python
 
[2B1]검색엔진의 패러다임 전환
[2B1]검색엔진의 패러다임 전환[2B1]검색엔진의 패러다임 전환
[2B1]검색엔진의 패러다임 전환
 
Sustainable livelihood-framework-sr-presentation
Sustainable livelihood-framework-sr-presentationSustainable livelihood-framework-sr-presentation
Sustainable livelihood-framework-sr-presentation
 
Preserving the scholarly record with WebCite (www.webcitation.org): an archiv...
Preserving the scholarly record with WebCite (www.webcitation.org): an archiv...Preserving the scholarly record with WebCite (www.webcitation.org): an archiv...
Preserving the scholarly record with WebCite (www.webcitation.org): an archiv...
 

Similar to REST teori og praksis; REST in theory and practice

Linked data: spreading data over the web
Linked data: spreading data over the webLinked data: spreading data over the web
Linked data: spreading data over the webshellac
 
Real World REST with Atom/AtomPub
Real World REST with Atom/AtomPubReal World REST with Atom/AtomPub
Real World REST with Atom/AtomPubPeter Keane
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Atlassian
 
Rest web services
Rest web servicesRest web services
Rest web services
Paulo Gandra de Sousa
 
Semantic Web, an introduction for bioscientists
Semantic Web, an introduction for bioscientistsSemantic Web, an introduction for bioscientists
Semantic Web, an introduction for bioscientistsEmanuele Della Valle
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to TornadoGavin Roy
 
Making Java REST with JAX-RS 2.0
Making Java REST with JAX-RS 2.0Making Java REST with JAX-RS 2.0
Making Java REST with JAX-RS 2.0
Dmytro Chyzhykov
 
REST Introduction (PHP London)
REST Introduction (PHP London)REST Introduction (PHP London)
REST Introduction (PHP London)
Paul James
 
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
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...
Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...
Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...
ruyalarcon
 
CrossRef Technical Basics 2010 CrossRef Workshops
CrossRef Technical Basics 2010 CrossRef WorkshopsCrossRef Technical Basics 2010 CrossRef Workshops
CrossRef Technical Basics 2010 CrossRef WorkshopsCrossref
 
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
Pat Patterson
 
Using Document Databases with TYPO3 Flow
Using Document Databases with TYPO3 FlowUsing Document Databases with TYPO3 Flow
Using Document Databases with TYPO3 Flow
Karsten Dambekalns
 
Application integration with the W3C Linked Data standards
Application integration with the W3C Linked Data standardsApplication integration with the W3C Linked Data standards
Application integration with the W3C Linked Data standards
Nandana Mihindukulasooriya
 
Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the IslandsOpening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands
Bastian Hofmann
 
E2 appspresso hands on lab
E2 appspresso hands on labE2 appspresso hands on lab
E2 appspresso hands on labNAVER D2
 
E3 appspresso hands on lab
E3 appspresso hands on labE3 appspresso hands on lab
E3 appspresso hands on labNAVER D2
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Lucidworks
 
JLeRN Paradata Challenge at Dev8D 2012
JLeRN Paradata Challenge at Dev8D 2012JLeRN Paradata Challenge at Dev8D 2012
JLeRN Paradata Challenge at Dev8D 2012Bharti Gupta
 

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

Linked data: spreading data over the web
Linked data: spreading data over the webLinked data: spreading data over the web
Linked data: spreading data over the web
 
Real World REST with Atom/AtomPub
Real World REST with Atom/AtomPubReal World REST with Atom/AtomPub
Real World REST with Atom/AtomPub
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
 
Rest web services
Rest web servicesRest web services
Rest web services
 
Web Services
Web ServicesWeb Services
Web Services
 
Semantic Web, an introduction for bioscientists
Semantic Web, an introduction for bioscientistsSemantic Web, an introduction for bioscientists
Semantic Web, an introduction for bioscientists
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
 
Making Java REST with JAX-RS 2.0
Making Java REST with JAX-RS 2.0Making Java REST with JAX-RS 2.0
Making Java REST with JAX-RS 2.0
 
REST Introduction (PHP London)
REST Introduction (PHP London)REST Introduction (PHP London)
REST Introduction (PHP London)
 
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
 
Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...
Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...
Fulfilling the Hypermedia Constraint via HTTP OPTIONS, The HTTP Vocabulary In...
 
CrossRef Technical Basics 2010 CrossRef Workshops
CrossRef Technical Basics 2010 CrossRef WorkshopsCrossRef Technical Basics 2010 CrossRef Workshops
CrossRef Technical Basics 2010 CrossRef Workshops
 
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)
 
Using Document Databases with TYPO3 Flow
Using Document Databases with TYPO3 FlowUsing Document Databases with TYPO3 Flow
Using Document Databases with TYPO3 Flow
 
Application integration with the W3C Linked Data standards
Application integration with the W3C Linked Data standardsApplication integration with the W3C Linked Data standards
Application integration with the W3C Linked Data standards
 
Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the IslandsOpening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands
 
E2 appspresso hands on lab
E2 appspresso hands on labE2 appspresso hands on lab
E2 appspresso hands on lab
 
E3 appspresso hands on lab
E3 appspresso hands on labE3 appspresso hands on lab
E3 appspresso hands on lab
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
 
JLeRN Paradata Challenge at Dev8D 2012
JLeRN Paradata Challenge at Dev8D 2012JLeRN Paradata Challenge at Dev8D 2012
JLeRN Paradata Challenge at Dev8D 2012
 

Recently uploaded

Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 

Recently uploaded (20)

Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 

REST teori og praksis; REST in theory and practice

Editor's Notes

  1. \n
  2. 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
  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. \n
  5. 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
  6. 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
  7. 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
  8. 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
  9. Det unforme interfacet er bygget opp i flere deler, jeg vil g&amp;#xE5; igjennom de hver for seg.\n
  10. 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
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. En representasjon er alt som blir servert i bodyen til en melding.\n
  21. HTML. Rendert. &lt;click&gt; Eller amazon kunne vel sett slik ut? ehm, kanskje ikke helt, men dere ser poenget.\n
  22. HTML. Rendert. &lt;click&gt; Eller amazon kunne vel sett slik ut? ehm, kanskje ikke helt, men dere ser poenget.\n
  23. Dette er et Atom feed som dere sikkert ser.\n
  24. Dette er et format som heter collection+json, jeg kommer tilbake til dette senere.\n
  25. 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
  26. 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
  27. 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
  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 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
  33. 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
  34. 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
  35. \n
  36. \n
  37. \n
  38. \n
  39. Dette er noen faktorer utviklet av Mike Amundsen, som har skrevet boken som jeg loddet ut i sta.\n
  40. \n
  41. \n
  42. 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
  43. \n
  44. \n
  45. 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
  46. Dette er et fors&amp;#xF8;k p&amp;#xE5; &amp;#xE5; vise sammenhengen mellom entitetene.\n
  47. 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
  48. Her finnes det veldig mange muligheter; Noen er mer restfulle enn andre. Jeg vil g&amp;#xE5; igjennom et utvalg her.\n
  49. 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
  50. 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
  51. \n
  52. 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
  53. \n
  54. 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
  55. \n
  56. \n
  57. 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
  58. \n
  59. 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
  60. \n
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. Dette er iogforseg greit nok. Problemet er her at man sender passordet over tr&amp;#xE5;den noe som aldri er bra.\n
  71. Dette er mye sikrere enn HTTP basic.\n
  72. Her har man forskjellige protokoller:\nDe st&amp;#xF8;rste er:\n * OAuth\n * OpenID\n
  73. 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
  74. En interessant spec fra Mozilla labs.\n
  75. En ganske interessant greie som Google har laget. Krever Google konto + SSL\n
  76. 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
  77. Et sitat hentet fra http-auth mailinglisten. Jeg har en mistanke om at det er en sp&amp;#xF8;k ;)\n
  78. 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
  79. \n
  80. \n