{"id":5,"date":"2019-01-10T08:07:37","date_gmt":"2019-01-10T08:07:37","guid":{"rendered":"https:\/\/crosstechit.com\/blog\/?p=5"},"modified":"2019-01-13T11:52:15","modified_gmt":"2019-01-13T11:52:15","slug":"laravel-basic-authentication-with-passport-dingo-api","status":"publish","type":"post","link":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/","title":{"rendered":"Laravel Basic Authentication with Passport &#038; Dingo API &#8211; Setup"},"content":{"rendered":"\n<p>Why you might be interested?<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>You might save few hours of googling <\/li><li>You <strong>care <\/strong>about your users so you don&#8217;t want them to be hacked by a 10yo<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Our mission<\/h1>\n\n\n\n<p>Create a secure API boilerplate which can be consumed by any client (web &amp; mobile app)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Final result<\/h1>\n\n\n\n<p>If you want to skip the process here you can find the result: <a href=\"https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate\">https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Let&#8217;s start!<\/h1>\n\n\n\n<p>The setup is inspired by ChristophSchmidl&#8217;s boilerplate available here: <a href=\"https:\/\/github.com\/ChristophSchmidl\/laravel-5.4-dingo-passport-boilerplate\">https:\/\/github.com\/ChristophSchmidl\/laravel-5.4-dingo-passport-boilerplate<\/a><\/p>\n\n\n\n<p>Install Laravel: <a href=\"https:\/\/laravel.com\/docs\/5.7\/installation#installing-laravel\" target=\"_blank\">https:\/\/laravel.com\/docs\/5.7\/installation#installing-laravel<\/a><\/p>\n\n\n\n<p>Add Dingo API to composer.json (find latest version here: https:\/\/github.com\/dingo\/api\/releases):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"require\": {     <br>    ...     <br>    \"dingo\/api\": \"2.0.0-alpha1\" <br>}<\/pre>\n\n\n\n<p>Put <code>Dingo\\Api\\Provider\\LaravelServiceProvider::class<\/code> into the providers array of config\/app.php&nbsp;<\/p>\n\n\n\n<p>Run&nbsp;<code>php artisan vendor:publish --provider=\"Dingo\\Api\\Provider\\LaravelServiceProvider\"<\/code><\/p>\n\n\n\n<p>Put  <code>'DingoApi' =&gt; Dingo\\Api\\Facade\\API::class<\/code>,&nbsp;<code>'DingoRoute' =&gt; Dingo\\Api\\Facade\\Route::class<\/code> into aliases array of config\/app.php<\/p>\n\n\n\n<p>Update .env file and insert: <br><code>API_PREFIX=api\nAPI_VERSION=v1<\/code><\/p>\n\n\n\n<p>Install <a href=\"https:\/\/github.com\/barryvdh\/laravel-cors\">CORS<\/a>. Using this you can handle Cross-Origin Resource Sharing headers and OPTIONS requests.<\/p>\n\n\n\n<p>Run: <code>php artisan vendor:publish --provider=\"Barryvdh\\Cors\\ServiceProvider\"<\/code><\/p>\n\n\n\n<p>Make CORS available to all routes. You can change that behaviour by updating&nbsp;<code>app\/Http\/Kernel.php<\/code>&nbsp;and put&nbsp;<code>\\Barryvdh\\Cors\\HandleCors::class<\/code>&nbsp;into your&nbsp;<code>middleware<\/code> array.<\/p>\n\n\n\n<p>Move the User-model from <code>app<\/code> into namespace&nbsp;<code>App\\Models<\/code>&nbsp;and adjust all config files (if any) so everything works as before.\n<br>In <code>config\/auth.php<\/code> update:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">'providers' =&gt; [<br>    'users' =&gt; [<br>        'driver' =&gt; 'eloquent',<br>        'model' =&gt; App\\Models\\User::class,<br>    ],<br>    ...<br>],<\/pre>\n\n\n\n<p> Install Passport via <code>composer require laravel\/passport<\/code> <br>Register <code>PassportServiceProvider<\/code> by adding <code>Laravel\\Passport\\PassportServiceProvider::class<\/code> to the providers array of <code>config\/app.php<\/code><\/p>\n\n\n\n<p> Run&nbsp;<code>php artisan vendor:publish --tag=passport-migrations<\/code>&nbsp;to put the default Passport migrations into&nbsp;<code>database\/migrations<\/code>&nbsp;folder.<\/p>\n\n\n\n<p>Run <code>php artisan migrate<\/code><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Error?!<\/h1>\n\n\n\n<p>If you receive: &#8220;Specified key was too long; max key length is 767 bytes&#8221;<\/p>\n\n\n\n<p>Open <code>app\/Providers\/AppServiceProvider.php<\/code> and inside the boot method set a default string length:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">use Illuminate\\Support\\Facades\\Schema;<br><br>public function boot() {<br>     Schema::defaultStringLength(191);<br>}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">We are close<\/h1>\n\n\n\n<p>Run&nbsp;<code>php artisan passport:install<\/code>&nbsp;This command will create the encryption keys needed to generate secure access tokens. In addition, the command will create &#8220;personal access&#8221; and &#8220;password grant&#8221; clients which will be used to generate access tokens.<\/p>\n\n\n\n<p>Add&nbsp;<code>Laravel\\Passport\\HasApiTokens<\/code>&nbsp;to&nbsp;<code>App\\Models\\User<\/code><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Final steps<\/h1>\n\n\n\n<p>Thanks to <a href=\"https:\/\/github.com\/ChristophSchmidl\">ChristophSchmidl<\/a> we have some nicely crafted controllers and transformers which we will just describe in few words. You can find them on <a href=\"https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate\">github<\/a>.<br>Under <code>app\/Http\/Controllers\/Api\/V1<\/code> we create a custom Controller named <code><a href=\"https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate\/blob\/master\/app\/Http\/Controllers\/Api\/V1\/DingoController.php\">DingoController<\/a><\/code> which will throw all Laravel exceptions and validation errors to our API&nbsp;responses. You can also find there a <a href=\"https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate\/blob\/master\/app\/Http\/Controllers\/Api\/V1\/Auth\/LoginController.php\">LoginController<\/a> and a <a href=\"https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate\/blob\/master\/app\/Http\/Controllers\/Api\/V1\/Auth\/RegisterController.php\">RegisterController<\/a> which validate the input and return the responses.<\/p>\n\n\n\n<p>Under <code>app\/Http<\/code> we have created a folder named <a href=\"https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate\/tree\/master\/app\/Http\/Transformers\">Transformers<\/a>. These are meant to convert your Eloquent objects (eg. User) to a custom JSON which is sent in your API response.<\/p>\n\n\n\n<p>In <code>app\/Providers<\/code> We have <a href=\"https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate\/blob\/master\/app\/Providers\/DingoExceptionHandlerProvider.php\">DingoExceptionHandlerProvider<\/a> which handles the HTTP errors related to authentication (eg. 401, 403) and <a href=\"https:\/\/github.com\/danielcrt\/laravel5.7-passport-dingo-api-boilerplate\/blob\/master\/app\/Providers\/DingoPassportServiceProvider.php\">DingoPassportServiceProvider<\/a> validates the Authorization header.<\/p>\n\n\n\n<p>And finally in <code>routes\/api.php<\/code> you can see some defined routes for Login, Register and Logout.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">You&#8217;re done!<\/h1>\n\n\n\n<p>Thanks for reading by here!<\/p>\n\n\n\n<p>If you have any questions or improvements please let us know in comments section.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Why you might be interested? 1. You might save few hours of your time. 2. You care about your users security so you don&#8217;t want them to be hacked by a 10yo<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-5","post","type-post","status-publish","format-standard","hentry","category-back-end-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Laravel Basic Authentication with Passport &amp; Dingo API - Setup - Crosstech IT | 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:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laravel Basic Authentication with Passport &amp; Dingo API - Setup - Crosstech IT | Blog\" \/>\n<meta property=\"og:description\" content=\"Why you might be interested? 1. You might save few hours of your time. 2. You care about your users security so you don&#039;t want them to be hacked by a 10yo\" \/>\n<meta property=\"og:url\" content=\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Crosstech IT | Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-10T08:07:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-13T11:52:15+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Isac\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Isac\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/\"},\"author\":{\"name\":\"Daniel Isac\",\"@id\":\"https:\/\/crosstechit.com\/blog\/#\/schema\/person\/87da6aed97c0aeed77f83359af00d85e\"},\"headline\":\"Laravel Basic Authentication with Passport &#038; Dingo API &#8211; Setup\",\"datePublished\":\"2019-01-10T08:07:37+00:00\",\"dateModified\":\"2019-01-13T11:52:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/\"},\"wordCount\":446,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/crosstechit.com\/blog\/#organization\"},\"articleSection\":[\"Back end development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/\",\"url\":\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/\",\"name\":\"Laravel Basic Authentication with Passport & Dingo API - Setup - Crosstech IT | Blog\",\"isPartOf\":{\"@id\":\"https:\/\/crosstechit.com\/blog\/#website\"},\"datePublished\":\"2019-01-10T08:07:37+00:00\",\"dateModified\":\"2019-01-13T11:52:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/crosstechit.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel Basic Authentication with Passport &#038; Dingo API &#8211; Setup\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/crosstechit.com\/blog\/#website\",\"url\":\"https:\/\/crosstechit.com\/blog\/\",\"name\":\"Crosstech IT | Blog\",\"description\":\"Apps. Smart. Fun.\",\"publisher\":{\"@id\":\"https:\/\/crosstechit.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/crosstechit.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/crosstechit.com\/blog\/#organization\",\"name\":\"Crosstech IT | Blog\",\"url\":\"https:\/\/crosstechit.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/crosstechit.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/crosstechit.com\/blog\/wp-content\/uploads\/2019\/01\/cropped-favicon.png\",\"contentUrl\":\"https:\/\/crosstechit.com\/blog\/wp-content\/uploads\/2019\/01\/cropped-favicon.png\",\"width\":190,\"height\":190,\"caption\":\"Crosstech IT | Blog\"},\"image\":{\"@id\":\"https:\/\/crosstechit.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/crosstechit.com\/blog\/#\/schema\/person\/87da6aed97c0aeed77f83359af00d85e\",\"name\":\"Daniel Isac\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/crosstechit.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/382d66c0eb0b506a1e6e5a10ae490d874d790f13b1af6a6f3958c1a7b3f23743?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/382d66c0eb0b506a1e6e5a10ae490d874d790f13b1af6a6f3958c1a7b3f23743?s=96&d=mm&r=g\",\"caption\":\"Daniel Isac\"},\"url\":\"https:\/\/crosstechit.com\/blog\/author\/danielcrt\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Laravel Basic Authentication with Passport & Dingo API - Setup - Crosstech IT | 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:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/","og_locale":"en_US","og_type":"article","og_title":"Laravel Basic Authentication with Passport & Dingo API - Setup - Crosstech IT | Blog","og_description":"Why you might be interested? 1. You might save few hours of your time. 2. You care about your users security so you don't want them to be hacked by a 10yo","og_url":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/","og_site_name":"Crosstech IT | Blog","article_published_time":"2019-01-10T08:07:37+00:00","article_modified_time":"2019-01-13T11:52:15+00:00","author":"Daniel Isac","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Daniel Isac","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/#article","isPartOf":{"@id":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/"},"author":{"name":"Daniel Isac","@id":"https:\/\/crosstechit.com\/blog\/#\/schema\/person\/87da6aed97c0aeed77f83359af00d85e"},"headline":"Laravel Basic Authentication with Passport &#038; Dingo API &#8211; Setup","datePublished":"2019-01-10T08:07:37+00:00","dateModified":"2019-01-13T11:52:15+00:00","mainEntityOfPage":{"@id":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/"},"wordCount":446,"commentCount":0,"publisher":{"@id":"https:\/\/crosstechit.com\/blog\/#organization"},"articleSection":["Back end development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/","url":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/","name":"Laravel Basic Authentication with Passport & Dingo API - Setup - Crosstech IT | Blog","isPartOf":{"@id":"https:\/\/crosstechit.com\/blog\/#website"},"datePublished":"2019-01-10T08:07:37+00:00","dateModified":"2019-01-13T11:52:15+00:00","breadcrumb":{"@id":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/crosstechit.com\/blog\/2019\/01\/10\/laravel-basic-authentication-with-passport-dingo-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/crosstechit.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Laravel Basic Authentication with Passport &#038; Dingo API &#8211; Setup"}]},{"@type":"WebSite","@id":"https:\/\/crosstechit.com\/blog\/#website","url":"https:\/\/crosstechit.com\/blog\/","name":"Crosstech IT | Blog","description":"Apps. Smart. Fun.","publisher":{"@id":"https:\/\/crosstechit.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/crosstechit.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/crosstechit.com\/blog\/#organization","name":"Crosstech IT | Blog","url":"https:\/\/crosstechit.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/crosstechit.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/crosstechit.com\/blog\/wp-content\/uploads\/2019\/01\/cropped-favicon.png","contentUrl":"https:\/\/crosstechit.com\/blog\/wp-content\/uploads\/2019\/01\/cropped-favicon.png","width":190,"height":190,"caption":"Crosstech IT | Blog"},"image":{"@id":"https:\/\/crosstechit.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/crosstechit.com\/blog\/#\/schema\/person\/87da6aed97c0aeed77f83359af00d85e","name":"Daniel Isac","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/crosstechit.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/382d66c0eb0b506a1e6e5a10ae490d874d790f13b1af6a6f3958c1a7b3f23743?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/382d66c0eb0b506a1e6e5a10ae490d874d790f13b1af6a6f3958c1a7b3f23743?s=96&d=mm&r=g","caption":"Daniel Isac"},"url":"https:\/\/crosstechit.com\/blog\/author\/danielcrt\/"}]}},"_links":{"self":[{"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/posts\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/comments?post=5"}],"version-history":[{"count":37,"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":71,"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/posts\/5\/revisions\/71"}],"wp:attachment":[{"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/media?parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/categories?post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crosstechit.com\/blog\/wp-json\/wp\/v2\/tags?post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}