{"id":128,"date":"2012-01-21T18:03:59","date_gmt":"2012-01-21T22:03:59","guid":{"rendered":"http:\/\/danielroop.com\/blog\/?p=128"},"modified":"2012-01-21T22:05:07","modified_gmt":"2012-01-22T02:05:07","slug":"obsessed-with-rest","status":"publish","type":"post","link":"http:\/\/danielroop.com\/blog\/2012\/01\/21\/obsessed-with-rest\/","title":{"rendered":"Obsessed with REST"},"content":{"rendered":"<p>Early in my career I discovered my first love in programming, the build processes.  I have identified it as various things over the years; build tools, unit testing, continuous integration and now continuous delivery, but it will always be my first love in programming.  Over the last two years I have found a new love, REST.  The great thing is these two are completely comfortable with each other and work very well together.<\/p>\n<p>As I haven&#8217;t blogged very much over the time I have gained this new obsession I have lots in the backlog to write about.  But as a wise friend, <a href=\"http:\/\/adamfortuna.com\/\" title=\"Adam Fortuna\">Adam Fortuna<\/a>, once told me it so annoying to have a &#8220;I am going to start blogging again post&#8221;.  I acknowledge this paragraph is in itself an acknowledgment of my failure, I will attempt to provide some value to hide my failure.<\/p>\n<p>While digging into REST I found numerous resources super helpful so I figured I would catalog them in this post for anyone else interested as my first foray into sharing my REST experience with everyone.<\/p>\n<h2>Foundational Reading<\/h2>\n<dl>\n<dt><a href=\"http:\/\/www.ics.uci.edu\/~fielding\/pubs\/dissertation\/top.htm\">Roy Fielding&#8217;s Dissertation that defined REST<\/a><\/dt>\n<dd>This is the paper that started it all.  Roy Fielding coined the term REST and described what it was.  The majority of the disseration is establishing a mechanism for describing distributed architectures and I would recommend it to anyone interested in that topic regardless of your opinion of REST.  But I think it is foundational for anyone looking to understand REST beyond a practical level.<\/dd>\n<dt><a href=\"http:\/\/www.amazon.com\/gp\/product\/0596805829\/ref=as_li_ss_tl?ie=UTF8&#038;tag=danroo-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0596805829\">REST in Practice: Hypermedia and Systems Architecture<\/a><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.assoc-amazon.com\/e\/ir?t=danroo-20&#038;l=as2&#038;o=1&#038;a=0596805829\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\" \/>\n<\/dt>\n<dd>There are a couple books published prior to this one by O&#8217;Reilly about REST, but I would recommend skipping those and starting here.  This book gives a lot of practical examples and has incorporated a few extra years of learning on top of the original &#8220;REST&#8221; books that were published.  Some of the generally accepted good practices have changed since the first round of books.  At work I gained the reputation of the REST Prophet and this book was considered my REST Bible.<\/dd>\n<dt><a href=\"http:\/\/martinfowler.com\/articles\/richardsonMaturityModel.html\">Martin Fowler on Richardson Maturity Model<\/a><\/p>\n<dt>\n<dd>The Ricardson Maturity Model is a way to categorize how &#8220;RESTful&#8221; an API is.  It is worth noting that Roy Fielding has stated that he only considers level 3 RESTful, but it is useful to categorize where APIs are.  Most public APIs stop at level 2.<\/dd>\n<\/dl>\n<h2>Good Example APIs<\/h2>\n<ul>\n<li><a href=\"http:\/\/developer.netflix.com\/\">Netflix<\/a><\/li>\n<li><a href=\"http:\/\/kenai.com\/projects\/suncloudapis\/pages\/Home\">Sun Cloud API<\/a><\/li>\n<li><a href=\"https:\/\/developer.atlassian.com\/display\/REST\/Guidelines+for+Atlassian+REST+API+Design\">Atlassian<\/a><\/li>\n<\/ul>\n<h2>Shameless Plug<\/h2>\n<div style=\"float:left;width:450px;margin-right:40px\">\nThis isn&#8217;t really a shameless plug for me, but I did have the pleasure to work with a colleague to refine our perspective on REST and how it should be used within our organization.  Some of those ideas were bundled up and published in a book in late 2011.  It is a short book, but is chalk full of clear opinions about how to solve common questions like (what should my url look like, or should I use a custom content-type).  It then takes a stab at starting the wheels moving on a new standard Content-Type and framework for building and interacting with REST APIs.  I would recommend having this and REST In Practice next to you at all times if you are trying to leverage REST in your environments\n<\/div>\n<p><iframe src=\"http:\/\/rcm.amazon.com\/e\/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;nou=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=danroo-20&#038;o=1&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=1449310508\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Early in my career I discovered my first love in programming, the build processes. I have identified it as various things over the years; build tools, unit testing, continuous integration and now continuous delivery, but it will always be my &hellip; <a href=\"http:\/\/danielroop.com\/blog\/2012\/01\/21\/obsessed-with-rest\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52,23,13],"tags":[],"class_list":["post-128","post","type-post","status-publish","format-standard","hentry","category-development","category-rest","category-theory"],"_links":{"self":[{"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/posts\/128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/comments?post=128"}],"version-history":[{"count":11,"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/posts\/128\/revisions"}],"predecessor-version":[{"id":138,"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/posts\/128\/revisions\/138"}],"wp:attachment":[{"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/media?parent=128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/categories?post=128"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/danielroop.com\/blog\/wp-json\/wp\/v2\/tags?post=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}