SlideShare uma empresa Scribd logo
1 de 61
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




              Pragmatic REST
              Building RESTful Web APIs

              Subbu Allamaraju
              Yahoo! Inc || http://subbu.org




Subbu Allamaraju – Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                About
   Tech Yahoo!
          Developing standards, patterns and
           practices for HTTP web APIs
   Past
          At BEA
   A “Convert”



Subbu Allamaraju — Pragmatic REST                                       Slide 2
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Disclaimer



  All the opinions I express here are mine
  and do not necessarily represent those
       of my present or past employers.




Subbu Allamaraju — Pragmatic REST                                            3
Colorado Software Summit: October 19 – 24, 2008           © Copyright 2008, Yahoo! Inc.




                Agenda

                                REST – The Architecture


                       REST vs WS – Pros and Cons


                       Building HTTP APIs RESTfully


Subbu Allamaraju — Pragmatic REST                                                    4
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Smell Test

       “We offer SOAP and REST end points”


  “Our technology supports REST-style URLs”


             “REST is not fit for machine-machine
                          interactions”

Subbu Allamaraju — Pragmatic REST                                            5
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




       QUIZ




Subbu Allamaraju — Pragmatic REST                                            6
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Are these RESTful?
    http://example.org/persons?start=10&count=100
    http://example.org/person/123.xml
    http://example.org/person/123/address/4
    http://example.org/movie/Gone_With_the_Wind
    http://example.org/movie/Terminator/reviews




Subbu Allamaraju — Pragmatic REST                                       Slide 7
Colorado Software Summit: October 19 – 24, 2008     © Copyright 2008, Yahoo! Inc.




                Is this RESTful?
    GET /services/rest/? 
       method=flickr.photos.setPerms&photo_id=2691065403&
       is_public=1&is_friend=0&is_family=0&perm_comment=1&
       perm_addmeta=1 HTTP/1.1
    Host: example.org


    HTTP/1.1 200 OK
    Content-Type: application/xml;charset=UTF-8

    <rsp stat=quot;okquot;>
      <photoid>2691065403</photoid>
    </rsp>




Subbu Allamaraju — Pragmatic REST                                         Slide 8
Colorado Software Summit: October 19 – 24, 2008     © Copyright 2008, Yahoo! Inc.




                Is this RESTful?
    POST /services/rest/? 
       method=flickr.photos.getRecent&api_key=… HTTP/1.1
    Host: example.org

    HTTP/1.1 200 OK
    Content-Type: application/xml;charset=UTF-8

    <rsp stat=quot;okquot;>
      <photos page=quot;1quot; pages=quot;10quot; perpage=quot;100”>
        <photo id=quot;2947640330quot; owner=quot;15150729@N07”
               secret=quot;…quot; server=quot;3060quot; farm=quot;4quot; title=quot;…quot;
               ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; />
        …
      </photos>
    </rsp>



Subbu Allamaraju — Pragmatic REST                                         Slide 9
Colorado Software Summit: October 19 – 24, 2008     © Copyright 2008, Yahoo! Inc.




                Is this RESTful?
    GET /photos?filterBy=recent HTTP/1.1
    Host: example.org

    HTTP/1.1 200 OK
    Content-Type: application/xml;charset=UTF-8

    <rsp stat=quot;okquot;>
      <photos page=quot;1quot; pages=quot;10quot; perpage=quot;100 
              total=quot;1000”>
        <photo id=quot;2947640330quot; owner=quot;15150729@N07”
               secret=quot;…quot; server=quot;3060quot; farm=quot;4quot; title=quot;…quot;
               ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; />
        …

      </photos>
    </rsp>


Subbu Allamaraju — Pragmatic REST                                        Slide 10
Colorado Software Summit: October 19 – 24, 2008    © Copyright 2008, Yahoo! Inc.




                Is this RESTful?
    GET /photos?filterBy=recent&api_key=blah
    Host: example.org


    200 OK
    Content-Type: application/xml;charset=UTF-8

    <rsp stat=”failquot;>
      <err code=quot;96quot; msg=quot;Invalid signaturequot;/>
    </rsp>




Subbu Allamaraju — Pragmatic REST                                       Slide 11
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




       REST




Subbu Allamaraju — Pragmatic REST                                           12
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




 REST is defined by four interface constraints:
  identification of resources; manipulation of
  resources through representations; self-
  descriptive messages; hypermedia as the engine of
  application state.
                                - Roy Fielding, 2000


Subbu Allamaraju — Pragmatic REST                                      Slide 13
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                In other words
 1.  Resources and URIs
 2.  Representations
 3.  Uniform interface
 4.  HATEOAS




Subbu Allamaraju — Pragmatic REST                                      Slide 14
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                But no
   Schemas
   Description languages
   Code generation
   Registries




Subbu Allamaraju — Pragmatic REST                                      Slide 15
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




       REST/HTTP EXPLAINED




Subbu Allamaraju — Pragmatic REST                                           16
Colorado Software Summit: October 19 – 24, 2008       © Copyright 2008, Yahoo! Inc.




                Tenet 1: Resources
   A thing with an identity
          A blog entry, a person, a friend, an address
   Resources are named via URIs
          http://example.org/blog/what-is-rest
          http://example.org/person/subbu
          http://example.org/person/subbu/friends
          http://example.org/person/subbu/address/home
   URIs are stable
          URIs are names
          Names don’t change often


                                                                            17

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Identifying Resources
   We will come back to this later




                                                                        18

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008                         © Copyright 2008, Yahoo! Inc.




                Assigning URIs
                                                           Think primary keys


 A person                             http://example.org/person/123
 An address of a                      http://example.org/person/123/address/4
 person
 A movie                              http://example.org/movie/Gone_With_the_Wind
 Reviews of a                         http://example.org/movie/Terminator/reviews
 movie
 A group of                           http://example.org/persons?start=10&count=100
 people




Subbu Allamaraju — Pragmatic REST                                                            Slide 19
Colorado Software Summit: October 19 – 24, 2008                    © Copyright 2008, Yahoo! Inc.




                URIS are Generally Opaque
                                           Clean URIs don’t generally matter


    http://example.org/76asfg2g



         Okay as long as clients don’t have to
              parse and understand these

    URI Opacity - We will come back to this
                      later

Subbu Allamaraju — Pragmatic REST                                                       Slide 20
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                URI Design Considerations
                     Opaque to client apps –
                 Transparent to client developers

 Hierarchical path segments
         A good way to organize resources


         http://example.org/movie/Terminator/
          reviews

                                                                        21

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008                                 © Copyright 2008, Yahoo! Inc.




                URI Considerations
 Reserve query params for optional inputs
                                       (A convention, not a rule)

    http://example.org/movies

                  
