-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Docusaurus kits #780
Docusaurus kits #780
Changes from 14 commits
8b509f1
78faf53
dcca958
bbf109b
7654181
b722b13
1a264eb
4f1aa94
f90a838
e471fa4
dd750f7
c1efb49
7be27c8
cb156a7
02c47be
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
--- | ||
id: Adoption View | ||
title: Adoption View | ||
description: 'Connector Kit' | ||
sidebar_position: 1 | ||
--- | ||
|
||
The ConnectorKit provides a connector framework, based on the Eclipse Dataspace Connector (EDC) for sovereign, cross-enterprise data exchange. | ||
|
||
![EDC Overview](../adoption-view/images/edc_overview.png) | ||
|
||
Trust, interoperability and data sovereignty, these are the objectives and values for secure and sustainable peer-to-peer data exchange between organizations and companies. The claim is data sovereignty: Whoever makes data available retains control and decides individually who is involved in the data exchange, how, when, where and under what conditions. | ||
|
||
A corresponding concept was developed in the context of Gaia-X and the International Data Space Association (IDSA). The essential software component is the connector. | ||
|
||
With the EDC, a new central communication component was created, which implements the following architectural principles: | ||
|
||
- Simple, maintaining a small and efficient core with as few external dependencies as possible | ||
- Interoperable, independent of platforms and ecosystems | ||
- Decentralized, software components with the necessary capabilities for participating in a data room are located on the partners' side, data is only exchanged between the agreed points. | ||
- Data protection is more important than data sharing, data to be transmitted are fundamentally linked to policies via contracts; a transfer without a contract is not possible. | ||
- Separation of metadata and data enables high throughput rates for the actual data transfer. | ||
- Consistent semantics for the data is the basis for the consistency of digital value creation. | ||
- As far as possible, all processes, starting with determining the identity, through ensuring the contractually agreed regulations to data transmission, are automated. | ||
- Existing standards and protocols (GAIA-X and IDSA) are used as far as possible. | ||
|
||
The EDC as a connector implements a framework agreement for sovereign, cross-organizational data exchange. The International Data Spaces Standard (IDS) and relevant principles in connection with GAIA-X were implemented. The connector is designed to be extensible to support alternative protocols and to be integrated into different ecosystems. | ||
|
||
The objective is to set up a decentralized software component on the part of the respective partner, which bundles the skills required to participate in a data room and enables peer-to-peer connections between participants. The focus here is particularly on the data sovereignty of the independent companies. The functionality required for this is bundled in the open-source project "Eclipse Dataspace Connectors", to which the Catena-X partners contribute as part of the Eclipse Foundation. | ||
|
||
The main difference between the EDC and the previous connectors of the IDSA is the separation of the communication into a channel for the metadata and one for the actual data exchange. The channel for the data supports various transmission protocols via so-called data plane extensions. The metadata is transmitted directly via the EDC interface, while the actual data exchange then takes place via the appropriate channel extension. In this way, a highly scalable data exchange is made possible. | ||
|
||
![EDC Architecture](../adoption-view/images/edc_architecture.png) | ||
|
||
The architecture of the EDC combines various services that are necessary for the above principles: | ||
|
||
- An interface to the Identity Provider service, currently IDSA's Dynamic Attribute Provisioning System (DAPS). This central service provides the identity and the corresponding authentication of the participants in the data exchange. (There is no authorization at this point). Decentralized solutions will also be supported in the future. | ||
- The provision of possible offers (contract offering) which, on the one hand, stipulates the data offered and the associated terms of use (policies) in corresponding contracts. | ||
- An interface for manual selection of data and associated contract offers. | ||
- The actual data transfer via the data plane extension | ||
- Interfaces for using other services such as a broker service or a registration service | ||
- The connection of software systems on the customer and provider side |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
--- | ||
id: Domain Model | ||
title: Domain Model | ||
description: 'Connector Kit' | ||
sidebar_position: 2 | ||
--- | ||
|
||
:::info TBD | ||
bcronin90 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
This information is taken from the [eclipse-edc](https://github.com/eclipse-edc/Connector/blob/main/docs/developer/architecture/domain-model.md) project. | ||
::: | ||
|
||
![domain-model](images/domain-model.png) | ||
> The shown picture illustrates only a generic view of the Domain Model and is not intended to show all aspects of the project. | ||
|
||
## Asset | ||
|
||
An asset represents data (databases, files, cache information, etc.) which should be published and shared between | ||
organizations. For each asset, a [`DataAddress`](#data-address) needs to be resolvable. | ||
|
||
## Data address | ||
|
||
A data address is a pointer into the physical storage location where an asset will be stored | ||
bcronin90 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Contract | ||
|
||
A contract always contains one or more [`Assets`](#asset) and a single [`Policy`](#policy). The contract construct is | ||
used to define the arrangement between two parties ("consumer" and "provider"). Regarding this arrangement, the contract | ||
passes several stages which are explained below: | ||
|
||
* ### Contract definition | ||
|
||
Contract definitions associate a policy with assets. A `ContractDefinition` object contains access policies, contract | ||
policies, and an asset selector which links the contract to one or more assets. | ||
|
||
* ### Contract offer | ||
|
||
The contract offer is a dynamic representation of the [`ContractDefinition`](#contract-definition) | ||
for a specific consumer and serves as protocol's data transfer object (DTO) for a particular contract negotiation. | ||
Contract offers are not persisted and will be regenerated on every request. The connector acting as data provider will | ||
generate contract offers only for contract definitions dedicated to the organization or data space participant | ||
operating the requesting connector acting as data consumer. A contract offer is always related to a single asset of | ||
the `ContractDefinition` object (e.g. for a `ContractDefinition` containing three `Asset` objects, the connector will | ||
generate three `ContractOffer` objects) | ||
. | ||
|
||
* ### Contract negotiation | ||
|
||
A `ContractNegotiation` captures the current state of the negotiation of a contract (`ContractOffer` -> | ||
`ContractAgreement`) between two parties. This process is inherently asynchronous, so the `ContractNegotiation` | ||
objects are stored in a backing data store (`ContractNegotiationStore`). | ||
|
||
* ### Contract agreement | ||
|
||
A contract agreement represents the agreed-upon terms of access and usage of an asset's data between two data space | ||
participants, including a start and an end date and further relevant information. | ||
|
||
## Policy | ||
|
||
Contract policies represent permitted and prohibited actions over a certain asset. These actions can be limited further | ||
by constraints (temporal or spatial) and duties ("e.g. deletion of the data after 30 days"). Further information is | ||
provided in a separate [section](usage-control/policies.md). | ||
bcronin90 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Data request | ||
|
||
After a successful contract negotiation, a `DataRequest` is sent from a consumer connector to a provider connector to | ||
initiate the data transfer. It references the requested [`Asset`](#asset) and [`ContractAgreement`](#contract-agreement) | ||
as well as information about the [data destination](#data-address). | ||
|
||
## Transfer process | ||
|
||
Similar to the `ContractNegotiation`, this object captures the current state of a data transfer. This process is | ||
inherently asynchronous, so the `TransferProcess` objects are stored in a backing data store (`TransferProcessStore`). |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
--- | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe we can document how these files are generated. There is a release documentation started at /docs/release. The idea is to have
So this should be the right place There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @DominikPinsel yes and no :) the problem here…. the files are not generated within our repository. They are created via docusaurus plug-ins.? https://www.npmjs.com/package/docusaurus-plugin-openapi-docs There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll document it based on that. |
||
id: cancel-negotiation | ||
title: "cancelNegotiation" | ||
description: "Requests aborting the contract negotiation. Due to the asynchronous nature of contract negotiations, a successful response only indicates that the request was successfully received. Clients must poll the /{id}/state endpoint to track the state." | ||
sidebar_label: "cancelNegotiation" | ||
hide_title: true | ||
hide_table_of_contents: true | ||
api: {"tags":["Contract Negotiation"],"description":"Requests aborting the contract negotiation. Due to the asynchronous nature of contract negotiations, a successful response only indicates that the request was successfully received. Clients must poll the /{id}/state endpoint to track the state.","operationId":"cancelNegotiation","parameters":[{"name":"id","in":"path","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Request to cancel the Contract negotiation was successfully received","links":{"poll-state":{"operationId":"getNegotiationState"}}},"400":{"description":"Request was malformed, e.g. id was null","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"invalidValue":{"type":"string"},"message":{"type":"string"},"path":{"type":"string"},"type":{"type":"string"}}}}}}},"404":{"description":"A contract negotiation with the given ID does not exist","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"invalidValue":{"type":"string"},"message":{"type":"string"},"path":{"type":"string"},"type":{"type":"string"}}}}}}}},"method":"post","path":"/contractnegotiations/{id}/cancel","servers":[{"url":"/"}],"info":{"title":"management-api","description":"REST API documentation for the management-api","version":"0.0.1-SNAPSHOT"},"postman":{"name":"cancel Negotiation","description":{"content":"Requests aborting the contract negotiation. Due to the asynchronous nature of contract negotiations, a successful response only indicates that the request was successfully received. Clients must poll the /{id}/state endpoint to track the state.","type":"text/plain"},"url":{"path":["contractnegotiations",":id","cancel"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} | ||
sidebar_class_name: "post api-method" | ||
info_path: ./docs/kits/product-edc/docs/kit/development-view/openAPI/management-api/management-api | ||
custom_edit_url: null | ||
--- | ||
|
||
import ApiTabs from "@theme/ApiTabs"; | ||
import MimeTabs from "@theme/MimeTabs"; | ||
import ParamsItem from "@theme/ParamsItem"; | ||
import ResponseSamples from "@theme/ResponseSamples"; | ||
import SchemaItem from "@theme/SchemaItem"; | ||
import SchemaTabs from "@theme/SchemaTabs"; | ||
import DiscriminatorTabs from "@theme/DiscriminatorTabs"; | ||
import TabItem from "@theme/TabItem"; | ||
|
||
## cancelNegotiation | ||
|
||
|
||
|
||
Requests aborting the contract negotiation. Due to the asynchronous nature of contract negotiations, a successful response only indicates that the request was successfully received. Clients must poll the /{id}/state endpoint to track the state. | ||
|
||
<details style={{"marginBottom":"1rem"}} data-collapsed={false} open={true}><summary style={{}}><strong>Path Parameters</strong></summary><div><ul><ParamsItem className={"paramsItem"} param={{"name":"id","in":"path","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}}></ParamsItem></ul></div></details><div><ApiTabs><TabItem label={"200"} value={"200"}><div> | ||
|
||
Request to cancel the Contract negotiation was successfully received | ||
|
||
</div><div></div></TabItem><TabItem label={"400"} value={"400"}><div> | ||
|
||
Request was malformed, e.g. id was null | ||
|
||
</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong><span style={{"opacity":"0.6"}}> array</span></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"invalidValue"} required={false} deprecated={undefined} schemaDescription={undefined} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}></SchemaItem><SchemaItem collapsible={false} name={"message"} required={false} deprecated={undefined} schemaDescription={undefined} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}></SchemaItem><SchemaItem collapsible={false} name={"path"} required={false} deprecated={undefined} schemaDescription={undefined} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} deprecated={undefined} schemaDescription={undefined} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"[\n {\n \"invalidValue\": \"string\",\n \"message\": \"string\",\n \"path\": \"string\",\n \"type\": \"string\"\n }\n]"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"404"} value={"404"}><div> | ||
|
||
A contract negotiation with the given ID does not exist | ||
|
||
</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong><span style={{"opacity":"0.6"}}> array</span></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"invalidValue"} required={false} deprecated={undefined} schemaDescription={undefined} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}></SchemaItem><SchemaItem collapsible={false} name={"message"} required={false} deprecated={undefined} schemaDescription={undefined} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}></SchemaItem><SchemaItem collapsible={false} name={"path"} required={false} deprecated={undefined} schemaDescription={undefined} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} deprecated={undefined} schemaDescription={undefined} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"[\n {\n \"invalidValue\": \"string\",\n \"message\": \"string\",\n \"path\": \"string\",\n \"type\": \"string\"\n }\n]"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div> | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the context of EDC, I would call the contract agreement and its policies an authorization. Though the enforcement of these is kind of intransparent. Maybe the others can comment on this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In EDC there is access policy (not advertised) and usage policy (advertised), which is codified by a
ContractDefinition
. The union of those determines if a client can acquire an asset. HTH.