component
Get path diff between two versions
Compare a single path between two versions of a component. Returns field-level and code-flow detail.
GET
/
v0
/
component
/
path-diff
/
{id}
Get path diff between two versions
curl --request GET \
--url https://{hostname}.gable.ai/v0/component/path-diff/{id} \
--header 'X-API-KEY: <api-key>'import requests
url = "https://{hostname}.gable.ai/v0/component/path-diff/{id}"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://{hostname}.gable.ai/v0/component/path-diff/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{hostname}.gable.ai/v0/component/path-diff/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{hostname}.gable.ai/v0/component/path-diff/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{hostname}.gable.ai/v0/component/path-diff/{id}")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{hostname}.gable.ai/v0/component/path-diff/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"metadata": {
"componentName": "<string>",
"ingressPayloadName": "<string>",
"egressPayloadName": "<string>",
"baseEventId": "<string>",
"baseDate": "2023-11-07T05:31:56Z",
"compareEventId": "<string>",
"compareDate": "2023-11-07T05:31:56Z",
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ingressComponent": "<string>",
"egressComponent": "<string>"
},
"diff": {
"codeFlowSteps": [
{
"id": "<string>",
"label": "<string>",
"sublabel": "<string>",
"componentName": "<string>",
"isIngress": true,
"isEgress": true,
"isChanged": true,
"changeBadge": "<string>",
"file": "<string>",
"lineStart": 123,
"lineEnd": 123,
"previousFile": "<string>",
"previousLineStart": 123,
"previousLineEnd": 123
}
],
"codeFlowChangeCount": 123,
"fieldMappings": [
{
"sourceField": "<string>",
"targetField": "<string>",
"type": "<string>",
"dataFlowSteps": [
{
"anchorId": "<string>",
"file": "<string>",
"lineStart": 123,
"lineEnd": 123,
"columnStart": 123,
"columnEnd": 123
}
],
"previousDataFlowSteps": [
{
"anchorId": "<string>",
"file": "<string>",
"lineStart": 123,
"lineEnd": 123,
"columnStart": 123,
"columnEnd": 123
}
],
"upstreamDependencies": [
{
"componentName": "<string>",
"field": "<string>",
"hops": 123,
"path": [
{
"componentName": "<string>",
"field": "<string>"
}
]
}
],
"downstreamDependencies": [
{
"componentName": "<string>",
"field": "<string>",
"hops": 123,
"path": [
{
"componentName": "<string>",
"field": "<string>"
}
]
}
]
}
],
"fieldMappingChangeCount": 123
}
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}Authorizations
Path Parameters
UUID of the component
Query Parameters
Base event ID for comparison
Compare event ID for comparison
Payload name of the ingress boundary
Payload name of the egress boundary
Path ID from the base version. When provided, filters to a specific path instead of merging all matching paths.
Path ID from the compare version. When provided, filters to a specific path instead of merging all matching paths.
When true, load lineage from raw scan snapshots instead of projected results.
Response
Path diff retrieved successfully
Response for the path diff API, comparing a single path between two component versions.
Previous
Get component merge historyGet a component's MERGE_TO_MAIN version history with per-version diff metrics and downstream breakage indicators, ordered newest-first.
Next
⌘I
Get path diff between two versions
curl --request GET \
--url https://{hostname}.gable.ai/v0/component/path-diff/{id} \
--header 'X-API-KEY: <api-key>'import requests
url = "https://{hostname}.gable.ai/v0/component/path-diff/{id}"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://{hostname}.gable.ai/v0/component/path-diff/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{hostname}.gable.ai/v0/component/path-diff/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{hostname}.gable.ai/v0/component/path-diff/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{hostname}.gable.ai/v0/component/path-diff/{id}")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{hostname}.gable.ai/v0/component/path-diff/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"metadata": {
"componentName": "<string>",
"ingressPayloadName": "<string>",
"egressPayloadName": "<string>",
"baseEventId": "<string>",
"baseDate": "2023-11-07T05:31:56Z",
"compareEventId": "<string>",
"compareDate": "2023-11-07T05:31:56Z",
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ingressComponent": "<string>",
"egressComponent": "<string>"
},
"diff": {
"codeFlowSteps": [
{
"id": "<string>",
"label": "<string>",
"sublabel": "<string>",
"componentName": "<string>",
"isIngress": true,
"isEgress": true,
"isChanged": true,
"changeBadge": "<string>",
"file": "<string>",
"lineStart": 123,
"lineEnd": 123,
"previousFile": "<string>",
"previousLineStart": 123,
"previousLineEnd": 123
}
],
"codeFlowChangeCount": 123,
"fieldMappings": [
{
"sourceField": "<string>",
"targetField": "<string>",
"type": "<string>",
"dataFlowSteps": [
{
"anchorId": "<string>",
"file": "<string>",
"lineStart": 123,
"lineEnd": 123,
"columnStart": 123,
"columnEnd": 123
}
],
"previousDataFlowSteps": [
{
"anchorId": "<string>",
"file": "<string>",
"lineStart": 123,
"lineEnd": 123,
"columnStart": 123,
"columnEnd": 123
}
],
"upstreamDependencies": [
{
"componentName": "<string>",
"field": "<string>",
"hops": 123,
"path": [
{
"componentName": "<string>",
"field": "<string>"
}
]
}
],
"downstreamDependencies": [
{
"componentName": "<string>",
"field": "<string>",
"hops": 123,
"path": [
{
"componentName": "<string>",
"field": "<string>"
}
]
}
]
}
],
"fieldMappingChangeCount": 123
}
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}