findBy                         
 {latest,director,studio}
                   fromYear                        
Year
                   toYear                           Year
                   location                         Postal code, or city
                   …




                                                                                                      22

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008                       © Copyright 2008, Yahoo! Inc.




                Tenet 2: Representations
    Things sent over requests and received
                 over responses

                                    An XML representation of a book
                                                                  

                                     A PNG representation of a map
                                                                 

         Data submitted through an HTML form to create a user
                                                            

                      A JSON representation of the user created
                                                              

                                     An HTML view of the same user
                                                                 



                                                                                            23

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008                   © Copyright 2008, Yahoo! Inc.




                Media Types
             Like the “type” of an object
        Like the “schema” of an XML element
                 An XML representation of a book: application/
                              vnd.example.book+xml
                                                 

                       A PNG representation of a map: image/png
                                                              

     HTML form submission: application/x-www-form-urlencoded
                                                           

     A JSON representation of the user created: application/
                      vnd.example.user+json
                                          

                       An HTML view of the same user: text/html
                                                              

                                                                                        24

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008             © Copyright 2008, Yahoo! Inc.




                Representations are Negotiable
    Accept: application/atom+xml;q=1.0,text/html;q=0.1
    Accept-Charset: UTF-8

                  
Content-Type: application/atom+xml;charset=UTF-8


    Accept-Language: fr;q=1.0,en=0.8

                  
Content-Language: en


    Accept-Encoding: gzip,deflate

                  
Content-Encoding: deflate



                                                                                  25

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008             © Copyright 2008, Yahoo! Inc.




                Varying a Response
                                                  Don’t overload URIs
     Tell intermediaries and clients how you
               chose a representation
    Accept: application/atom+xml;q=1.0,text/htm;q=0.1
    Accept-Charset: UTF-8
    Accept-Language: fr;q=1.0,en=0.8
    Accept-Encoding: gzip,deflate


                  
Content-Type: application/atom+xml;charset=UTF-8
                  
Content-Encoding: deflate
                  
Vary: Accept,Accept-Encoding




Subbu Allamaraju — Pragmatic REST                                                Slide 26
Colorado Software Summit: October 19 – 24, 2008               © Copyright 2008, Yahoo! Inc.




                Tenet 3 – Uniform Interface
                                                  Network transparency
   A uniform interface to operate on
    resources
   Uniform interface == A fixed set of
    operations
   Uniform interface == Generic interface
          Irrespective of what resource is being
           operated on



                                                                                    27

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008                                    © Copyright 2008, Yahoo! Inc.




                HTTP is a Uniform Interface
                                                                                            CRUD

      A protocol between clients and resources

                 GET                              •  Get a representation
                                                  •  Safe and idempotent


              POST                                •  Like a factory operation
                                                  •  Unsafe and non-idempotent


                  PUT                             •  Create or update a resource
                                                  •  Unsafe but idempotent


         DELETE                                   •  Delete a resource
                                                  •  Unsafe but idempotent



Subbu Allamaraju — Pragmatic REST                                                                       Slide 28
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                A Generic Application Protocol
   CRUD on resources
   Content negotiation
   Caching
   Optimistic concurrency




                                                                        29

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Is CRUD Crude?
   Yes, may be – depends on how you
    identify resources




                                                                        30

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008           © Copyright 2008, Yahoo! Inc.




                Domain Nouns
                                                  Obvious Approach
   Nouns in your application domain
   NYT Movie Reviews API
          Movies, Reviews, Critics, Critic’s picks,
           Reviews by reviewer
   Netflix API
          Catalog, Users, Rentals, Rental History,
           Rental Queue, Reviews, Recommendations
           etc.


Subbu Allamaraju — Pragmatic REST                                              Slide 31
Colorado Software Summit: October 19 – 24, 2008                     © Copyright 2008, Yahoo! Inc.




                Composites
                                                  Listen to Client Developers

                 A map with traffic directions + weather
                     alerts + and construction data
                A user profile with 5 contacts + favorite
                       colors + 10 latest updates


   A group of other resources
   Generally read-only

Subbu Allamaraju — Pragmatic REST                                                        Slide 32
Colorado Software Summit: October 19 – 24, 2008                        © Copyright 2008, Yahoo! Inc.




                Tasks and Processes
                                                                 Clear the CRUD

                                      Transfer $100 from A to B
                                 An order processing workflow
                                                  Hiring an employee

   Spawn several resources and have
    their own lifecycle



Subbu Allamaraju — Pragmatic REST                                                           Slide 33
Colorado Software Summit: October 19 – 24, 2008                     © Copyright 2008, Yahoo! Inc.




                Finding Resources



                                                  Domain   Compo-
                                                  Nouns     sites



                                                      Tasks &
                                                     Processes


Subbu Allamaraju — Pragmatic REST                                                        Slide 34
Colorado Software Summit: October 19 – 24, 2008                © Copyright 2008, Yahoo! Inc.




                HTTP Caching
   GET /photo/2691065403/comments
                       200 OK
                       Last-Modified: Thu, 24 Jul 2008 16:25:14 GMT
                       ETag: 584219-2bb-80758e80
 For DB stored data,
                       Cache-Control: max-age=300
 maintain version IDs
                                                    and time stamps

    GET /photo/2691065403/comments
    If-Modified-Since: Thu, 24 Jul 2008 16:25:14 GMT
                                                   
    If-None-Match: 584219-2bb-80758e80

                        304 Not Modified




Subbu Allamaraju — Pragmatic REST                                                   Slide 35
Colorado Software Summit: October 19 – 24, 2008                     © Copyright 2008, Yahoo! Inc.




                Optimistic Concurrency
   GET /photo/2691065403/comment/1

                                200 OK
                                Last-Modified: Thu, 24 Jul 2008 16:25:14 GMT
                                ETag: 584219-2bb-80758e80
                                Cache-Control: max-age=300




    PUT /photo/2691065403/comment/1
    If-Unmodified-Since: Thu, 24 Jul 2008 16:25:14 GMT
    If-Match: 584219-2bb-80758e80

                                412 Precondition Failed




Subbu Allamaraju — Pragmatic REST                                                        Slide 36
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Tenet 4: HATEOAS




            “Hypermedia as the engine of application
                             state”




