Links API

The Links API manages the links that represent the relationships between Fusion objects. You can see these links in the Object Explorer by pressing CMD-K or CTRL-K from any screen in the Fusion UI. You can also export and import links using the Objects API.

Links are structured as a tuple of (subject, object, linkType). An example would be (foo, bar, dependsOn), which would read as "foo dependsOn bar".

The possible values of linkType are as follows:

inContextOf

The subject exists in the context of the object, which is an app.

In this example, the "Movie_Search" app is the context for a parser with the same name:

{
  "subject" : "parser:Movie_Search",
  "object" : "app:Movie_Search",
  "linkType" : "inContextOf",
  "originator" : "unspecified"
}

hasContext

The subject is an app that contains the object.

In this example, an index profile exists in the context of the "Movie_Search" app:

{
  "subject" : "app:Movie_Search",
  "object" : "index-profile:Movie_Search",
  "linkType" : "hasContext",
  "originator" : "unspecified"
}

dependsOn

The subject depends on the object.

In this example, a datasource called "web_pokeapi_co-default" depends on a parser by the same name:

{
  "subject" : "datasource:web_pokeapi_co-default",
  "object" : "parser:web_pokeapi_co-default",
  "linkType" : "dependsOn"
}

supports

The subject is depended on by the object (the reverse of dependsOn).

In this example, a parser called "web_pokeapi_co-default" supports a datasource by the same name:

{
  "subject" : "parser:web_pokeapi_co-default",
  "object" : "datasource:web_pokeapi_co-default",
  "linkType" : "supports"
}

isPartOf

The subject is part of the object, where the object is a group.

In this example, an aggregation called "click-signals-default" is part of a group called "signals-object-group-default":

{
  "subject" : "aggregation:click-signals-default",
  "object" : "group:signals-object-group-default",
  "linkType" : "isPartOf"
}

hasPart

The subject is a group, of which the object is a member (the reverse of isPartOf).

In this example, an aggregation called "click-signals-default" is part of a group called "signals-object-group-default":

{
  "subject" : "group:signals-object-group-default",
  "object" : "aggregation:click-signals-default",
  "linkType" : "hasPart"
}

relatesTo

The subject relates to the object. This is a uni-directional relationship that associates two objects that have none of the relationships described above.

For example, when recommendations are enabled for the default collection, Fusion creates a group of objects which relates to the default collection:

{
  "subject" : "group:recommendations-default",
  "object" : "collection:default",
  "linkType" : "relatesTo"
}

With the exception of the relatesTo link type, links are reversible:

  • inContextOf is the reverse of hasContext (and vice versa).

  • dependsOn is the reverse of supports (and vice versa).

  • isPartOf is the reverse of hasPart (and vice versa).

For example, here is the group of links for the signals-default collection:

[
  {
    "subject": "group:4e6ee9a6-d4ab-413a-ac70-a27c1445bb60",
    "object": "collection:default_signals_aggr",
    "linkType": "hasPart"
  },
  {
    "subject": "group:4e6ee9a6-d4ab-413a-ac70-a27c1445bb60",
    "object": "spark:default_click_signals_aggregation",
    "linkType": "hasPart"
  },
  {
    "subject": "group:4e6ee9a6-d4ab-413a-ac70-a27c1445bb60",
    "object": "collection:default",
    "linkType": "relatesTo"
  },
  {
    "subject": "group:4e6ee9a6-d4ab-413a-ac70-a27c1445bb60",
    "object": "collection:default_signals",
    "linkType": "hasPart"
  }
]

When we request the links for one of the hasPart objects shown above, we get the reverse representation:

GET http://localhost:8764/api/links?subject=collection:default_signals_aggr

[
  {
    "subject": "collection:default_signals_aggr",
    "object": "group:4e6ee9a6-d4ab-413a-ac70-a27c1445bb60",
    "linkType": "isPartOf"
  }
]

Examples

Get links to the default collection:
curl http://localhost:8764/api/links?subject=collection:default

Output:

[ { "subject": "collection:default", "object": "index-pipeline:default", "linkType": "supports" } ]
Create a new link:
curl -X PUT http://localhost:8764/api/links -H 'content-type: application/json' -d '{"linkType": "supports", "object": "index-pipeline:default", "subject": "collection:default"}'

Output:

{ "subject" : "collection:default", "object" : "index-pipeline:default", "linkType" : "supports" }
Delete a link:
curl -X DELETE http://localhost:8764/api/links?subject=collection:default