{"id":251,"date":"2025-06-21T09:53:08","date_gmt":"2025-06-21T09:53:08","guid":{"rendered":"https:\/\/dataopsschool.com\/blog\/?p=251"},"modified":"2025-06-21T11:05:09","modified_gmt":"2025-06-21T11:05:09","slug":"semantic-layer-in-devsecops-a-comprehensive-guide","status":"publish","type":"post","link":"https:\/\/dataopsschool.com\/blog\/semantic-layer-in-devsecops-a-comprehensive-guide\/","title":{"rendered":"Semantic Layer in DevSecOps \u2013 A Comprehensive Guide"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\"><strong>1. Introduction &amp; Overview<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">What is a Semantic Layer?<\/h3>\n\n\n\n<p>A <strong>Semantic Layer<\/strong> is an abstraction layer that sits between raw data sources and end users or applications. It translates complex data structures into user-friendly, consistent business terms\u2014effectively decoupling backend technical implementation from frontend consumption.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cdn.prod.website-files.com\/6064b31ff49a2d31e0493af1\/6335a1ee6c90ed43abbb649d_semantic-layer-feature.webp\" alt=\"\" \/><\/figure>\n\n\n\n<p>In the context of <strong>DevSecOps<\/strong>, a Semantic Layer facilitates <strong>secure, governed, and consistent data access<\/strong> across CI\/CD pipelines, analytics platforms, monitoring systems, and security dashboards.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">History or Background<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Originated in the <strong>Business Intelligence (BI)<\/strong> space to empower non-technical users with self-service data access.<\/li>\n\n\n\n<li>Gained traction in data engineering and <strong>data mesh architectures<\/strong> for standardizing data access.<\/li>\n\n\n\n<li>Now extended to <strong>DevSecOps<\/strong> to align development, security, and operations using <strong>shared semantics for observability, security metadata, and policy enforcement<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Why is it Relevant in DevSecOps?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Reduces risk of data misinterpretation<\/strong> across security and compliance tools.<\/li>\n\n\n\n<li>Ensures <strong>consistent metric definitions<\/strong> for alerts, audits, and SLOs.<\/li>\n\n\n\n<li>Promotes <strong>reusability and automation<\/strong> of policy enforcement and anomaly detection logic.<\/li>\n\n\n\n<li>Strengthens <strong>governance and traceability<\/strong> of how data is accessed and interpreted.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Core Concepts &amp; Terminology<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Key Terms and Definitions<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Term<\/th><th>Definition<\/th><\/tr><\/thead><tbody><tr><td>Semantic Layer<\/td><td>Abstraction layer for translating technical data into business context.<\/td><\/tr><tr><td>Metric Layer<\/td><td>Defines KPIs, security rules, and metrics consistently.<\/td><\/tr><tr><td>Logical Model<\/td><td>Structured definitions of entities, relationships, and hierarchies.<\/td><\/tr><tr><td>Policy-as-Code<\/td><td>Encoding access rules and data policies into code.<\/td><\/tr><tr><td>Data Contract<\/td><td>Agreement between data producers and consumers on data format and meaning.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">How It Fits into the DevSecOps Lifecycle<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Stage<\/th><th>Role of Semantic Layer<\/th><\/tr><\/thead><tbody><tr><td><strong>Plan<\/strong><\/td><td>Define consistent business logic for security and compliance metrics.<\/td><\/tr><tr><td><strong>Develop<\/strong><\/td><td>Enable developers to reference consistent definitions in unit\/integration tests.<\/td><\/tr><tr><td><strong>Build<\/strong><\/td><td>Enrich CI\/CD pipelines with security-aware semantic logic.<\/td><\/tr><tr><td><strong>Test<\/strong><\/td><td>Apply policy-as-code validation using consistent data definitions.<\/td><\/tr><tr><td><strong>Release<\/strong><\/td><td>Prevent deployment if semantic checks or contracts fail.<\/td><\/tr><tr><td><strong>Deploy<\/strong><\/td><td>Provide consistent monitoring metrics via observability pipelines.<\/td><\/tr><tr><td><strong>Operate<\/strong><\/td><td>Enable secure data exploration for ops teams using abstracted models.<\/td><\/tr><tr><td><strong>Monitor<\/strong><\/td><td>Use unified semantic models to generate accurate alerts and reports.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Architecture &amp; How It Works<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Components<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Data Sources<\/strong>: Logs, telemetry, vulnerabilities, code repositories.<\/li>\n\n\n\n<li><strong>Semantic Layer Engine<\/strong>: Central layer that maps source data to unified terms.<\/li>\n\n\n\n<li><strong>Policy Engine<\/strong>: Validates access rules, metric rules, and policy-as-code.<\/li>\n\n\n\n<li><strong>Consumers<\/strong>: Dashboards, alerting tools, security scanners, CI\/CD pipelines.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Internal Workflow<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Data Ingestion<\/strong>: Ingests raw logs, metrics, code scan outputs, etc.<\/li>\n\n\n\n<li><strong>Mapping Layer<\/strong>: Maps raw data fields to meaningful terms (e.g., \u201cP1 vulnerability\u201d, \u201cNon-compliant IAM role\u201d).<\/li>\n\n\n\n<li><strong>Policy Enforcement<\/strong>: Validates incoming data against semantic rules.<\/li>\n\n\n\n<li><strong>Query Serving<\/strong>: Makes clean, normalized data available to dashboards and DevSecOps tools.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Architecture Diagram (Descriptive)<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/enterprise-knowledge.com\/wp-content\/uploads\/2020\/03\/Semantic-Layer.png\" alt=\"\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>                \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                \u2502              DevSecOps Tools               \u2502\n                \u2502 (CI\/CD, Monitoring, Compliance Dashboards) \u2502\n                \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                               \u25b2               \u25b2\n                               \u2502               \u2502\n                 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                 \u2502       Semantic Layer      \u2502\n                 \u2502   - Metric Definitions    \u2502\n                 \u2502   - Data Contracts        \u2502\n                 \u2502   - Policy-as-Code Rules  \u2502\n                 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                               \u2502\n       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n       \u2502                      \u2502                        \u2502\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Vulnerability\u2502    \u2502 Audit Logs     \u2502       \u2502 Cloud Metadata \u2502\n\u2502 Scanners     \u2502    \u2502 (SIEM, Syslog) \u2502       \u2502 (IAM, S3, etc) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Integration Points with CI\/CD or Cloud Tools<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>GitHub Actions\/GitLab CI<\/strong>: Validate data contracts in pre-deploy stages.<\/li>\n\n\n\n<li><strong>AWS\/GCP IAM<\/strong>: Enforce consistent definitions for policy violations.<\/li>\n\n\n\n<li><strong>Datadog, Prometheus<\/strong>: Surface metrics with semantic labels.<\/li>\n\n\n\n<li><strong>OPA\/Rego<\/strong>: Use semantic logic to define access policies dynamically.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Installation &amp; Getting Started<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Basic Setup or Prerequisites<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python\/Node.js (depending on implementation)<\/li>\n\n\n\n<li>Docker (for container-based semantic services)<\/li>\n\n\n\n<li>YAML or JSON config knowledge<\/li>\n\n\n\n<li>Access to source systems: logs, CI\/CD pipelines, cloud providers<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Hands-on: Step-by-step Beginner-friendly Setup Guide<\/h3>\n\n\n\n<p>Let\u2019s assume we\u2019re using <strong>Transform<\/strong> (a popular open-source semantic layer):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Install CLI<\/strong> <\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install transform-cli<\/code><\/pre>\n\n\n\n<p>     2. <strong>Initialize Project<\/strong> <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>transform init my-semantic-model\ncd my-semantic-model<\/code><\/pre>\n\n\n\n<p>     3. <strong>Define a Metric<\/strong> <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>metrics:\n  high_risk_vulnerabilities:\n    description: \"Count of P1 vulnerabilities in prod\"\n    type: count\n    filter: severity = 'P1' AND environment = 'prod'\n    source: vulnerability_logs<\/code><\/pre>\n\n\n\n<p>     4. <strong>Serve API Locally<\/strong> <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>transform start<\/code><\/pre>\n\n\n\n<p>     5. <strong>Query the Metric<\/strong> <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>curl http:\/\/localhost:8080\/metrics\/high_risk_vulnerabilities<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Real-World Use Cases<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. CI\/CD Pipeline Validation<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scenario<\/strong>: Before deployment, run semantic checks on IaC scans to ensure there are no critical misconfigurations.<\/li>\n\n\n\n<li><strong>Tooling<\/strong>: Terraform + Semantic Layer + GitHub Actions.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Unified Security Monitoring<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scenario<\/strong>: Aggregate data from different tools (e.g., Snyk, Aqua) and normalize findings.<\/li>\n\n\n\n<li><strong>Benefit<\/strong>: Reduce false positives with unified definitions.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Compliance Reporting<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scenario<\/strong>: Automatically produce GDPR or SOC 2 reports using semantic definitions.<\/li>\n\n\n\n<li><strong>Outcome<\/strong>: Consistent, auditable, and automated compliance dashboards.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. Incident Response Enrichment<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scenario<\/strong>: During an incident, auto-tag events using the semantic model (e.g., classify breach severity).<\/li>\n\n\n\n<li><strong>Integration<\/strong>: SIEM \u2192 Semantic Layer \u2192 Incident Management System (PagerDuty, OpsGenie).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>6. Benefits &amp; Limitations<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Key Advantages<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 <strong>Consistency across teams<\/strong><\/li>\n\n\n\n<li>\u2705 <strong>Governed, secure access to critical metrics<\/strong><\/li>\n\n\n\n<li>\u2705 <strong>Faster time to insights<\/strong><\/li>\n\n\n\n<li>\u2705 <strong>Scalable and extensible definitions<\/strong><\/li>\n\n\n\n<li>\u2705 <strong>Automation-friendly<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Common Challenges or Limitations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u274c Requires <strong>data modeling expertise<\/strong><\/li>\n\n\n\n<li>\u274c May introduce latency in real-time pipelines<\/li>\n\n\n\n<li>\u274c Can become <strong>bottleneck<\/strong> if not decentralized properly<\/li>\n\n\n\n<li>\u274c Steep learning curve for small teams<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>7. Best Practices &amp; Recommendations<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Security Tips<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>RBAC<\/strong> to control access to semantic definitions.<\/li>\n\n\n\n<li>Encrypt config files and secrets.<\/li>\n\n\n\n<li>Version-control all definitions in Git.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Performance<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cache commonly used queries.<\/li>\n\n\n\n<li>Optimize backend SQL or API queries mapped in semantic layer.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Maintenance<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Set up <strong>CI tests<\/strong> to validate semantic logic.<\/li>\n\n\n\n<li>Maintain a <strong>data contract registry<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compliance &amp; Automation<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integrate with <strong>OPA<\/strong> or <strong>Kyverno<\/strong> for policy validation.<\/li>\n\n\n\n<li>Use semantic metrics as <strong>triggers for alerting or remediation<\/strong>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>8. Comparison with Alternatives<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Semantic Layer<\/th><th>Hardcoded Logic<\/th><th>Data Warehouse Views<\/th><\/tr><\/thead><tbody><tr><td>Decouples logic from storage<\/td><td>\u2705<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Reusable across tools<\/td><td>\u2705<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Governed and auditable<\/td><td>\u2705<\/td><td>\u274c<\/td><td>\u2705<\/td><\/tr><tr><td>Dynamic and programmable<\/td><td>\u2705<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Real-time updates possible<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u274c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">When to Choose Semantic Layer<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Multiple DevSecOps tools need to share definitions<\/li>\n\n\n\n<li>High compliance or security visibility is needed<\/li>\n\n\n\n<li>You require <strong>policy enforcement + observability + analytics<\/strong> consistency<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>9. Conclusion<\/strong><\/h2>\n\n\n\n<p>Semantic Layers represent a <strong>transformational shift<\/strong> in how teams approach data-driven DevSecOps. By aligning development, security, and operations teams with a <strong>shared language<\/strong>, organizations improve collaboration, security posture, and compliance readiness.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Next Steps<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore tools like <a href=\"https:\/\/www.transform.co\/\">Transform<\/a>, <a href=\"https:\/\/cloud.google.com\/looker\/docs\/semantic-model-overview\">Looker\u2019s Semantic Layer<\/a>, and <a href=\"https:\/\/docs.getdbt.com\/docs\/build\/semantic-layer\">dbt Semantic Layer<\/a>.<\/li>\n\n\n\n<li>Join communities like:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/community.getdbt.com\/\">dbt Slack<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/dataengineeringweekly.com\/\">Data Engineering Weekly<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction &amp; Overview What is a Semantic Layer? A Semantic Layer is an abstraction layer that sits between raw data sources and end users or applications&#8230;. <\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-251","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=251"}],"version-history":[{"count":2,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/251\/revisions"}],"predecessor-version":[{"id":276,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/251\/revisions\/276"}],"wp:attachment":[{"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}