Subbu Allamaraju — Pragmatic REST                                      Slide 37
Colorado Software Summit: October 19 – 24, 2008    © Copyright 2008, Yahoo! Inc.




                Web APIs without Hypermedia
                                                  POXy REST
   All URIs prepublished
   Clients solely rely on documentation
   Clients create URIs from scratch
   Representations are like POJOs




Subbu Allamaraju — Pragmatic REST                                       Slide 38
Colorado Software Summit: October 19 – 24, 2008               © Copyright 2008, Yahoo! Inc.




                Hypermedia for Web APIs
    <account>
        <link href=quot;http://example.org/transaction/1quot;
               rel=quot;self”/>
        <link href=quot;http://example.org/account/1/historyquot;
               rel=quot;http://example.org/rels/historyquot;/>
        <link href=quot;http://example.org/customer/aZff13quot;
               rel=quot;http://example.org/rels/customerquot;/>
        …           
    </account>

       http://tools.ietf.org/id/draft-nottingham-http-link-
       header-02.txt for a consolidated list of well-known
       relations.

       Or define your own.


Subbu Allamaraju — Pragmatic REST                                                  Slide 39
Colorado Software Summit: October 19 – 24, 2008          © Copyright 2008, Yahoo! Inc.




                Hypermedia for Web APIs
              Representations reflect app state
    <customer>
        <link href=quot;http://example.org/customer/aZff13quot;
              rel=quot;self”/>
        <link href=quot;http://example.org/invite?z09sa3kquot;
              rel=quot;http://example.org/rels/verifyquot;/>
        …
    </profile>
                             e.g. a one time
                                                  link




Subbu Allamaraju — Pragmatic REST                                             Slide 40
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                HATEOAS – Consequences
   URIs are given to clients
          Or clients use known algorithms, or URI
           templates
          Don’t have to prepublish all URIs
   URIs can be context and state sensitive
   URIs remain opaque
          Less coupling



Subbu Allamaraju — Pragmatic REST                                      Slide 41
Colorado Software Summit: October 19 – 24, 2008     © Copyright 2008, Yahoo! Inc.




                URI Templates
         Use when client needs to supply inputs


    A URI to fetch all movies with title containing a
    keyword:

    http://example.org/movies?contains={keyword}




Subbu Allamaraju — Pragmatic REST                                        Slide 42
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Describing Web APIs



    Hypermedia and media types to reduce
      the need for description languages
                such as WADL




                                                                        43

Subbu Allamaraju — Pragmatic REST
Colorado Software Summit: October 19 – 24, 2008                        © Copyright 2008, Yahoo! Inc.




                Describing Web APIs
                                                              No silver bullet


             Publish a few root level URIs


                      OPTIONS to discover verbs


                              Media type specifications


                                       Links with known relations to
                                       discover new contextual URIs


Subbu Allamaraju — Pragmatic REST                                                           Slide 44
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




       EXAMPLE: ACCOUNT
       TRANSFER




Subbu Allamaraju — Pragmatic REST                                           45
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Account Transfer



      A client app would like to transfer $100 from one
                   bank account to another.
                                          




Subbu Allamaraju — Pragmatic REST                                      Slide 46
Colorado Software Summit: October 19 – 24, 2008                         © Copyright 2008, Yahoo! Inc.




                Resources and URIs
                                                  Perhaps upon authentication or
                                                  through a previous search


    Bank account: http://example.org/account/{id}

    Transfers collection: http://example.org/transfers

    Account transfer: http://example.org/transfer/{id}
    Status: http://example.org/status/{…}
                                                             Prepublished, or linked
                                                             from an account
        Link returned upon                                   representation
        account transfer


                                How do client apps find these URIs?

Subbu Allamaraju — Pragmatic REST                                                            Slide 47
Colorado Software Summit: October 19 – 24, 2008                      © Copyright 2008, Yahoo! Inc.




                Representations



    application/vnd.example.account+xml
    application/vnd.example.transfer+xml
    application/vnd.example.status+xml




                                          Describe each media type




Subbu Allamaraju — Pragmatic REST                                                         Slide 48
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Link Relations

    quot;selfquot;: To self-link to each resource
    quot;editquot;: Link to create a new transfer request 
    quot;http://example.org/rels/sourcequot;: Source
    quot;http://example.org/rels/targetquot;: Target
    quot;http://example.org/rels/statusquot;: Status




Subbu Allamaraju — Pragmatic REST                                      Slide 49
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Create a Transfer
  POST /transfers HTTP/1.1
  Host: example.org
  Content-Type: application/vnd.example.transfer+xml

  <transfer>
      <link href=quot;http://example.org/account/1quot;
            rel=quot;http://example.org/rels/sourcequot;/>
      <link href=quot;http://example.org/account/2quot;
            rel=quot;http://example.org/rels/targetquot;/>
      <currency>USD</currency>
      <amount>100.00</amount>
      <note>Testing transfer</note>
  </transfer>



Subbu Allamaraju — Pragmatic REST                                      Slide 50
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Response
  HTTP/1.1 201 Created
  Location: http://example.org/transfer/1
  Content-Type: application/vnd.example.transfer+xml

  <transfer>
      <link href=quot;http://example.org/transfer/1quot;
            rel=quot;self”/>
      <link href=quot;http://example.org/status/1?z09sa3kquot;
            rel=quot;http://example.org/rels/statusquot;/>
      <id>org:example:transfer:1</id>
      …
  </transfer>




Subbu Allamaraju — Pragmatic REST                                      Slide 51
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Get Status
  GET /status/1?z09sa3k HTTP/1.1
  Host: example.org


  HTTP/1.1 200 OK 
  <status>
      <link href=quot;http://example.org/status/1?z09sa3kquot;
             rel=”selfquot;/>
      <id>org:example:status:999</id>
      <text>…</text>
  </status>




Subbu Allamaraju — Pragmatic REST                                      Slide 52
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




       QUIZ - REVISIT




Subbu Allamaraju — Pragmatic REST                                           53
Colorado Software Summit: October 19 – 24, 2008                              © Copyright 2008, Yahoo! Inc.




                Are these RESTful?
    http://example.org/persons?start=10&count=100
    http://example.org/person/123.xml
    http://example.org/person/123/address/4
    http://example.org/movie/Gone_With_the_Wind
    http://example.org/movie/Terminator/reviews



                                                  There is nothing RESTful
                                                  or unRESTful.

                                                  These are just names of
                                                  resources.




