$30 off During Our Annual Pro Sale. View Details »

Content Negotiation for REST APIs

Erik Berlin
October 22, 2014

Content Negotiation for REST APIs

Closing keynote at the Nordic APIs Platform Summit in Stockholm, Sweden.

Erik Berlin

October 22, 2014
Tweet

More Decks by Erik Berlin

Other Decks in Technology

Transcript

  1. Content Negotiation
    for REST APIs

    View Slide


  2. @sferik

    View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. SOAP vs. REST

    View Slide

  7. SOAP vs. REST
    SOAP POST /api.xml

    View Slide

  8. SOAP vs. REST
    SOAP POST /api.xml

    View Slide

  9. SOAP vs. REST
    SOAP POST /api.xml

    View Slide

  10. SOAP vs. REST
    SOAP POST /api.xml
    REST GET /users/sferik.json

    View Slide

  11. SOAP vs. REST
    SOAP POST /api.xml
    REST GET /users/sferik.json

    View Slide

  12. SOAP vs. REST
    SOAP POST /api.xml
    REST GET /users/sferik.json

    View Slide

  13. SOAP vs. REST
    SOAP POST /api.xml
    REST GET /users/sferik.json

    View Slide

  14. FILE NAME
    EXTENSIONS

    View Slide

  15. View Slide

  16. RESOURCE VS.
    REPRESENTATION

    View Slide

  17. XML REPRESENTATION
    GET /users/sferik.xml



    sferik

    Erik


    View Slide

  18. JSON REPRESENTATION
    GET /users/sferik.json


    {

    “id”: “sferik”,

    “name”: “Erik”

    }

    View Slide

  19. RESOURCE VS.
    REPRESENTATION
    GET /users/sferik.xml
    GET /users/sferik.json

    View Slide

  20. RESOURCE VS.
    REPRESENTATION
    GET /users/sferik

    View Slide

  21. ACCEPT HEADER
    The Accept request-header field can be used to
    specify certain media types which are acceptable
    for the response.

    View Slide

  22. ACCEPT HEADER
    GET /avatars/sferik.png


    Accept: image/png

    View Slide

  23. ACCEPT HEADER
    GET /avatars/sferik


    Accept: image/png,

    image/jpeg; q=0.8,

    image/gif; q=0.8,

    image/*; q=0.5,

    application/json; q=0.1

    View Slide

  24. ACCEPT HEADER
    GET /avatars/sferik


    Accept: video/*,

    image/gif; q=0.8,

    image/*; q=0.5,

    application/json; q=0.1

    View Slide

  25. ACCEPT-LANGUAGE
    HEADER
    The Accept-Language request-header field is
    similar to Accept, but restricts the set of natural
    languages that are preferred as a response to
    the request.

    View Slide

  26. ACCEPT-LANGUAGE
    HEADER
    GET /index.se.html


    Accept-Language: se

    View Slide

  27. ACCEPT-LANGUAGE
    HEADER
    GET /index


    Accept-Language: se,

    en-us;q=0.8,

    en;q=0.7

    View Slide

  28. View Slide

  29. View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. FORMATS CHANGE

    View Slide

  34. FIELDING ON REST
    REST is software design on the scale of decades:
    every detail is intended to promote software
    longevity and independent evolution. Many of the
    constraints are directly opposed to short-term
    efficiency. Unfortunately, people are fairly good
    at short-term design, and usually awful at long-
    term design. Most don’t think they need to
    design past the current release.

    View Slide

  35. EXPOSE RESOURCES,

    NOT REPRESENTATIONS

    View Slide

  36. TACK

    View Slide