{"id":1233,"date":"2016-11-28T22:25:54","date_gmt":"2016-11-28T22:25:54","guid":{"rendered":"https:\/\/solutionstreet.com\/blog\/?p=1233"},"modified":"2016-11-28T22:25:54","modified_gmt":"2016-11-28T22:25:54","slug":"javascript-server-apis-with-node-and-loopback-video","status":"publish","type":"post","link":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/","title":{"rendered":"JavaScript Server APIs with Node and Loopback (VIDEO)"},"content":{"rendered":"<p><a href=\"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png\" alt=\"noveberttitle3\" width=\"658\" height=\"287\" class=\"alignnone size-medium wp-image-1295\" srcset=\"https:\/\/www.solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png 822w, https:\/\/www.solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3-300x131.png 300w, https:\/\/www.solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3-768x335.png 768w\" sizes=\"auto, (max-width: 658px) 100vw, 658px\" \/><\/a><br \/>\n<span style=\"font-family: verdana;\"><br \/>\n<\/span><\/p>\n<div>\n<p>I tend to migrate towards languages, frameworks, and architectures that have a large community, follow web standards, and live by the following two principles:<\/p>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Convention_over_configuration\" target=\"_blank\" rel=\"noopener\">Convention over configuration<\/a><\/li>\n<li><a href=\"https:\/\/www.linkedin.com\/pulse\/write-less-code-arthur-frankel\" target=\"_blank\" rel=\"noopener\">Less code is better<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>There\u2019s no question that Ruby on Rails exemplifies these two principles, but the world appears to be moving to a JavaScript dominated <a href=\"http:\/\/isomorphic.net\/\" target=\"_blank\" rel=\"noopener\">isomorphic<\/a> future. Maybe Rails will have a larger following in years to come or maybe it will fizzle out. I don\u2019t know and of course no one knows. What I do know is that the community of JavaScript developers is growing along with some great software. This includes both the server and the client. Who knew that the infamous quote of \u201cJava everywhere\u201d from the early 2000s would actually come true for JavaScript instead? JavaScript everywhere!!! It certainly seems like that. <\/p>\n<p>&nbsp;<\/p>\n<p>Now I\u2019m still quite skeptical of JavaScript applications (especially on the server) taking over the mainstays of Java\/JEE, C#\/.NET and other enterprise language\/architectures, but there is clearly a movement to get JavaScript on the server. There is no doubt that  <a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\" rel=\"noopener\">Node<\/a> has some enthusiastic followers and given the event-driven, non-blocking I\/O architecture of Chrome\u2019s V8 engine it certainly seems like JavaScript on the server has a future. Of course then there is  <a href=\"http:\/\/callbackhell.com\/\" target=\"_blank\" rel=\"noopener\">callback hell<\/a>\u2026but let\u2019s worry about that later.<\/p>\n<p>&nbsp;<\/p>\n<p>I set out many months ago to try and find a full-stack JavaScript framework that met my two basic principles and well\u2026something that I liked using. I looked at Meteor, a dozen other full-stack frameworks, came back to Meteor (I certainly like it but it seemed a little overpowering for me), and stumbled upon  <a href=\"https:\/\/loopback.io\/\" target=\"_blank\" rel=\"noopener\">LoopBack<\/a>.  In short, StrongLoop built LoopBack. IBM bought StrongLoop.  LoopBack is open source and free to use\/deploy and there is a <a href=\"http:\/\/loopback.io\/doc\/en\/lb2\/LoopBack-FAQ.html\" target=\"_blank\" rel=\"noopener\">commercial version with full support<\/a> (including process management, deployment, profiling, metrics, etc.).<\/p>\n<p>&nbsp;<\/p>\n<p>Now LoopBack is not a full-stack solution. It\u2019s an API server &#8211; a significant component in the full-stack architecture. You can write some server-side html rendering (MVC) since it\u2019s built on  <a href=\"http:\/\/expressjs.com\/\" target=\"_blank\" rel=\"noopener\">Express<\/a> and uses <a href=\"http:\/\/stackoverflow.com\/questions\/34130494\/view-engine-error-when-sending-registration-email-in-loopback\" target=\"_blank\" rel=\"noopener\">EJS<\/a>, but it\u2019s mostly targeted towards Single Page Applications (SPAs) like  <a href=\"http:\/\/loopback.io\/doc\/en\/lb2\/AngularJS-JavaScript-SDK.html\" target=\"_blank\" rel=\"noopener\">Angular<\/a> and <a href=\"http:\/\/loopback.io\/doc\/en\/lb2\/iOS-SDK.html\" target=\"_blank\" rel=\"noopener\">native mobile applications<\/a>. In this article\/video I will focus on the server aspect and maybe in a future article I will tackle the client component.<\/p>\n<p>&nbsp;<\/p>\n<p>I was initially impressed with LoopBack because it worked, and it worked quickly. With its <a href=\"http:\/\/loopback.io\/doc\/en\/lb2\/Command-line-tools.html\" target=\"_blank\" rel=\"noopener\">CLI<\/a> I was reminded of the coolness and quickness of Rails. When I brought up the code I was amazed at the limited number of lines of code and that much of the \u201cgenerated\u201d code was basic JSON files. Of course there was lots of code brought in with npm under node_modules directory, but that\u2019s so common these days with any JavaScript framework.<\/p>\n<p>&nbsp;<\/p>\n<p>Instead of writing a 30-page article walking you through each step of setting up a typical LoopBack application, I decided to record a video of my findings.  I determined what I thought were the important aspects of evaluating a framework like this. These items are part of the 80% use case; at Solution Street we want software engineers to breeze through the 80% of standard software development and focus on the 20%.<\/p>\n<p><a href=\"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/80-20-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/80-20-2.png\" alt=\"80-20-2\" width=\"598\" height=\"258\" class=\"alignnone size-medium wp-image-1269\" srcset=\"https:\/\/www.solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/80-20-2.png 934w, https:\/\/www.solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/80-20-2-300x130.png 300w, https:\/\/www.solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/80-20-2-768x332.png 768w\" sizes=\"auto, (max-width: 598px) 100vw, 598px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Here are the items I researched and describe or provide examples of in the video:<\/p>\n<ol>\n<li>Easily create a skeleton app that works from the start<\/li>\n<li>Create basic model with attributes that has CRUD processing out of the box<\/li>\n<li>Create relationships and show different relationships<\/li>\n<li>Connect to datasources &#8211; mySQL, PostgreSQL, MongoDB, etc.<\/li>\n<li>Migration of data models<\/li>\n<li>Persistence of data<\/li>\n<li>Querying data with filtering<\/li>\n<li>Hide APIs &#8211; making them private<\/li>\n<li>Custom methods<\/li>\n<li>Operational hooks (e.g., before filters)<\/li>\n<li>Override existing (default) CRUD methods<\/li>\n<li>Validations &#8211; standard and custom<\/li>\n<li>Access control lists (ACL)<\/li>\n<li>Access tokens\/CORS<\/li>\n<li>ES6 support<\/li>\n<li>Logging\/Debugging<\/li>\n<li>Console playground (like Rails console)<\/li>\n<\/ol>\n<p>Here is a &#8220;<a href=\"https:\/\/www.youtube.com\/watch?v=kthQssL_vFk\" target=\"_blank\" rel=\"noopener\">video walkthrough<\/a>&#8220;. <\/p>\n<p>&nbsp;<\/p>\n<p>Overall I\u2019m quite impressed with LoopBack. I find that the simplicity of the codebase and the extensibility fit nicely into convention over configuration. Writing server-side JavaScript code requires some skill and although I review both callbacks and promises in my video, both are difficult adjustments to make for many software engineers including myself. I don\u2019t know if LoopBack will survive the JavaScripts wars, but I certainly hope it does.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I tend to migrate towards languages, frameworks, and architectures that have a large community, follow web standards, and live by the following two principles: Convention over configuration Less code is better &nbsp; There\u2019s no question that Ruby on Rails exemplifies these two principles, but the world appears to be moving to a JavaScript dominated isomorphic [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1233","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JavaScript Server APIs with Node and Loopback (VIDEO) - Solution Street Blog<\/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:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript Server APIs with Node and Loopback (VIDEO) - Solution Street Blog\" \/>\n<meta property=\"og:description\" content=\"I tend to migrate towards languages, frameworks, and architectures that have a large community, follow web standards, and live by the following two principles: Convention over configuration Less code is better &nbsp; There\u2019s no question that Ruby on Rails exemplifies these two principles, but the world appears to be moving to a JavaScript dominated isomorphic [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/\" \/>\n<meta property=\"og:site_name\" content=\"Solution Street Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-28T22:25:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png\" \/>\n<meta name=\"author\" content=\"Peggy Frankel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Peggy Frankel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/\"},\"author\":{\"name\":\"Peggy Frankel\",\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/#\\\/schema\\\/person\\\/c4846451eff30e9514b534b2a2e01696\"},\"headline\":\"JavaScript Server APIs with Node and Loopback (VIDEO)\",\"datePublished\":\"2016-11-28T22:25:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/\"},\"wordCount\":733,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/solutionstreet.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/NovebertTitle3.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/\",\"url\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/\",\"name\":\"JavaScript Server APIs with Node and Loopback (VIDEO) - Solution Street Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/solutionstreet.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/NovebertTitle3.png\",\"datePublished\":\"2016-11-28T22:25:54+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/#\\\/schema\\\/person\\\/c4846451eff30e9514b534b2a2e01696\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/#primaryimage\",\"url\":\"https:\\\/\\\/solutionstreet.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/NovebertTitle3.png\",\"contentUrl\":\"https:\\\/\\\/solutionstreet.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/NovebertTitle3.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/2016\\\/11\\\/28\\\/javascript-server-apis-with-node-and-loopback-video\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript Server APIs with Node and Loopback (VIDEO)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/\",\"name\":\"Solution Street Blog\",\"description\":\"Quality Software Engineering - Technology and Consulting Articles\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/#\\\/schema\\\/person\\\/c4846451eff30e9514b534b2a2e01696\",\"name\":\"Peggy Frankel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af71ceb16f89d32c9bb825a47f8057da9283b4a27a934bf0c47cdef65ad0eb5d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af71ceb16f89d32c9bb825a47f8057da9283b4a27a934bf0c47cdef65ad0eb5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af71ceb16f89d32c9bb825a47f8057da9283b4a27a934bf0c47cdef65ad0eb5d?s=96&d=mm&r=g\",\"caption\":\"Peggy Frankel\"},\"url\":\"https:\\\/\\\/www.solutionstreet.com\\\/blog\\\/author\\\/pfrankel\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JavaScript Server APIs with Node and Loopback (VIDEO) - Solution Street Blog","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:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/","og_locale":"en_US","og_type":"article","og_title":"JavaScript Server APIs with Node and Loopback (VIDEO) - Solution Street Blog","og_description":"I tend to migrate towards languages, frameworks, and architectures that have a large community, follow web standards, and live by the following two principles: Convention over configuration Less code is better &nbsp; There\u2019s no question that Ruby on Rails exemplifies these two principles, but the world appears to be moving to a JavaScript dominated isomorphic [&hellip;]","og_url":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/","og_site_name":"Solution Street Blog","article_published_time":"2016-11-28T22:25:54+00:00","og_image":[{"url":"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png","type":"","width":"","height":""}],"author":"Peggy Frankel","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Peggy Frankel","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/#article","isPartOf":{"@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/"},"author":{"name":"Peggy Frankel","@id":"https:\/\/www.solutionstreet.com\/blog\/#\/schema\/person\/c4846451eff30e9514b534b2a2e01696"},"headline":"JavaScript Server APIs with Node and Loopback (VIDEO)","datePublished":"2016-11-28T22:25:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/"},"wordCount":733,"commentCount":0,"image":{"@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/#primaryimage"},"thumbnailUrl":"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/","url":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/","name":"JavaScript Server APIs with Node and Loopback (VIDEO) - Solution Street Blog","isPartOf":{"@id":"https:\/\/www.solutionstreet.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/#primaryimage"},"image":{"@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/#primaryimage"},"thumbnailUrl":"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png","datePublished":"2016-11-28T22:25:54+00:00","author":{"@id":"https:\/\/www.solutionstreet.com\/blog\/#\/schema\/person\/c4846451eff30e9514b534b2a2e01696"},"breadcrumb":{"@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/#primaryimage","url":"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png","contentUrl":"https:\/\/solutionstreet.com\/blog\/wp-content\/uploads\/2016\/11\/NovebertTitle3.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.solutionstreet.com\/blog\/2016\/11\/28\/javascript-server-apis-with-node-and-loopback-video\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.solutionstreet.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript Server APIs with Node and Loopback (VIDEO)"}]},{"@type":"WebSite","@id":"https:\/\/www.solutionstreet.com\/blog\/#website","url":"https:\/\/www.solutionstreet.com\/blog\/","name":"Solution Street Blog","description":"Quality Software Engineering - Technology and Consulting Articles","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.solutionstreet.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.solutionstreet.com\/blog\/#\/schema\/person\/c4846451eff30e9514b534b2a2e01696","name":"Peggy Frankel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/af71ceb16f89d32c9bb825a47f8057da9283b4a27a934bf0c47cdef65ad0eb5d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/af71ceb16f89d32c9bb825a47f8057da9283b4a27a934bf0c47cdef65ad0eb5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/af71ceb16f89d32c9bb825a47f8057da9283b4a27a934bf0c47cdef65ad0eb5d?s=96&d=mm&r=g","caption":"Peggy Frankel"},"url":"https:\/\/www.solutionstreet.com\/blog\/author\/pfrankel\/"}]}},"_links":{"self":[{"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/posts\/1233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/comments?post=1233"}],"version-history":[{"count":0,"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/posts\/1233\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/media?parent=1233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/categories?post=1233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.solutionstreet.com\/blog\/wp-json\/wp\/v2\/tags?post=1233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}