Subbu Allamaraju — Pragmatic REST                                                                 Slide 54
Colorado Software Summit: October 19 – 24, 2008                        © Copyright 2008, Yahoo! Inc.




                Is this RESTful?
    GET /services/rest/? 
       method=flickr.photos.setPerms&photo_id=2691065403&
       is_public=1&is_friend=0&is_family=0&perm_comment=1&
       perm_addmeta=1 HTTP/1.1
    Host: example.org
       Using an unsafe
                                                  operation over GET

    HTTP/1.1 200 OK
         Use PUT
    Content-Type: text/xml; charset=utf-8

    <rsp stat=quot;okquot;>
      <photoid>2691065403</photoid>
    </rsp>




Subbu Allamaraju — Pragmatic REST                                                           Slide 55
Colorado Software Summit: October 19 – 24, 2008     © Copyright 2008, Yahoo! Inc.




                Is this RESTful?
    POST /services/rest/? 
       method=flickr.photos.getRecent&api_key=… HTTP/1.1
    Host: example.org
         Using GET and POST
         synonymously
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
         GET is idempotent and
    <rsp stat=quot;okquot;>
 not.
         safe. POST is
      <photos page=quot;1quot; pages=quot;10quot; perpage=quot;100”>
        <photo id=quot;2947640330quot; owner=quot;15150729@N07”
               secret=quot;…quot; server=quot;3060quot; farm=quot;4quot; title=quot;…quot;
               ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; />
        …
      </photos>
    </rsp>



Subbu Allamaraju — Pragmatic REST                                        Slide 56
Colorado Software Summit: October 19 – 24, 2008          © Copyright 2008, Yahoo! Inc.




                Is this RESTful?
    GET /photos?filterBy=recent HTTP/1.1
    Host: example.org

    HTTP/1.1 200 OK
                                   Use links – not internal
    Content-Type: application/xml;charset-UTF-8
                                   IDs
    <rsp stat=quot;okquot;>
      <photos page=quot;1quot; pages=quot;10quot; perpage=quot;100 
              total=quot;1000”>
        <photo id=quot;2947640330quot; owner=quot;15150729@N07”
               secret=quot;…quot; server=quot;3060quot; farm=quot;4quot; title=quot;…quot;
               ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; />
        …

      </photos>
    </rsp>


Subbu Allamaraju — Pragmatic REST                                             Slide 57
Colorado Software Summit: October 19 – 24, 2008    © Copyright 2008, Yahoo! Inc.




                Is this RESTful?
             Hiding errors from
    GET /photos?filterBy=recent&api_key=blah
             intermediaries and
    Host: example.org
             client infrastructure.

                         Use 4xx or 5xx codes
    200 OK
    Content-Type: application/xml;charset=UTF-8

    <rsp stat=”failquot;>
      <err code=quot;96quot; msg=quot;Invalid signaturequot;/>
    </rsp>




Subbu Allamaraju — Pragmatic REST                                       Slide 58
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




       CHALLENGES




Subbu Allamaraju — Pragmatic REST                                           59
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




                Key Challenges
   Modeling resources
          Not just as data, but linked and context
           aware
   Respecting the uniform interface
   Programming to hypermedia

   And occasional fights between “that
    one” and “the other one”.

Subbu Allamaraju — Pragmatic REST                                      Slide 60
Colorado Software Summit: October 19 – 24, 2008   © Copyright 2008, Yahoo! Inc.




       THANKS




Subbu Allamaraju — Pragmatic REST                                           61

Mais conteúdo relacionado

Semelhante a Pragmatic Rest

Have Some Rest Building Web2.0 Apps And Services
Have Some Rest   Building Web2.0 Apps And ServicesHave Some Rest   Building Web2.0 Apps And Services
Have Some Rest Building Web2.0 Apps And ServicesNenad Nikolic
 
Experiments in Data Portability 2
Experiments in Data Portability 2Experiments in Data Portability 2
Experiments in Data Portability 2Glenn Jones
 
Build and Deploy Robot Applications Easily (ROB302-R) - AWS re:Invent 2018
Build and Deploy Robot Applications Easily  (ROB302-R) - AWS re:Invent 2018Build and Deploy Robot Applications Easily  (ROB302-R) - AWS re:Invent 2018
Build and Deploy Robot Applications Easily (ROB302-R) - AWS re:Invent 2018Amazon Web Services
 
How OAuth and portable data can revolutionize your web app - Chris Messina
How OAuth and portable data can revolutionize your web app - Chris MessinaHow OAuth and portable data can revolutionize your web app - Chris Messina
How OAuth and portable data can revolutionize your web app - Chris MessinaCarsonified Team
 
Google G Data Reading And Writing Data On The Web
Google G Data Reading And Writing Data On The WebGoogle G Data Reading And Writing Data On The Web
Google G Data Reading And Writing Data On The WebQConLondon2008
 
Google G Data Reading And Writing Data On The Web 1
Google G Data Reading And Writing Data On The Web 1Google G Data Reading And Writing Data On The Web 1
Google G Data Reading And Writing Data On The Web 1QConLondon2008
 
At&T Interactive: The Many Facets Of Ruby
At&T Interactive: The Many Facets Of RubyAt&T Interactive: The Many Facets Of Ruby
At&T Interactive: The Many Facets Of RubyCoby Randquist
 
OpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
OpenAPI v.Next - Events, Alternative Schemas & the Road AheadOpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
OpenAPI v.Next - Events, Alternative Schemas & the Road AheadTed Epstein
 
Websites go Serverless | AWS Floor28
Websites go Serverless | AWS Floor28Websites go Serverless | AWS Floor28
Websites go Serverless | AWS Floor28Amazon Web Services
 
Websites go Serverless - Floor28
Websites go Serverless - Floor28Websites go Serverless - Floor28
Websites go Serverless - Floor28Boaz Ziniman
 
Neptune, the Graph Database | AWS Floor28
Neptune, the Graph Database | AWS Floor28Neptune, the Graph Database | AWS Floor28
Neptune, the Graph Database | AWS Floor28Amazon Web Services
 
REST Introduction (PHP London)
REST Introduction (PHP London)REST Introduction (PHP London)
REST Introduction (PHP London)Paul James
 
Ruby Support for AWS Lambda at Native Speed with Jets
Ruby Support for AWS Lambda at Native Speed with JetsRuby Support for AWS Lambda at Native Speed with Jets
Ruby Support for AWS Lambda at Native Speed with JetsTung Nguyen
 
Implementing Authorization
Implementing AuthorizationImplementing Authorization
Implementing AuthorizationTorin Sandall
 
