{"id":117,"date":"2016-04-26T21:58:00","date_gmt":"2016-04-27T01:58:00","guid":{"rendered":"https:\/\/sites.bu.edu\/perryd\/?p=117"},"modified":"2017-01-18T10:56:33","modified_gmt":"2017-01-18T15:56:33","slug":"dogfooding-defining-roles-in-an-mvc-architecture-with-internal-apis","status":"publish","type":"post","link":"https:\/\/sites.bu.edu\/perryd\/2016\/04\/26\/dogfooding-defining-roles-in-an-mvc-architecture-with-internal-apis\/","title":{"rendered":"Dogfooding: Defining roles in an MVC architecture with internal APIs"},"content":{"rendered":"<p>Here&#8217;s a copy of the talk I did recently at Boston University discussing how to implement a clean MVC architecture for web apps, with a decoupled front end, using an internal API.<\/p>\n<p>Abstract: The architectural design of an application often comes down to a single question: Where is the work done? Traditional client-server applications answer the question unequivocally: On the server. A new class of application, single-page (SPA), has blurred the separation of responsibility by moving data operations closer to the client. This talk discusses an approach that strictly segregates back-end models from front-end SPA views through use of an application-agnostic internal RESTful API, enhancing testability and re-use. While demonstration code will be in Javascript, the approach applies to most client-server application architectures.<\/p>\n<p><a href=\"\/perryd\/files\/2016\/04\/Dogfooding-and-APIs.pdf\">Dogfooding and APIs<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here&#8217;s a copy of the talk I did recently at Boston University discussing how to implement a clean MVC architecture for web apps, with a decoupled front end, using an internal API. Abstract: The architectural design of an application often comes down to a single question: Where is the work done? Traditional client-server applications answer [&hellip;]<\/p>\n","protected":false},"author":11388,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[15,16,14],"tags":[],"_links":{"self":[{"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/posts\/117"}],"collection":[{"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/users\/11388"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/comments?post=117"}],"version-history":[{"count":2,"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/posts\/117\/revisions"}],"predecessor-version":[{"id":120,"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/posts\/117\/revisions\/120"}],"wp:attachment":[{"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/media?parent=117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/categories?post=117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sites.bu.edu\/perryd\/wp-json\/wp\/v2\/tags?post=117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}