{"id":467,"date":"2019-12-20T08:51:48","date_gmt":"2019-12-20T08:51:48","guid":{"rendered":"https:\/\/appfinz.com\/blogs\/?p=467"},"modified":"2020-12-28T09:31:12","modified_gmt":"2020-12-28T09:31:12","slug":"laravel-shift-blueprint","status":"publish","type":"post","link":"https:\/\/www.appfinz.com\/blogs\/laravel-shift-blueprint\/","title":{"rendered":"Laravel Shift Blueprint"},"content":{"rendered":"\n<p>Laravel Shift Blueprint is a code generation tool for Laravel developers by&nbsp;<a href=\"https:\/\/github.com\/jasonmccreary\">Jason McCreary<\/a>:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><em>Blueprint<\/em>&nbsp;is an open-source tool for&nbsp;<strong>rapidly generating multiple<\/strong>&nbsp;Laravel components from a&nbsp;<strong>single, human-readable<\/strong>&nbsp;definition.<\/p><\/blockquote>\n\n\n\n<p>Blueprint works by using a draft file (YAML) that contains definitions of the components it should generate. The&nbsp;<a href=\"https:\/\/github.com\/laravel-shift\/blueprint\/blob\/master\/README.md\">readme<\/a>&nbsp;provides an example draft.yml file in the root of a Laravel v6.x project:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>models:\n  Post:\n    title: string:400\n    content: longtext\n    published_at: nullable timestamp\n\ncontrollers:\n  Post:\n    index:\n      query: all\n      render: post.index with:posts\n\n    store:\n      validate: title, content\n      save: post\n      send: ReviewNotification to:post.author with:post\n      dispatch: SyncMedia with:post\n      fire: NewPost with:post\n      flash: post.title\n      redirect: post.index<\/code><\/pre>\n\n\n\n<p>The draft file produces a Post model with fillable fields, attribute casts, dates, and relationships. For a full list of examples, be sure to check out the project\u2019s readme.<\/p>\n\n\n\n<p>The quickest way to understand what Blueprint is all about is watching this Building Blueprint demo:<\/p>\n\n\n\n<iframe loading=\"lazy\" width=\"100%\" height=\"350\" src=\"https:\/\/www.youtube.com\/embed\/A_gUCwni_6c\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"><\/iframe>\n\n\n\n<p> You can learn more about this package, get full installation instructions, and view the source code on GitHub at&nbsp;<a href=\"https:\/\/github.com\/laravel-shift\/blueprint\">laravel-shift\/blueprint<\/a>. <\/p>\n\n\n\n<p>Watch a quick&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=A_gUCwni_6c\">demo of Blueprint<\/a>&nbsp;in action and continue reading this document to get started.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Installation<\/li><li>Requirements<\/li><li>Basic Usage<\/li><li>Defining Components<\/li><li>Contributing<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n\n\n\n<p>You can install Blueprint via composer using the following command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">composer require --dev laravel-shift\/blueprint<\/pre>\n\n\n\n<p>Blueprint will automatically register itself using&nbsp;<a href=\"https:\/\/laravel.com\/docs\/packages#package-discovery\">package discovery<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Requirements<\/h4>\n\n\n\n<p>Blueprint requires a Laravel application running version 6.0 or higher.<\/p>\n\n\n\n<p>While Blueprint may be more flexible in a future version, it currently assumes a standard project structure using the default&nbsp;<code>App<\/code>&nbsp;namespace.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Basic Usage<\/h4>\n\n\n\n<p>Blueprint adds an artisan command.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">php artisan blueprint:build [draft]<\/pre>\n\n\n\n<p>The&nbsp;<em>draft<\/em>&nbsp;file contains a&nbsp;definition of the components&nbsp;to generate. By default, the&nbsp;<code>blueprint:build<\/code>&nbsp;command attempts to load a&nbsp;<code>draft.yaml<\/code>&nbsp;file from the project root folder.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Defining Components<\/h4>\n\n\n\n<p>Use Blueprint&#8217;s&nbsp;<code>artisan<\/code>&nbsp;commands you may generate multiple Laravel components from a single definition called a&nbsp;<em>draft<\/em>&nbsp;file.<\/p>\n\n\n\n<p>Within this draft file you define&nbsp;<em>models<\/em>&nbsp;and&nbsp;<em>controllers<\/em>&nbsp;using an expressive, human-readable YAML syntax.<\/p>\n\n\n\n<p>Let&#8217;s review the following draft file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">models:\n  Post:\n    title: string:400\n    content: longtext\n    published_at: nullable timestamp\n\ncontrollers:\n  Post:\n    index:\n      query: all\n      render: post.index with:posts\n\n    store:\n      validate: title, content\n      save: post\n      send: ReviewNotification to:post.author with:post\n      dispatch: SyncMedia with:post\n      fire: NewPost with:post\n      flash: post.title\n      redirect: post.index<\/pre>\n\n\n\n<p>From these simple 20 lines of YAML, Blueprint will generate all of the following Laravel components:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A&nbsp;<em>model<\/em>&nbsp;class for&nbsp;<code>Post<\/code>&nbsp;complete with&nbsp;<code>fillable<\/code>,&nbsp;<code>casts<\/code>, and&nbsp;<code>dates<\/code>&nbsp;properties, as well as relationships methods.<\/li><li>A&nbsp;<em>migration<\/em>&nbsp;to create the&nbsp;<code>posts<\/code>&nbsp;table.<\/li><li>A&nbsp;<a href=\"https:\/\/laravel.com\/docs\/database-testing\"><em>factory<\/em><\/a>&nbsp;intelligently setting columns with fake data.<\/li><li>A&nbsp;<em>controller<\/em>&nbsp;class for&nbsp;<code>PostController<\/code>&nbsp;with&nbsp;<code>index<\/code>&nbsp;and&nbsp;<code>store<\/code>&nbsp;actions complete with code generated for each&nbsp;statement.<\/li><li><em>Routes<\/em>&nbsp;for the&nbsp;<code>PostController<\/code>&nbsp;actions.<\/li><li>A&nbsp;<a href=\"https:\/\/laravel.com\/docs\/validation#form-request-validation\"><em>form request<\/em><\/a>&nbsp;of&nbsp;<code>StorePostRequest<\/code>&nbsp;validating&nbsp;<code>title<\/code>&nbsp;and&nbsp;<code>content<\/code>&nbsp;based on the&nbsp;<code>Post<\/code>&nbsp;model definition.<\/li><li>A&nbsp;<em>mailable<\/em>&nbsp;class for&nbsp;<code>ReviewNotification<\/code>&nbsp;complete with a&nbsp;<code>post<\/code>&nbsp;property set through the&nbsp;<em>constructor<\/em>.<\/li><li>A&nbsp;<em>job<\/em>&nbsp;class for&nbsp;<code>SyncMedia<\/code>&nbsp;complete with a&nbsp;<code>post<\/code>&nbsp;property set through the&nbsp;<em>constructor<\/em>.<\/li><li>An&nbsp;<em>event<\/em>&nbsp;class for&nbsp;<code>NewPost<\/code>&nbsp;complete with a&nbsp;<code>post<\/code>&nbsp;property set through the&nbsp;<em>constructor<\/em>.<\/li><li>A&nbsp;<em>Blade template<\/em>&nbsp;of&nbsp;<code>post\/index.blade.php<\/code>&nbsp;rendered by&nbsp;<code>PostController@index<\/code>.<\/li><\/ul>\n\n\n\n<p>While this draft file only defines a single model and controller, you may define multiple&nbsp;models&nbsp;and&nbsp;controllers.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Models<\/h4>\n\n\n\n<p>Within the&nbsp;<code>models<\/code>&nbsp;section of a draft file you may define multiple models. Each model begins with a&nbsp;<em>name<\/em>&nbsp;followed by a list of columns. Columns are&nbsp;<code>key: value<\/code>&nbsp;pairs where&nbsp;<code>key<\/code>&nbsp;is the column name and&nbsp;<code>value<\/code>&nbsp;defines its attributes.<\/p>\n\n\n\n<p>Expanding on the example above, this draft file defines multiple models:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">models:\n  Post:\n    title: string:400\n    content: longtext\n    published_at: nullable timestamp\n\n  Comment:\n    content: longtext\n    published_at: nullable timestamp\n\n  # additional models...<\/pre>\n\n\n\n<p>From this definition, Blueprint creates two models:&nbsp;<code>Post<\/code>&nbsp;and&nbsp;<code>Comment<\/code>, respectively. You may continue to define additional models.<\/p>\n\n\n\n<p>Blueprint recommends defining the model name in its&nbsp;<em>StudlyCase<\/em>, singular form to follow Laravel naming conventions. For example,&nbsp;<code>Post<\/code>&nbsp;instead of&nbsp;<code>post<\/code>&nbsp;or&nbsp;<code>posts<\/code>.<\/p>\n\n\n\n<p>Similarly, column names will be used as-is. The attributes of these columns may be any of the&nbsp;<a href=\"https:\/\/laravel.com\/docs\/migrations#creating-columns\">column types<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/laravel.com\/docs\/migrations#column-modifiers\">column modifiers<\/a>&nbsp;available in Laravel. You may define these as-is or using lowercase.<\/p>\n\n\n\n<p>For complex attributes, you may use a&nbsp;<code>key:value<\/code>&nbsp;pair. From these example above,&nbsp;<code>string:400<\/code>&nbsp;defines a&nbsp;<code>string<\/code>&nbsp;column type with a maximum length of&nbsp;<code>400<\/code>&nbsp;characters. Other examples include&nbsp;<code>enum:'foo','bar','baz'<\/code>&nbsp;or&nbsp;<code>decimal:10,2<\/code>.<\/p>\n\n\n\n<p>By default, each model will automatically be defined with an&nbsp;<code>id<\/code>&nbsp;and&nbsp;<em>timestamps<\/em>&nbsp;columns. To disable these columns you may define them with a&nbsp;<code>false<\/code>&nbsp;value. For example,&nbsp;<code>timestamps: false<\/code>.<\/p>\n\n\n\n<p>Blueprint also offers additional&nbsp;<em>shorthands<\/em>&nbsp;which will be expanded into valid YAML. Shorthands include an&nbsp;<code>id<\/code>&nbsp;data type, as well as defining&nbsp;soft deleting&nbsp;models.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">models:\n  Comment:\n    user_id: id\n    softDeletes\n    # ...<\/pre>\n\n\n\n<p>Using these shorthands, Blueprint will generate a&nbsp;<code>Comment<\/code>&nbsp;class using the&nbsp;<code>SoftDeletes<\/code>&nbsp;trait. It will also create a&nbsp;<code>user_id<\/code>&nbsp;column with the appropriate data type for an integer foreign key.<\/p>\n\n\n\n<p>Blueprint also inspects columns and assigns them to&nbsp;<code>fillable<\/code>,&nbsp;<code>casts<\/code>, and&nbsp;<code>dates<\/code>&nbsp;properties, as well as generate relationships methods.<\/p>\n\n\n\n<p>By default, all columns except for&nbsp;<code>id<\/code>&nbsp;and&nbsp;<em>timestamps<\/em>&nbsp;will be added to the&nbsp;<code>fillable<\/code>&nbsp;property.<\/p>\n\n\n\n<p>Where appropriate, Blueprint will&nbsp;<a href=\"https:\/\/laravel.com\/docs\/5.8\/eloquent-mutators#attribute-casting\">cast<\/a>&nbsp;columns to&nbsp;<code>integer<\/code>,&nbsp;<code>boolean<\/code>, and&nbsp;<code>decimal<\/code>&nbsp;types. Any&nbsp;<em>date<\/em>&nbsp;columns will be added to the&nbsp;<code>dates<\/code>&nbsp;properties.<\/p>\n\n\n\n<p>Columns which use an&nbsp;<code>id<\/code>&nbsp;data type or end with&nbsp;<code>_id<\/code>&nbsp;will be used to generate&nbsp;<code>belongsTo<\/code>&nbsp;relationships. By default, Blueprint uses the column name prefix for the related model. If you define a relationship for a different model, you may use a&nbsp;<code>id:model<\/code>&nbsp;syntax.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">models:\n  Post:\n    author_id: id:user\n    # ...<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Controllers<\/h3>\n\n\n\n<p>Similar to&nbsp;<code>models<\/code>, you may also define multiple&nbsp;<code>controllers<\/code>. Within the&nbsp;<code>controllers<\/code>&nbsp;section you define a&nbsp;<em>controller<\/em>&nbsp;by name. Each controller may define multiple&nbsp;<code>actions<\/code>&nbsp;which contain a list of&nbsp;statements.<\/p>\n\n\n\n<p>Expanding on the example above, this draft file defines multiple controllers:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">controllers:\n  Post:\n    index:\n      query: all\n      render: post.index with:posts\n    create:\n      render: post.create\n    store:\n      validate: title, content\n      save: post\n      redirect: post.index\n\n  Comment:\n    show:\n      render: comment.show with:show\n\n  # additional controller...<\/pre>\n\n\n\n<p>From this definition, Blueprint will generate two controllers. A&nbsp;<code>PostController<\/code>&nbsp;with&nbsp;<code>index<\/code>,&nbsp;<code>create<\/code>, and&nbsp;<code>store<\/code>&nbsp;actions. And a&nbsp;<code>CommentController<\/code>&nbsp;with a&nbsp;<code>show<\/code>&nbsp;action.<\/p>\n\n\n\n<p>While you may specify the full name of a controller, Blueprint will automatically suffix names with&nbsp;<code>Controller<\/code>.<\/p>\n\n\n\n<p>Blueprint encourages you to define&nbsp;<a href=\"https:\/\/laravel.com\/docs\/controllers#resource-controllers\">resource controllers<\/a>. Doing so allows Blueprint to infer details and generate even more code automatically.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Statements<\/h4>\n\n\n\n<p>Blueprint comes with an expressive set of statements which implicitly define additional components to generate. Each statement is a&nbsp;<code>key: value<\/code>&nbsp;pair.<\/p>\n\n\n\n<p>The&nbsp;<code>key<\/code>&nbsp;defines the&nbsp;<em>type<\/em>&nbsp;of statement to generate. Currently, Blueprint supports the following types of statements:validate<\/p>\n\n\n\n<p>Generates a form request with&nbsp;<em>rules<\/em>&nbsp;based on the referenced model definition. Blueprint accepts a&nbsp;<code>value<\/code>&nbsp;containing a comma separated list of column names.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">validate: title, content, author_id<\/pre>\n\n\n\n<p>Blueprint also updates the type-hint of the injected request object.find<\/p>\n\n\n\n<p>Generates an Eloquent&nbsp;<code>find<\/code>&nbsp;statement. If the&nbsp;<code>value<\/code>&nbsp;provided is a qualified&nbsp;reference, Blueprint will expand the reference to determine the model. Otherwise, Blueprint will attempt to use the controller to determine the related model.query<\/p>\n\n\n\n<p>Generates an Eloquent query statement using&nbsp;<code>key:value<\/code>&nbsp;pairs provided in&nbsp;<code>value<\/code>. Keys may be any of the basic query builder methods for&nbsp;<a href=\"https:\/\/laravel.com\/docs\/queries#where-clauses\"><code>where<\/code>&nbsp;clauses<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/laravel.com\/docs\/queries#ordering-grouping-limit-and-offset\">ordering<\/a>.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">query: where:title where:content order:published_at limit:5<\/pre>\n\n\n\n<p>Currently, Blueprint supports generating query statements for&nbsp;<code>all<\/code>,&nbsp;<code>get<\/code>,&nbsp;<code>pluck<\/code>, and&nbsp;<code>count<\/code>.save\/delete<\/p>\n\n\n\n<p>Generates an Eloquent statement for saving a model. Blueprint uses the controller action to infer which statement to generate.<\/p>\n\n\n\n<p>For example, for a&nbsp;<code>store<\/code>&nbsp;controller action, Blueprint will generate a&nbsp;<code>Model::create()<\/code>&nbsp;statement. Otherwise, a&nbsp;<code>$model-&gt;save()<\/code>&nbsp;statement will be generated.<\/p>\n\n\n\n<p>Similarly, within a&nbsp;<code>destroy<\/code>&nbsp;controller action, Blueprint will generate a&nbsp;<code>$model-&gt;delete()<\/code>&nbsp;statement. Otherwise, a&nbsp;<code>Model::destroy()<\/code>&nbsp;statement will be generated.flash<\/p>\n\n\n\n<p>Generates a statement to&nbsp;<a href=\"https:\/\/laravel.com\/docs\/session#flash-data\">flash data<\/a>&nbsp;to the session. Blueprint will use the&nbsp;<code>value<\/code>&nbsp;as the session key and expands the reference as the session value.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">flash: post.title<\/pre>\n\n\n\n<p>renderGenerates a `return view();` statement complete with a template reference and data.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">view: post.show with:post<\/pre>\n\n\n\n<p>When the template does not exist, Blueprint will generate the Blade template for the view.redirectGenerates a `return redirect()` statement using the `value` as a reference to a named route passing any data as parameters.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">redirect: post.show with:post<\/pre>\n\n\n\n<p>dispatch<\/p>\n\n\n\n<p>Generates a statement to dispatch a&nbsp;<a href=\"https:\/\/laravel.com\/docs\/queues#creating-jobs\">Job<\/a>&nbsp;using the&nbsp;<code>value<\/code>&nbsp;to instantiate an object and pass any data.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dispatch: SyncMedia with:post<\/pre>\n\n\n\n<p>If the referenced&nbsp;<em>job<\/em>&nbsp;class does not exist, Blueprint will create one using any data to define properties and a&nbsp;<code>__construct<\/code>&nbsp;the method which assigns them.fire<\/p>\n\n\n\n<p>Generates a statement to dispatch a&nbsp;<a href=\"https:\/\/laravel.com\/docs\/events#defining-events\">Event<\/a>&nbsp;using the&nbsp;<code>value<\/code>&nbsp;to instantiate the object and pass any data.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">fire: NewPost with:post<\/pre>\n\n\n\n<p>If the referenced&nbsp;<em>event<\/em>&nbsp;class does not exist, Blueprint will create one using any data to define properties and a&nbsp;<code>__construct<\/code>&nbsp;the method which assigns them.send<\/p>\n\n\n\n<p>Generates a statement to send a&nbsp;<a href=\"https:\/\/laravel.com\/docs\/mail#generating-mailables\">Mailable<\/a>&nbsp;using the&nbsp;<code>value<\/code>&nbsp;to instantiate the object, specify the recipient, and pass any data.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">send: ReviewNotification to:post.author with:post<\/pre>\n\n\n\n<p>If the referenced&nbsp;<em>mailable<\/em>&nbsp;class does not exist, Blueprint will create one using any data to define properties and a&nbsp;<code>__construct<\/code>&nbsp;the method which assigns them.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">References<\/h4>\n\n\n\n<p>For convenience, Blueprint will use the name of a controller to infer the related model. For example, Blueprint will assume a&nbsp;<code>PostController<\/code>&nbsp;relates to a&nbsp;<code>Post<\/code>&nbsp;model.<\/p>\n\n\n\n<p>The blueprint also supports a dot (.) syntax for more complex references. This allows you to define values that reference columns on other models.<\/p>\n\n\n\n<p>For example, to&nbsp;<em>find<\/em>&nbsp;a&nbsp;<code>User<\/code>&nbsp;model within the&nbsp;<code>PostController<\/code>&nbsp;you may use:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">controllers:\n  Post:\n    show:\n      find: user.id\n      # ...<\/pre>\n\n\n\n<p>While these references will often be used within\u00a0<em>Eloquent<\/em>\u00a0and\u00a0<code>query<\/code>\u00a0statements, they may be used in other statements as well. When necessary, Blueprint will convert these into variable references using an arrow (<code>-><\/code>) syntax.<\/p>\n\n\n\n<p>Tags:\u00a0<a href=\"https:\/\/appfinz.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">website development company in delhi<\/a>||\u00a0<a href=\"https:\/\/appfinz.com\/website-development\/custom-website-development\">website designing company in delhi<\/a>\u00a0||\u00a0<a href=\"https:\/\/appfinz.com\/website-development\/web-portal-development\">b2b portal development company<\/a>\u00a0||\u00a0<a href=\"https:\/\/appfinz.com\/ecommerce\/magento-development\">magento development company in delhi<\/a>\u00a0||\u00a0\u00a0<a href=\"https:\/\/appfinz.com\/website-designing\/website-redesigning\">website redesigning company in delhi<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laravel Shift Blueprint<\/p>\n","protected":false},"author":1,"featured_media":468,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[],"class_list":["post-467","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel"],"_links":{"self":[{"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/posts\/467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/comments?post=467"}],"version-history":[{"count":3,"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/posts\/467\/revisions"}],"predecessor-version":[{"id":795,"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/posts\/467\/revisions\/795"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/media\/468"}],"wp:attachment":[{"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/media?parent=467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/categories?post=467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appfinz.com\/blogs\/wp-json\/wp\/v2\/tags?post=467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}