OneSpring: 5 Myths of Rich Internet Applications
OneSpring:  5 Myths of Rich Internet ApplicationsOneSpring:  5 Myths of Rich Internet Applications
OneSpring: 5 Myths of Rich Internet ApplicationsOneSpring LLC
 
Talk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotTalk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotLuc Bors
 
Open source secret_sauce_apache_con_2010
Open source secret_sauce_apache_con_2010Open source secret_sauce_apache_con_2010
Open source secret_sauce_apache_con_2010Ted Husted
 
Search Engines and Flash: Secrets, Tricks, and Black Magic
Search Engines and Flash: Secrets, Tricks, and Black MagicSearch Engines and Flash: Secrets, Tricks, and Black Magic
Search Engines and Flash: Secrets, Tricks, and Black Magicguestb1f3a
 

Semelhante a Pragmatic Rest (20)

Have Some Rest Building Web2.0 Apps And Services
Have Some Rest   Building Web2.0 Apps And ServicesHave Some Rest   Building Web2.0 Apps And Services
Have Some Rest Building Web2.0 Apps And Services
 
Experiments in Data Portability 2
Experiments in Data Portability 2Experiments in Data Portability 2
Experiments in Data Portability 2
 
Build and Deploy Robot Applications Easily (ROB302-R) - AWS re:Invent 2018
Build and Deploy Robot Applications Easily  (ROB302-R) - AWS re:Invent 2018Build and Deploy Robot Applications Easily  (ROB302-R) - AWS re:Invent 2018
Build and Deploy Robot Applications Easily (ROB302-R) - AWS re:Invent 2018
 
OAuth FTW
OAuth FTWOAuth FTW
OAuth FTW
 
How OAuth and portable data can revolutionize your web app - Chris Messina
How OAuth and portable data can revolutionize your web app - Chris MessinaHow OAuth and portable data can revolutionize your web app - Chris Messina
How OAuth and portable data can revolutionize your web app - Chris Messina
 
Google G Data Reading And Writing Data On The Web
Google G Data Reading And Writing Data On The WebGoogle G Data Reading And Writing Data On The Web
Google G Data Reading And Writing Data On The Web
 
Google G Data Reading And Writing Data On The Web 1
Google G Data Reading And Writing Data On The Web 1Google G Data Reading And Writing Data On The Web 1
Google G Data Reading And Writing Data On The Web 1
 
At&T Interactive: The Many Facets Of Ruby
At&T Interactive: The Many Facets Of RubyAt&T Interactive: The Many Facets Of Ruby
At&T Interactive: The Many Facets Of Ruby
 
OpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
OpenAPI v.Next - Events, Alternative Schemas & the Road AheadOpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
OpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
 
Websites go Serverless | AWS Floor28
Websites go Serverless | AWS Floor28Websites go Serverless | AWS Floor28
Websites go Serverless | AWS Floor28
 
Websites go Serverless - Floor28
Websites go Serverless - Floor28Websites go Serverless - Floor28
Websites go Serverless - Floor28
 
Neptune, the Graph Database | AWS Floor28
Neptune, the Graph Database | AWS Floor28Neptune, the Graph Database | AWS Floor28
Neptune, the Graph Database | AWS Floor28
 
REST Introduction (PHP London)
REST Introduction (PHP London)REST Introduction (PHP London)
REST Introduction (PHP London)
 
Ruby Support for AWS Lambda at Native Speed with Jets
Ruby Support for AWS Lambda at Native Speed with JetsRuby Support for AWS Lambda at Native Speed with Jets
Ruby Support for AWS Lambda at Native Speed with Jets
 
Implementing Authorization
Implementing AuthorizationImplementing Authorization
Implementing Authorization
 
T5 Oli Aro
T5 Oli AroT5 Oli Aro
T5 Oli Aro
 
OneSpring: 5 Myths of Rich Internet Applications
OneSpring:  5 Myths of Rich Internet ApplicationsOneSpring:  5 Myths of Rich Internet Applications
OneSpring: 5 Myths of Rich Internet Applications
 
Talk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotTalk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular Chatbot
 
Open source secret_sauce_apache_con_2010
Open source secret_sauce_apache_con_2010Open source secret_sauce_apache_con_2010
Open source secret_sauce_apache_con_2010
 
Search Engines and Flash: Secrets, Tricks, and Black Magic
Search Engines and Flash: Secrets, Tricks, and Black MagicSearch Engines and Flash: Secrets, Tricks, and Black Magic
Search Engines and Flash: Secrets, Tricks, and Black Magic
 

Mais de Subbu Allamaraju

What Worked for Netflix May Not Work for You (OSCON-2018)
What Worked for Netflix May Not Work for You (OSCON-2018)What Worked for Netflix May Not Work for You (OSCON-2018)
What Worked for Netflix May Not Work for You (OSCON-2018)Subbu Allamaraju
 
Are We Ready for Serverless
Are We Ready for ServerlessAre We Ready for Serverless
Are We Ready for ServerlessSubbu Allamaraju
 
How to Sell Serverless to Your Colleagues
How to Sell Serverless to Your ColleaguesHow to Sell Serverless to Your Colleagues
How to Sell Serverless to Your ColleaguesSubbu Allamaraju
 
Turning Containers into Cattle
Turning Containers into CattleTurning Containers into Cattle
Turning Containers into CattleSubbu Allamaraju
 
Keystone at the Center of Our Universe
Keystone at the Center of Our UniverseKeystone at the Center of Our Universe
Keystone at the Center of Our UniverseSubbu Allamaraju
 
Journey and future of OpenStack eBay and PayPal
Journey and future of OpenStack eBay and PayPalJourney and future of OpenStack eBay and PayPal
Journey and future of OpenStack eBay and PayPalSubbu Allamaraju
 
Making Things Work Together
Making Things Work TogetherMaking Things Work Together
Making Things Work TogetherSubbu Allamaraju
 
ql.io: Consuming HTTP at Scale
ql.io: Consuming HTTP at Scale ql.io: Consuming HTTP at Scale
ql.io: Consuming HTTP at Scale Subbu Allamaraju
 

Mais de Subbu Allamaraju (16)

Five Rules
Five RulesFive Rules
Five Rules
 
Leading a Transformation
Leading a TransformationLeading a Transformation
Leading a Transformation
 
Taming the Rate of Change
Taming the Rate of ChangeTaming the Rate of Change
Taming the Rate of Change
 
