{"id":32712,"date":"2024-04-25T09:15:43","date_gmt":"2024-04-25T07:15:43","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=32712"},"modified":"2024-09-02T09:21:57","modified_gmt":"2024-09-02T07:21:57","slug":"add-authentication-in-a-feathers-js-rest-api","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/","title":{"rendered":"Add authentication in a Feathers.js REST API"},"content":{"rendered":"\n<p>Following on from my previous articles: <a href=\"https:\/\/www.dbi-services.com\/blog\/create-rest-api-from-your-database-in-minute-with-feathers-js\/\">Create REST API from your database in minute with Feathers.js<\/a>, and <a href=\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/\">Add a UI to explore the Feathers.js API<\/a>, today I want to add authentication in my Feathers.js REST API. Creation, update and delete operations will be authenticated, while read will remain public.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-first-step-add-authentication-to-my-application\">First step: add authentication to my application<\/h2>\n\n\n\n<p>I&#8217;m using the code from my previous articles, and I add the authentication to my Feathers.js API. I use the CLI, it&#8217;s quick and easy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npx feathers generate authentication<\/code><\/pre>\n\n\n\n<p>I want a simple user + password authentication. To achieve this, I&#8217;ve configured my authentication service as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>? Which authentication methods do you want to use? Email + Password\n? What is your authentication service name? user\n? What path should the service be registered on? users\n? What database is the service using? SQL\n? Which schema definition format do you want to use? TypeBox<\/code><\/pre>\n\n\n\n<p>Now I have an authentication method available in my application. If you look at the code, a new service users has been generated. It&#8217;s used to be retrieved users from the database. I won&#8217;t explain here how to create a user, but you can refer to the <a href=\"https:\/\/feathersjs.com\/guides\/basics\/login\">documentation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-second-step-authenticate-the-service\">Second step: authenticate the service<\/h2>\n\n\n\n<p>Additionally, I&#8217;m now going to define which method is authenticated in my service. To do this, I open the workshop.ts file. The important part of the code for this configuration is this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  \/\/ Initialize hooks\n  app.service(workshopPath).hooks({\n    around: {\n      all: &#091;\n        schemaHooks.resolveExternal(workshopExternalResolver),\n        schemaHooks.resolveResult(workshopResolver)\n      ]\n    },\n    before: {\n      all: &#091;\n        schemaHooks.validateQuery(workshopQueryValidator),\n        schemaHooks.resolveQuery(workshopQueryResolver)\n      ],\n      find: &#091;],\n      get: &#091;],\n      create: &#091;\n        schemaHooks.validateData(workshopDataValidator),\n        schemaHooks.resolveData(workshopDataResolver)\n      ],\n      patch: &#091;\n        schemaHooks.validateData(workshopPatchValidator),\n        schemaHooks.resolveData(workshopPatchResolver)\n      ],\n      remove: &#091;]\n    },\n    after: {\n      all: &#091;]\n    },\n    error: {\n      all: &#091;]\n    }\n  })<\/code><\/pre>\n\n\n\n<p>I add the &#8220;authenticate(&#8216;jwt&#8217;)&#8221; function in create, patch and remove into the before block. This function check the credentials before the call of the main function. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  before: {\n    ...\n    create: &#091;\n      schemaHooks.validateData(workshopDataValidator),\n      schemaHooks.resolveData(workshopDataResolver),\n      authenticate('jwt')\n    ],\n    patch: &#091;\n      schemaHooks.validateData(workshopPatchValidator),\n      schemaHooks.resolveData(workshopPatchResolver),\n      authenticate('jwt')\n    ],\n    remove: &#091;authenticate('jwt')]\n  },<\/code><\/pre>\n\n\n\n<p>The basic authentication (user + password from the db) is managed by Feathers.js, which generates a JWT token on login.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-verify-service-authentication\">Verify service authentication<\/h2>\n\n\n\n<p>Finally, I test the authentication of my service. To do this, I use the Swagger interface configured earlier. The POST method for creating a new record is now authenticated:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"463\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1024x463.png\" alt=\"Swagger authentication testing\" class=\"wp-image-32738\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1024x463.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-300x136.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-768x347.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1536x695.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-2048x926.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Authentication works correctly, but as I don&#8217;t pass a JWT token, I get the error 401 Unauthorized.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>Adding authentication to a Feathers.js REST API is as easy as generating the service itself. <\/p>\n\n\n\n<p>Feathers.js offers different authentication strategies, such as Local (user + password), JWT or oAuth. But if that&#8217;s not enough, you can also create a custom strategy.<\/p>\n\n\n\n<p>In a future article, I&#8217;ll explain how to adapt the Swagger interface to manage authentication.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-to-continue-with-feathers-js\">To continue with Feathers.js<\/h2>\n\n\n\n<p>See related articles:<\/p>\n\n\n\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/manage-feathers-js-authentication-in-swagger-ui\/\">Manage Feathers.js authentication in Swagger UI<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Following on from my previous articles: Create REST API from your database in minute with Feathers.js, and Add a UI to explore the Feathers.js API, today I want to add authentication in my Feathers.js REST API. Creation, update and delete operations will be authenticated, while read will remain public. First step: add authentication to my [&hellip;]<\/p>\n","protected":false},"author":72,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[368,3029],"tags":[979,995,1090,1001,3257],"type_dbi":[],"class_list":["post-32712","post","type-post","status-publish","format-standard","hentry","category-development-performance","category-web","tag-api","tag-authentication","tag-javascript","tag-node-js","tag-typescript"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Add authentication in a Feathers.js REST API - dbi Blog<\/title>\n<meta name=\"description\" content=\"How to add authentication to a Feathers.js REST API, and customize the methods that need to be authenticated.\" \/>\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.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Add authentication in a Feathers.js REST API\" \/>\n<meta property=\"og:description\" content=\"How to add authentication to a Feathers.js REST API, and customize the methods that need to be authenticated.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-25T07:15:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-02T07:21:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1024x463.png\" \/>\n<meta name=\"author\" content=\"Nicolas Meunier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nicolas Meunier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/\"},\"author\":{\"name\":\"Nicolas Meunier\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe\"},\"headline\":\"Add authentication in a Feathers.js REST API\",\"datePublished\":\"2024-04-25T07:15:43+00:00\",\"dateModified\":\"2024-09-02T07:21:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/\"},\"wordCount\":373,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1024x463.png\",\"keywords\":[\"api\",\"Authentication\",\"JavaScript\",\"Node.js\",\"TypeScript\"],\"articleSection\":[\"Development &amp; Performance\",\"Web\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/\",\"name\":\"Add authentication in a Feathers.js REST API - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1024x463.png\",\"datePublished\":\"2024-04-25T07:15:43+00:00\",\"dateModified\":\"2024-09-02T07:21:57+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe\"},\"description\":\"How to add authentication to a Feathers.js REST API, and customize the methods that need to be authenticated.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call.png\",\"width\":2866,\"height\":1296},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add authentication in a Feathers.js REST API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe\",\"name\":\"Nicolas Meunier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g\",\"caption\":\"Nicolas Meunier\"},\"description\":\"Nicolas Meunier has more than 20 years of experience in IT web technologies as well as in development. He is specialized in Cloud solutions such as CI\/CD. His expertise also includes Kubernetes, Docker, Jenkins-X and Azure Devops. Florence Porret (FP is IT Consultant in Cloud solutions. Prior to joining dbi services, Nicolas Meunier was developer and maintainer of a CI\/CD pipelines at CEGID in Paris. He also worked as Lead Developer at KPMG. Florence Porret (FP holds a superior technical diploma in IT development. His branch-related experience covers software and cloud platform architecture.\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/nicolasmeunier\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Add authentication in a Feathers.js REST API - dbi Blog","description":"How to add authentication to a Feathers.js REST API, and customize the methods that need to be authenticated.","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.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/","og_locale":"en_US","og_type":"article","og_title":"Add authentication in a Feathers.js REST API","og_description":"How to add authentication to a Feathers.js REST API, and customize the methods that need to be authenticated.","og_url":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/","og_site_name":"dbi Blog","article_published_time":"2024-04-25T07:15:43+00:00","article_modified_time":"2024-09-02T07:21:57+00:00","og_image":[{"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1024x463.png","type":"","width":"","height":""}],"author":"Nicolas Meunier","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Nicolas Meunier","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/"},"author":{"name":"Nicolas Meunier","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe"},"headline":"Add authentication in a Feathers.js REST API","datePublished":"2024-04-25T07:15:43+00:00","dateModified":"2024-09-02T07:21:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/"},"wordCount":373,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1024x463.png","keywords":["api","Authentication","JavaScript","Node.js","TypeScript"],"articleSection":["Development &amp; Performance","Web"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/","url":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/","name":"Add authentication in a Feathers.js REST API - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call-1024x463.png","datePublished":"2024-04-25T07:15:43+00:00","dateModified":"2024-09-02T07:21:57+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe"},"description":"How to add authentication to a Feathers.js REST API, and customize the methods that need to be authenticated.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/04\/Authenticated_api_call.png","width":2866,"height":1296},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Add authentication in a Feathers.js REST API"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe","name":"Nicolas Meunier","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g","caption":"Nicolas Meunier"},"description":"Nicolas Meunier has more than 20 years of experience in IT web technologies as well as in development. He is specialized in Cloud solutions such as CI\/CD. His expertise also includes Kubernetes, Docker, Jenkins-X and Azure Devops. Florence Porret (FP is IT Consultant in Cloud solutions. Prior to joining dbi services, Nicolas Meunier was developer and maintainer of a CI\/CD pipelines at CEGID in Paris. He also worked as Lead Developer at KPMG. Florence Porret (FP holds a superior technical diploma in IT development. His branch-related experience covers software and cloud platform architecture.","url":"https:\/\/www.dbi-services.com\/blog\/author\/nicolasmeunier\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/32712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/72"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=32712"}],"version-history":[{"count":13,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/32712\/revisions"}],"predecessor-version":[{"id":34632,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/32712\/revisions\/34632"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=32712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=32712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=32712"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=32712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}