{"id":3444,"date":"2023-04-12T15:33:12","date_gmt":"2023-04-12T15:33:12","guid":{"rendered":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/"},"modified":"2026-01-21T16:42:34","modified_gmt":"2026-01-21T16:42:34","slug":"building-an-open-source-multitiered-application","status":"publish","type":"post","link":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/","title":{"rendered":"How Do I Build an Open Source, Multitiered Application?"},"content":{"rendered":"<p>In software engineering, multitier\u00a0architecture\u00a0(or multilayered\u00a0architecture)\u00a0is an architecture\u00a0in which presentation, application processing and\u00a0data\u00a0management are physically separated.<\/p>\n<p>Often you will see architectural diagrams depicting the three \u201ctiers\u201d as:<\/p>\n<ul>\n<li><strong>The Data Tier<\/strong> (where information is stored in a database or file system)<\/li>\n<li><strong>The Logical Tier<\/strong> (where processing commands are executed, logical decisions are made, and calculations may be performed)<\/li>\n<li><strong>The Presentation Tier<\/strong> (which is the \u201ctopmost\u201d tier and is where results are transformed and presented into something the user can understand)<\/li>\n<\/ul>\n<p>For illustration, let us suppose we have some data residing in multiple source systems and we want to \u201cgather\u201d that data and then present it in some sort of visual dashboard.<\/p>\n<p><strong>The Data Tier<\/strong><\/p>\n<p>In this example, the data resides in both an IBM Planning Analytics cube as well as Microsoft SQL server tables. I will not spend too much time here \u2013 just note that we have a cube defined in Planning Analytics named \u201cShipments\u201d that is updated with the number of shipments for each day in the prior week and in SQL Server, there are tables named \u201cBrands\u201d which holds (among other things) the brand names of the products that were shipped, and a table named order_items that holds quantities (shipped).<\/p>\n<p><strong>The Logical Tier<\/strong><\/p>\n<p>We will use Python to build our logical tier which will connect to and query both of our named data sources and then format and make the results available to the presentation tier. To build our middle tier solution, will use <a href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a> starting with a new Python project. The \u201cscript\u201d will be pretty simple, divided into several distinct \u201cparts\u201d:<\/p>\n<ul>\n<li>Python Package Imports<\/li>\n<li>Function Definitions<\/li>\n<li>Main Processing<\/li>\n<\/ul>\n<p><strong>Python Packages<\/strong><\/p>\n<p>In this example we are going to leverage the following Python modules:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1422 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO1-min.jpg\" alt=\"\" width=\"669\" height=\"73\" \/><\/p>\n<p><strong>Function Definitions<\/strong><\/p>\n<p>Following best practices, we will create a series of simple Python functions. The first two will handle connecting to our data sources and the next two will retrieve the data that we are interested in:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1423 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO2-min.jpg\" alt=\"\" width=\"724\" height=\"615\" \/><\/p>\n<p>Next, we need some functions to support the presentation of the data. The first is the simplest and will simply generate an HTML page (rows_and_columns.html) from the data retrieved from planning analytics:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1424 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/bo3-min.jpg\" alt=\"\" width=\"643\" height=\"274\" \/><\/p>\n<p>The next function, will be even easier; and it will simply generate a JavaScript variable definition file (pie_data.js) based upon the data:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1425 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO4-min.jpg\" alt=\"\" width=\"630\" height=\"132\" \/><\/p>\n<p>And for our last function (similar to the one above), it will create another JavaScript variable definition file (bar_data.js):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1415 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO5-min.jpg\" alt=\"\" width=\"711\" height=\"227\" \/><\/p>\n<p>Lastly, we need a \u201cmain\u201d section to coordinate the use of the above functions:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1416 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO6-min.jpg\" alt=\"\" width=\"672\" height=\"349\" \/><\/p>\n<p><strong>The Presentation Tier<\/strong><\/p>\n<p>For the presentation tier, we will follow the same strategy \u2013 to do as little programming as possible \u2013 by using simple HTML pages and leveraging some open source JavaScript.<\/p>\n<p>Since this example assumes that the data always \u201ccomes back\u201d from the middle or \u201clogical\u201d tier in the same format, we do not have to do any programming in this tier and can just \u201clet\u201d the code in the HRML page present the data.<\/p>\n<p><strong>Rows and Columns<\/strong><\/p>\n<p>For the first visualization, we can simply open the page created by the create_rows_and_columns_html function (rows_and_columns.html) in a web browser:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1417 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO7-min.jpg\" alt=\"\" width=\"281\" height=\"378\" \/><\/p>\n<p><strong>The Pie Chart<\/strong><\/p>\n<p>Rather than just \u201cboring\u201d rows and columns, to present the data in a slightly nicer format, we can use <a href=\"https:\/\/d3js.org\/\">D3.js<\/a>, which is an open source JavaScript library for manipulating documents based on data.\u00a0D3\u00a0helps you \u201cbring data to life\u201d using HTML, SVG, and CSS. D3\u2019s emphasis on web standards gives you the full capabilities offered in web browsers without having to produce custom code or tying yourself to a proprietary framework, combining powerful visualization components in a data-driven approach.<\/p>\n<p>What all that means is that we can simply add some &lt;script&gt; tags to an HTML page to specify the URLs of some external\u00a0script\u00a0(the D3 libraries) as well as the data generated by the create_data_for_pie_chart function and voil\u00e0!<\/p>\n<p>Below is the HTML for the pie chart page:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1418 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO8-min.jpg\" alt=\"\" width=\"502\" height=\"345\" \/><\/p>\n<p>And if we open our HTML pie chart page we see:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1419 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO9-min.jpg\" alt=\"\" width=\"299\" height=\"249\" \/><\/p>\n<p><strong>A Bar Chart<\/strong><\/p>\n<p>Again, without any presentation tier programming, lets now present the data we retrieved from SQL Server. The following shows the HTML page that presents the data in a bar chart:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1420 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO10-min.jpg\" alt=\"\" width=\"478\" height=\"208\" \/><\/p>\n<p>Which looks like this (opened in a Web browser):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1421 alignnone\" src=\"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO11-min.jpg\" alt=\"\" width=\"697\" height=\"612\" \/><\/p>\n<p><strong>Wrap Up<\/strong><\/p>\n<p>Okay, first some \u201cdisclaimers\u201d.<\/p>\n<p>For example, I have not addressed security anywhere and the code assumes that all the files are in the same location (to save time, I have also referenced some of the D3 files directly from https:\/\/d3js.org). Additionally, I took the liberty of assuming what data is retrieved from the source systems, in that daily shipments are always just seven numbers (one quantity for each day of the prior week) and I have also limited the SQL Server data to seven brands. In a \u201creal\u201d scenario, you would have to add some additional logic to deal with any unexpected data situations. Finally, to be fair, some of the Python code would require some \u201ccleaning up\u201d before it could be considered productized.<\/p>\n<p>What is exciting is that by using simple HTML and D3 library functions, we have done very little actual programming \u2013 all in the middle or logical tier \u2013 and have created a working multitier solution that demonstrates how an open source (Python) application can connect to backend source systems such as Planning Analytics and SQL Server and then \u201cpush\u201d data to the presentation tier where it is displayed by standard HTML pages.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In software engineering, multitier\u00a0architecture\u00a0(or multilayered\u00a0architecture)\u00a0is an architecture\u00a0in which presentation, application processing and\u00a0data\u00a0management are physically separated. Often you will see architectural diagrams depicting the three \u201ctiers\u201d as: The Data Tier (where information is stored in a database or file system) The Logical Tier (where processing commands are executed, logical decisions are made, and calculations may be&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[24],"tags":[38,36,51],"class_list":["post-3444","post","type-post","status-publish","format-standard","hentry","category-ibm","tag-how-tos","tag-planning-analytics","tag-planning-analytics-how-tos"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How Do I Build an Open Source, Multitiered Application? - QueBIT<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How Do I Build an Open Source, Multitiered Application? - QueBIT\" \/>\n<meta property=\"og:description\" content=\"In software engineering, multitier\u00a0architecture\u00a0(or multilayered\u00a0architecture)\u00a0is an architecture\u00a0in which presentation, application processing and\u00a0data\u00a0management are physically separated. Often you will see architectural diagrams depicting the three \u201ctiers\u201d as: The Data Tier (where information is stored in a database or file system) The Logical Tier (where processing commands are executed, logical decisions are made, and calculations may be&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/\" \/>\n<meta property=\"og:site_name\" content=\"QueBIT\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-12T15:33:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-21T16:42:34+00:00\" \/>\n<meta name=\"author\" content=\"agoddard\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"agoddard\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/\"},\"author\":{\"name\":\"agoddard\",\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/#\\\/schema\\\/person\\\/e52d72da0fd2f5f70d189343fe4f5084\"},\"headline\":\"How Do I Build an Open Source, Multitiered Application?\",\"datePublished\":\"2023-04-12T15:33:12+00:00\",\"dateModified\":\"2026-01-21T16:42:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/\"},\"wordCount\":929,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/BO1-min.jpg\",\"keywords\":[\"How To\u2019s\",\"Planning Analytics\",\"Planning Analytics How To's\"],\"articleSection\":[\"IBM\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/\",\"url\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/\",\"name\":\"How Do I Build an Open Source, Multitiered Application? - QueBIT\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/BO1-min.jpg\",\"datePublished\":\"2023-04-12T15:33:12+00:00\",\"dateModified\":\"2026-01-21T16:42:34+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/#\\\/schema\\\/person\\\/e52d72da0fd2f5f70d189343fe4f5084\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/#primaryimage\",\"url\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/BO1-min.jpg\",\"contentUrl\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/BO1-min.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/building-an-open-source-multitiered-application\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How Do I Build an Open Source, Multitiered Application?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/#website\",\"url\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/\",\"name\":\"QueBIT\",\"description\":\"QueBIT\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/#\\\/schema\\\/person\\\/e52d72da0fd2f5f70d189343fe4f5084\",\"name\":\"agoddard\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d817b364cff1d66116debde8d1c85e5e76eeece9c5ae731b19276a6040231455?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d817b364cff1d66116debde8d1c85e5e76eeece9c5ae731b19276a6040231455?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d817b364cff1d66116debde8d1c85e5e76eeece9c5ae731b19276a6040231455?s=96&d=mm&r=g\",\"caption\":\"agoddard\"},\"sameAs\":[\"https:\\\/\\\/quebit.com\\\/askquebit\"],\"url\":\"https:\\\/\\\/quebit.com\\\/askquebit\\\/author\\\/agoddard\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How Do I Build an Open Source, Multitiered Application? - QueBIT","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/","og_locale":"en_US","og_type":"article","og_title":"How Do I Build an Open Source, Multitiered Application? - QueBIT","og_description":"In software engineering, multitier\u00a0architecture\u00a0(or multilayered\u00a0architecture)\u00a0is an architecture\u00a0in which presentation, application processing and\u00a0data\u00a0management are physically separated. Often you will see architectural diagrams depicting the three \u201ctiers\u201d as: The Data Tier (where information is stored in a database or file system) The Logical Tier (where processing commands are executed, logical decisions are made, and calculations may be&hellip;","og_url":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/","og_site_name":"QueBIT","article_published_time":"2023-04-12T15:33:12+00:00","article_modified_time":"2026-01-21T16:42:34+00:00","author":"agoddard","twitter_card":"summary_large_image","twitter_misc":{"Written by":"agoddard","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/#article","isPartOf":{"@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/"},"author":{"name":"agoddard","@id":"https:\/\/quebit.com\/askquebit\/#\/schema\/person\/e52d72da0fd2f5f70d189343fe4f5084"},"headline":"How Do I Build an Open Source, Multitiered Application?","datePublished":"2023-04-12T15:33:12+00:00","dateModified":"2026-01-21T16:42:34+00:00","mainEntityOfPage":{"@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/"},"wordCount":929,"commentCount":0,"image":{"@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/#primaryimage"},"thumbnailUrl":"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO1-min.jpg","keywords":["How To\u2019s","Planning Analytics","Planning Analytics How To's"],"articleSection":["IBM"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/","url":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/","name":"How Do I Build an Open Source, Multitiered Application? - QueBIT","isPartOf":{"@id":"https:\/\/quebit.com\/askquebit\/#website"},"primaryImageOfPage":{"@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/#primaryimage"},"image":{"@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/#primaryimage"},"thumbnailUrl":"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO1-min.jpg","datePublished":"2023-04-12T15:33:12+00:00","dateModified":"2026-01-21T16:42:34+00:00","author":{"@id":"https:\/\/quebit.com\/askquebit\/#\/schema\/person\/e52d72da0fd2f5f70d189343fe4f5084"},"breadcrumb":{"@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/#primaryimage","url":"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO1-min.jpg","contentUrl":"https:\/\/quebit.com\/askquebit\/wp-content\/uploads\/2021\/05\/BO1-min.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/quebit.com\/askquebit\/building-an-open-source-multitiered-application\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/quebit.com\/askquebit\/"},{"@type":"ListItem","position":2,"name":"How Do I Build an Open Source, Multitiered Application?"}]},{"@type":"WebSite","@id":"https:\/\/quebit.com\/askquebit\/#website","url":"https:\/\/quebit.com\/askquebit\/","name":"QueBIT","description":"QueBIT","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/quebit.com\/askquebit\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/quebit.com\/askquebit\/#\/schema\/person\/e52d72da0fd2f5f70d189343fe4f5084","name":"agoddard","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d817b364cff1d66116debde8d1c85e5e76eeece9c5ae731b19276a6040231455?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d817b364cff1d66116debde8d1c85e5e76eeece9c5ae731b19276a6040231455?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d817b364cff1d66116debde8d1c85e5e76eeece9c5ae731b19276a6040231455?s=96&d=mm&r=g","caption":"agoddard"},"sameAs":["https:\/\/quebit.com\/askquebit"],"url":"https:\/\/quebit.com\/askquebit\/author\/agoddard\/"}]}},"_links":{"self":[{"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/posts\/3444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/comments?post=3444"}],"version-history":[{"count":2,"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/posts\/3444\/revisions"}],"predecessor-version":[{"id":5129,"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/posts\/3444\/revisions\/5129"}],"wp:attachment":[{"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/media?parent=3444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/categories?post=3444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/quebit.com\/askquebit\/wp-json\/wp\/v2\/tags?post=3444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}