What Worked for Netflix May Not Work for You (OSCON-2018)
What Worked for Netflix May Not Work for You (OSCON-2018)What Worked for Netflix May Not Work for You (OSCON-2018)
What Worked for Netflix May Not Work for You (OSCON-2018)
 
Are We Ready for Serverless
Are We Ready for ServerlessAre We Ready for Serverless
Are We Ready for Serverless
 
How to Sell Serverless to Your Colleagues
How to Sell Serverless to Your ColleaguesHow to Sell Serverless to Your Colleagues
How to Sell Serverless to Your Colleagues
 
Turning Containers into Cattle
Turning Containers into CattleTurning Containers into Cattle
Turning Containers into Cattle
 
Keystone at the Center of Our Universe
Keystone at the Center of Our UniverseKeystone at the Center of Our Universe
Keystone at the Center of Our Universe
 
Journey and future of OpenStack eBay and PayPal
Journey and future of OpenStack eBay and PayPalJourney and future of OpenStack eBay and PayPal
Journey and future of OpenStack eBay and PayPal
 
Engineering operations
Engineering operationsEngineering operations
Engineering operations
 
Open stack@ebay
Open stack@ebayOpen stack@ebay
Open stack@ebay
 
Making Things Work Together
Making Things Work TogetherMaking Things Work Together
Making Things Work Together
 
ql.io at NodePDX
ql.io at NodePDXql.io at NodePDX
ql.io at NodePDX
 
ql.io: Consuming HTTP at Scale
ql.io: Consuming HTTP at Scale ql.io: Consuming HTTP at Scale
ql.io: Consuming HTTP at Scale
 
Measuring REST
Measuring RESTMeasuring REST
Measuring REST
 
REST: Theory vs Practice
REST: Theory vs PracticeREST: Theory vs Practice
REST: Theory vs Practice
 

Último

Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 

Último (20)

Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 

