Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Note: Changes in Metamodel (IDTA-01001) will not be listed here, although they h

Major Changes:

* ...
* Add new subchapter on the discovery of endpoints of AAS services based on ID Link. (https://github.com/admin-shell-io/aas-specs-api/issues/535[#535])


Minor Changes:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,108 @@
[plantuml, seq-aas-endpoints, svg]
....
include::partial$diagrams/seq-sm-endpoints-http.puml[]
....
....


== Direct Discovery of AAS Objects based on ID Link and LinkSets

This section describes how a client can discover AAS and related resources by using an ID Link as the globalAssetId combined with RFC 9264 LinkSets. The ID Link is a resolvable HTTP(S) URL representing the asset identity (globalAssetId). The landing endpoint for the ID Link returns a LinkSet (media type application/linkset+json) that contains typed relations to AAS, Submodels, repositories, registries, and Digital Product Passport resources.

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'

Concept:
- The globalAssetId is an ID Link, e.g., https://id.example.com/my-asset-id.
- A GET on the ID Link with Accept: application/linkset+json returns a LinkSet anchored at the ID Link.

Check warning on line 110 in documentation/IDTA-01002-3/modules/ROOT/pages/http-rest-api/interactions.adoc

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'linkset'

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'
- The LinkSet provides relations such as:
- aas: direct representations/endpoints of the Asset Administration Shell.
- aas-service-endpoints: a LinkSet enumerating infrastructure endpoints (AAS Repository, Submodel Repository, Discovery, Registry).
- dpp: Digital Product Passport endpoints.
- Links may carry metadata (profiles, authentication, versions) to guide client interaction.

[source,json]
----
{
"linkset": [

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'
{
"anchor": "https://id.example.com/my-asset-id",
"aas": [
{
"href": "https://service.example.com/aas/shells/aHR0cHM6Ly9pZC5leGFtcGxlLmNvbS9teS1hc3NldC1pZA",
"type": "application/json",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably application/aas+json ?

"profiles": [
"https://admin-shell.io/aas/API/3/1/AssetAdministrationShellServiceSpecification/SSP-001"
],
"authentication": [
{
"id": "oidc",
"type": "OIDC",
"well_known_url": "https://auth.example.com/realm/.well-known/openid-configuration"
}
]
}
],
"aas-service-endpoints": [
{
"href": "https://service.example.com/aas/aas-service-endpoints",
"type": "application/linkset+json",

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'
"returns": "linkset"

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'
}
],
"dpp": [
{
"href": "https://service.example.com/dpp/dpps/https%3A//id.example.com/my-asset-id",
"type": "application/json",
"dppVersion": ["1.0"],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the DPP version?

"delegatedActs": [
{ "act": "BatteryPassport", "version": "1.0" }
]
}
]
}
]
}
----

Client interaction patterns:

1) LinkSet-aware client
- Request:
- GET https://id.example.com/my-asset-id
- Accept: application/linkset+json, application/json;q=0.9

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'
- Behavior:
- Parse LinkSet and select the appropriate relation (e.g., "aas" for a direct shell, or "aas-service-endpoints" to obtain repositories).
- Follow the selected href; apply authentication as indicated.
- Example follow-up:
- GET https://service.example.com/aas/shells/aHR0cHM6Ly9pZC5leGFtcGxlLmNvbS9teS1hc3NldC1pZA
- Accept: application/json

2) LinkSet-unaware client (fallback via redirect)
- If the client requests JSON directly:
- Server may respond 302 Found with Location pointing to the specific AAS resource.
- Server may also include a Link header with rel="alternate" and type="application/linkset+json" to advertise discovery per RFC 8288.

Check warning on line 177 in documentation/IDTA-01002-3/modules/ROOT/pages/http-rest-api/interactions.adoc

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'linkset'

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'

[plantuml, seq-idlink-linkset, svg]
....
@startuml

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'startuml'
actor Client
participant IDProvider as "ID Link Landing"
participant AASService as "AAS / Repo"

Client -> IDProvider: GET /my-asset-id\nAccept: application/linkset+json

Check warning on line 186 in documentation/IDTA-01002-3/modules/ROOT/pages/http-rest-api/interactions.adoc

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'linkset'

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'
IDProvider --> Client: 200 OK\nContent-Type: application/linkset+json\n{ 'aas', 'aas-service-endpoints', 'dpp' }

Check warning on line 187 in documentation/IDTA-01002-3/modules/ROOT/pages/http-rest-api/interactions.adoc

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'linkset'

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'

Client -> AASService: GET /aas/shells/<encoded-globalAssetId>\nAccept: application/json
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume the globalAssetId is identical to "my-asset-id" from step one, only encoded. Otherwise, how is the mapping from my-asset-id to globalAssetId done?

AASService --> Client: 200 OK\n{ AssetAdministrationShell ... }
@enduml

Check warning on line 191 in documentation/IDTA-01002-3/modules/ROOT/pages/http-rest-api/interactions.adoc

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'enduml'

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'enduml'
....

====
// Guidance
* Servers should support application/linkset+json (RFC 9264).

Check warning on line 196 in documentation/IDTA-01002-3/modules/ROOT/pages/http-rest-api/interactions.adoc

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'linkset'

Check warning

Code scanning / QDJVMC

Typo Warning documentation

Typo: In word 'linkset'
* Use RFC 8288 relations; include profiles and auth hints where applicable.
* The ID Link acts as a stable proxy; backend changes do not break clients.
* Using referredSemanticId on Submodels is recommended to help clients select relevant Submodels.
====

References:
- RFC 8288 Web Linking: https://www.rfc-editor.org/rfc/rfc8288.html
- RFC 9264 LinkSet: https://www.rfc-editor.org/rfc/rfc9264.html

Loading