Pragmatic Rest

  • 1. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Pragmatic REST Building RESTful Web APIs Subbu Allamaraju Yahoo! Inc || http://subbu.org Subbu Allamaraju – Pragmatic REST
  • 2. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. About   Tech Yahoo!  Developing standards, patterns and practices for HTTP web APIs   Past  At BEA   A “Convert” Subbu Allamaraju — Pragmatic REST Slide 2
  • 3. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Disclaimer All the opinions I express here are mine and do not necessarily represent those of my present or past employers. Subbu Allamaraju — Pragmatic REST 3
  • 4. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Agenda REST – The Architecture REST vs WS – Pros and Cons Building HTTP APIs RESTfully Subbu Allamaraju — Pragmatic REST 4
  • 5. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Smell Test “We offer SOAP and REST end points” “Our technology supports REST-style URLs” “REST is not fit for machine-machine interactions” Subbu Allamaraju — Pragmatic REST 5
  • 6. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. QUIZ Subbu Allamaraju — Pragmatic REST 6
  • 7. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Are these RESTful? http://example.org/persons?start=10&count=100 http://example.org/person/123.xml http://example.org/person/123/address/4 http://example.org/movie/Gone_With_the_Wind http://example.org/movie/Terminator/reviews Subbu Allamaraju — Pragmatic REST Slide 7
  • 8. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is this RESTful? GET /services/rest/? method=flickr.photos.setPerms&photo_id=2691065403& is_public=1&is_friend=0&is_family=0&perm_comment=1& perm_addmeta=1 HTTP/1.1 Host: example.org HTTP/1.1 200 OK Content-Type: application/xml;charset=UTF-8 <rsp stat=quot;okquot;> <photoid>2691065403</photoid> </rsp> Subbu Allamaraju — Pragmatic REST Slide 8
  • 9. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is this RESTful? POST /services/rest/? method=flickr.photos.getRecent&api_key=… HTTP/1.1 Host: example.org HTTP/1.1 200 OK Content-Type: application/xml;charset=UTF-8 <rsp stat=quot;okquot;> <photos page=quot;1quot; pages=quot;10quot; perpage=quot;100”> <photo id=quot;2947640330quot; owner=quot;15150729@N07” secret=quot;…quot; server=quot;3060quot; farm=quot;4quot; title=quot;…quot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> … </photos> </rsp> Subbu Allamaraju — Pragmatic REST Slide 9
  • 10. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is this RESTful? GET /photos?filterBy=recent HTTP/1.1 Host: example.org HTTP/1.1 200 OK Content-Type: application/xml;charset=UTF-8 <rsp stat=quot;okquot;> <photos page=quot;1quot; pages=quot;10quot; perpage=quot;100 total=quot;1000”> <photo id=quot;2947640330quot; owner=quot;15150729@N07” secret=quot;…quot; server=quot;3060quot; farm=quot;4quot; title=quot;…quot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> … </photos> </rsp> Subbu Allamaraju — Pragmatic REST Slide 10
  • 11. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is this RESTful? GET /photos?filterBy=recent&api_key=blah Host: example.org 200 OK Content-Type: application/xml;charset=UTF-8 <rsp stat=”failquot;> <err code=quot;96quot; msg=quot;Invalid signaturequot;/> </rsp> Subbu Allamaraju — Pragmatic REST Slide 11
  • 12. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. REST Subbu Allamaraju — Pragmatic REST 12
  • 13. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. REST is defined by four interface constraints: identification of resources; manipulation of resources through representations; self- descriptive messages; hypermedia as the engine of application state. - Roy Fielding, 2000 Subbu Allamaraju — Pragmatic REST Slide 13
  • 14. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. In other words 1.  Resources and URIs 2.  Representations 3.  Uniform interface 4.  HATEOAS Subbu Allamaraju — Pragmatic REST Slide 14
  • 15. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. But no   Schemas   Description languages   Code generation   Registries Subbu Allamaraju — Pragmatic REST Slide 15
  • 16. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. REST/HTTP EXPLAINED Subbu Allamaraju — Pragmatic REST 16
  • 17. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Tenet 1: Resources   A thing with an identity  A blog entry, a person, a friend, an address   Resources are named via URIs  http://example.org/blog/what-is-rest  http://example.org/person/subbu  http://example.org/person/subbu/friends  http://example.org/person/subbu/address/home   URIs are stable  URIs are names  Names don’t change often 17 Subbu Allamaraju — Pragmatic REST
  • 18. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Identifying Resources   We will come back to this later 18 Subbu Allamaraju — Pragmatic REST
  • 19. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Assigning URIs Think primary keys A person http://example.org/person/123 An address of a http://example.org/person/123/address/4 person A movie http://example.org/movie/Gone_With_the_Wind Reviews of a http://example.org/movie/Terminator/reviews movie A group of http://example.org/persons?start=10&count=100 people Subbu Allamaraju — Pragmatic REST Slide 19
  • 20. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. URIS are Generally Opaque Clean URIs don’t generally matter http://example.org/76asfg2g Okay as long as clients don’t have to parse and understand these URI Opacity - We will come back to this later Subbu Allamaraju — Pragmatic REST Slide 20
  • 21. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. URI Design Considerations Opaque to client apps – Transparent to client developers Hierarchical path segments A good way to organize resources http://example.org/movie/Terminator/ reviews 21 Subbu Allamaraju — Pragmatic REST
  • 22. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. URI Considerations Reserve query params for optional inputs (A convention, not a rule) http://example.org/movies findBy {latest,director,studio} fromYear Year toYear Year location Postal code, or city … 22 Subbu Allamaraju — Pragmatic REST
  • 23. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Tenet 2: Representations Things sent over requests and received over responses An XML representation of a book A PNG representation of a map Data submitted through an HTML form to create a user A JSON representation of the user created An HTML view of the same user 23 Subbu Allamaraju — Pragmatic REST
  • 24. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Media Types Like the “type” of an object Like the “schema” of an XML element An XML representation of a book: application/ vnd.example.book+xml A PNG representation of a map: image/png HTML form submission: application/x-www-form-urlencoded A JSON representation of the user created: application/ vnd.example.user+json An HTML view of the same user: text/html 24 Subbu Allamaraju — Pragmatic REST
  • 25. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Representations are Negotiable Accept: application/atom+xml;q=1.0,text/html;q=0.1 Accept-Charset: UTF-8 Content-Type: application/atom+xml;charset=UTF-8 Accept-Language: fr;q=1.0,en=0.8 Content-Language: en Accept-Encoding: gzip,deflate Content-Encoding: deflate 25 Subbu Allamaraju — Pragmatic REST
  • 26. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Varying a Response Don’t overload URIs Tell intermediaries and clients how you chose a representation Accept: application/atom+xml;q=1.0,text/htm;q=0.1 Accept-Charset: UTF-8 Accept-Language: fr;q=1.0,en=0.8 Accept-Encoding: gzip,deflate Content-Type: application/atom+xml;charset=UTF-8 Content-Encoding: deflate Vary: Accept,Accept-Encoding Subbu Allamaraju — Pragmatic REST Slide 26
  • 27. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Tenet 3 – Uniform Interface Network transparency   A uniform interface to operate on resources   Uniform interface == A fixed set of operations   Uniform interface == Generic interface  Irrespective of what resource is being operated on 27 Subbu Allamaraju — Pragmatic REST
  • 28. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. HTTP is a Uniform Interface CRUD A protocol between clients and resources GET •  Get a representation •  Safe and idempotent POST •  Like a factory operation •  Unsafe and non-idempotent PUT •  Create or update a resource •  Unsafe but idempotent DELETE •  Delete a resource •  Unsafe but idempotent Subbu Allamaraju — Pragmatic REST Slide 28
  • 29. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. A Generic Application Protocol   CRUD on resources   Content negotiation   Caching   Optimistic concurrency 29 Subbu Allamaraju — Pragmatic REST
  • 30. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is CRUD Crude?   Yes, may be – depends on how you identify resources 30 Subbu Allamaraju — Pragmatic REST
  • 31. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Domain Nouns Obvious Approach   Nouns in your application domain   NYT Movie Reviews API  Movies, Reviews, Critics, Critic’s picks, Reviews by reviewer   Netflix API  Catalog, Users, Rentals, Rental History, Rental Queue, Reviews, Recommendations etc. Subbu Allamaraju — Pragmatic REST Slide 31
  • 32. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Composites Listen to Client Developers A map with traffic directions + weather alerts + and construction data A user profile with 5 contacts + favorite colors + 10 latest updates   A group of other resources   Generally read-only Subbu Allamaraju — Pragmatic REST Slide 32
  • 33. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Tasks and Processes Clear the CRUD Transfer $100 from A to B An order processing workflow Hiring an employee   Spawn several resources and have their own lifecycle Subbu Allamaraju — Pragmatic REST Slide 33
  • 34. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Finding Resources Domain Compo- Nouns sites Tasks & Processes Subbu Allamaraju — Pragmatic REST Slide 34
  • 35. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. HTTP Caching GET /photo/2691065403/comments 200 OK Last-Modified: Thu, 24 Jul 2008 16:25:14 GMT ETag: 584219-2bb-80758e80 For DB stored data, Cache-Control: max-age=300 maintain version IDs and time stamps GET /photo/2691065403/comments If-Modified-Since: Thu, 24 Jul 2008 16:25:14 GMT If-None-Match: 584219-2bb-80758e80 304 Not Modified Subbu Allamaraju — Pragmatic REST Slide 35
  • 36. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Optimistic Concurrency GET /photo/2691065403/comment/1 200 OK Last-Modified: Thu, 24 Jul 2008 16:25:14 GMT ETag: 584219-2bb-80758e80 Cache-Control: max-age=300 PUT /photo/2691065403/comment/1 If-Unmodified-Since: Thu, 24 Jul 2008 16:25:14 GMT If-Match: 584219-2bb-80758e80 412 Precondition Failed Subbu Allamaraju — Pragmatic REST Slide 36
  • 37. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Tenet 4: HATEOAS “Hypermedia as the engine of application state” Subbu Allamaraju — Pragmatic REST Slide 37
  • 38. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Web APIs without Hypermedia POXy REST   All URIs prepublished   Clients solely rely on documentation   Clients create URIs from scratch   Representations are like POJOs Subbu Allamaraju — Pragmatic REST Slide 38
  • 39. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Hypermedia for Web APIs <account> <link href=quot;http://example.org/transaction/1quot; rel=quot;self”/> <link href=quot;http://example.org/account/1/historyquot; rel=quot;http://example.org/rels/historyquot;/> <link href=quot;http://example.org/customer/aZff13quot; rel=quot;http://example.org/rels/customerquot;/> … </account> http://tools.ietf.org/id/draft-nottingham-http-link- header-02.txt for a consolidated list of well-known relations. Or define your own. Subbu Allamaraju — Pragmatic REST Slide 39
  • 40. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Hypermedia for Web APIs Representations reflect app state <customer> <link href=quot;http://example.org/customer/aZff13quot; rel=quot;self”/> <link href=quot;http://example.org/invite?z09sa3kquot; rel=quot;http://example.org/rels/verifyquot;/> … </profile> e.g. a one time link Subbu Allamaraju — Pragmatic REST Slide 40
  • 41. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. HATEOAS – Consequences   URIs are given to clients  Or clients use known algorithms, or URI templates  Don’t have to prepublish all URIs   URIs can be context and state sensitive   URIs remain opaque  Less coupling Subbu Allamaraju — Pragmatic REST Slide 41
  • 42. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. URI Templates Use when client needs to supply inputs A URI to fetch all movies with title containing a keyword: http://example.org/movies?contains={keyword} Subbu Allamaraju — Pragmatic REST Slide 42
  • 43. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Describing Web APIs Hypermedia and media types to reduce the need for description languages such as WADL 43 Subbu Allamaraju — Pragmatic REST
  • 44. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Describing Web APIs No silver bullet Publish a few root level URIs OPTIONS to discover verbs Media type specifications Links with known relations to discover new contextual URIs Subbu Allamaraju — Pragmatic REST Slide 44
  • 45. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. EXAMPLE: ACCOUNT TRANSFER Subbu Allamaraju — Pragmatic REST 45
  • 46. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Account Transfer A client app would like to transfer $100 from one bank account to another. Subbu Allamaraju — Pragmatic REST Slide 46
  • 47. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Resources and URIs Perhaps upon authentication or through a previous search Bank account: http://example.org/account/{id} Transfers collection: http://example.org/transfers Account transfer: http://example.org/transfer/{id} Status: http://example.org/status/{…} Prepublished, or linked from an account Link returned upon representation account transfer How do client apps find these URIs? Subbu Allamaraju — Pragmatic REST Slide 47
  • 48. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Representations application/vnd.example.account+xml application/vnd.example.transfer+xml application/vnd.example.status+xml Describe each media type Subbu Allamaraju — Pragmatic REST Slide 48
  • 49. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Link Relations quot;selfquot;: To self-link to each resource quot;editquot;: Link to create a new transfer request quot;http://example.org/rels/sourcequot;: Source quot;http://example.org/rels/targetquot;: Target quot;http://example.org/rels/statusquot;: Status Subbu Allamaraju — Pragmatic REST Slide 49
  • 50. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Create a Transfer POST /transfers HTTP/1.1 Host: example.org Content-Type: application/vnd.example.transfer+xml <transfer> <link href=quot;http://example.org/account/1quot; rel=quot;http://example.org/rels/sourcequot;/> <link href=quot;http://example.org/account/2quot; rel=quot;http://example.org/rels/targetquot;/> <currency>USD</currency> <amount>100.00</amount> <note>Testing transfer</note> </transfer> Subbu Allamaraju — Pragmatic REST Slide 50
  • 51. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Response HTTP/1.1 201 Created Location: http://example.org/transfer/1 Content-Type: application/vnd.example.transfer+xml <transfer> <link href=quot;http://example.org/transfer/1quot; rel=quot;self”/> <link href=quot;http://example.org/status/1?z09sa3kquot; rel=quot;http://example.org/rels/statusquot;/> <id>org:example:transfer:1</id> … </transfer> Subbu Allamaraju — Pragmatic REST Slide 51
  • 52. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Get Status GET /status/1?z09sa3k HTTP/1.1 Host: example.org HTTP/1.1 200 OK <status> <link href=quot;http://example.org/status/1?z09sa3kquot; rel=”selfquot;/> <id>org:example:status:999</id> <text>…</text> </status> Subbu Allamaraju — Pragmatic REST Slide 52
  • 53. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. QUIZ - REVISIT Subbu Allamaraju — Pragmatic REST 53
  • 54. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Are these RESTful? http://example.org/persons?start=10&count=100 http://example.org/person/123.xml http://example.org/person/123/address/4 http://example.org/movie/Gone_With_the_Wind http://example.org/movie/Terminator/reviews There is nothing RESTful or unRESTful. These are just names of resources. Subbu Allamaraju — Pragmatic REST Slide 54
  • 55. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is this RESTful? GET /services/rest/? method=flickr.photos.setPerms&photo_id=2691065403& is_public=1&is_friend=0&is_family=0&perm_comment=1& perm_addmeta=1 HTTP/1.1 Host: example.org Using an unsafe operation over GET HTTP/1.1 200 OK Use PUT Content-Type: text/xml; charset=utf-8 <rsp stat=quot;okquot;> <photoid>2691065403</photoid> </rsp> Subbu Allamaraju — Pragmatic REST Slide 55
  • 56. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is this RESTful? POST /services/rest/? method=flickr.photos.getRecent&api_key=… HTTP/1.1 Host: example.org Using GET and POST synonymously HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 GET is idempotent and <rsp stat=quot;okquot;> not. safe. POST is <photos page=quot;1quot; pages=quot;10quot; perpage=quot;100”> <photo id=quot;2947640330quot; owner=quot;15150729@N07” secret=quot;…quot; server=quot;3060quot; farm=quot;4quot; title=quot;…quot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> … </photos> </rsp> Subbu Allamaraju — Pragmatic REST Slide 56
  • 57. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is this RESTful? GET /photos?filterBy=recent HTTP/1.1 Host: example.org HTTP/1.1 200 OK Use links – not internal Content-Type: application/xml;charset-UTF-8 IDs <rsp stat=quot;okquot;> <photos page=quot;1quot; pages=quot;10quot; perpage=quot;100 total=quot;1000”> <photo id=quot;2947640330quot; owner=quot;15150729@N07” secret=quot;…quot; server=quot;3060quot; farm=quot;4quot; title=quot;…quot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> … </photos> </rsp> Subbu Allamaraju — Pragmatic REST Slide 57
  • 58. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Is this RESTful? Hiding errors from GET /photos?filterBy=recent&api_key=blah intermediaries and Host: example.org client infrastructure. Use 4xx or 5xx codes 200 OK Content-Type: application/xml;charset=UTF-8 <rsp stat=”failquot;> <err code=quot;96quot; msg=quot;Invalid signaturequot;/> </rsp> Subbu Allamaraju — Pragmatic REST Slide 58
  • 59. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. CHALLENGES Subbu Allamaraju — Pragmatic REST 59
  • 60. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. Key Challenges   Modeling resources  Not just as data, but linked and context aware   Respecting the uniform interface   Programming to hypermedia   And occasional fights between “that one” and “the other one”. Subbu Allamaraju — Pragmatic REST Slide 60
  • 61. Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Yahoo! Inc. THANKS Subbu Allamaraju — Pragmatic REST 61