Introduction

In recent years, the importance of data sharing and distribution between organizations has been growing. However, simply exposing APIs makes it difficult to control “who” can access “which data” under “what conditions.”

Dataspaces are a concept designed to solve this challenge. They provide a mechanism for data owners to maintain sovereignty while securely sharing data with trusted parties.

In this article, we will use Eclipse EDC (Eclipse Dataspace Components), an implementation platform for dataspaces, to experience data exchange flows in a local environment.

Table of Contents

  1. What is a Dataspace?
  2. Overview of Eclipse EDC
  3. Environment Setup
  4. Executing the Data Exchange Flow
  5. Creating a GUI Dashboard
  6. Summary

What is a Dataspace?

Challenges with Traditional Data Sharing

Traditional API integrations had the following challenges:

  • Difficult access control: Once an API key is issued, any data can be retrieved
  • Usage condition management: Conditions like “this data is for internal use only” cannot be technically enforced
  • Auditing and tracking: It is difficult to track who retrieved data and when

The Dataspace Solution

Dataspaces solve these issues with the following mechanism:

C1234o....n:AsCPCPuoro:Imno:nesvsruiumdmeeerrr:::APIProviderAPI

Key Terminology

TermDescription
ConnectorSoftware for participating in a dataspace. Both the Provider and Consumer have one
ProviderThe party that provides data
ConsumerThe party that retrieves data
CatalogA list of data published by the Provider
PolicyConditions for data access (who, when, and how it can be used)
ContractAn agreement between the Provider and Consumer
EDREndpoint Data Reference. Temporary access information for data retrieval

Overview of Eclipse EDC

Eclipse EDC is an open-source dataspace implementation platform developed by the Eclipse Foundation.

Architecture

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

Main API Endpoints

EndpointPurpose
/management/v3/assetsAsset (data) management
/management/v3/policydefinitionsPolicy management
/management/v3/contractdefinitionsContract definition management
/management/v3/catalog/requestCatalog retrieval
/management/v3/contractnegotiationsContract negotiation
/management/v3/transferprocessesData transfer
/management/v3/edrsEDR (access token) retrieval

Environment Setup

Prerequisites

  • Docker & Docker Compose
  • Java 17 (for Gradle builds)
  • Python 3 (for the proxy server)

1. Clone EDC Samples

gcidtecdlco-nseamp-ldeespth1https://github.com/eclipse-edc/Samples.gitedc-samples

2. Build the Connectors

##//FgFgororraraddClPloerenwowsvutitmrdreaearnrnss(f(fbewearirs:t:ithtcrraDacnanostsnfafnePeerlrc-a-t0n0o0e3r-)-)pcroenrseuqmueirs-iptuelsl::cpornonveicdteorr-:pbruoixlyd-data-plane:build

3. Create Docker Configuration Files

Dockerfile.consumer

FWCEROONORPTMKYRDYeItPcRrOlaIi/nNpasTspfepe[-r"t/jetamrvuaarn"is,nf:e"1r-7-j-0aj0rr-"ep,re"r/eaqpupi/sciotnense/cctoonrn.ejcatro"r]/build/libs/connector.jar/app/connector.jar

Dockerfile.provider

FWCEROONORPTMKYRDYeItPcRrOlaIi/nNpasTspfepe[-r"t/jetamrvuaarn"is,nf:e"1r-7-j-0aj3rr-"ec,on"s/uampepr/-cpounlnle/cptroorv.ijdaerr"-]proxy-data-plane/build/libs/connector.jar/app/connector.jar

docker-compose.yml

sercpvorinbcepobcepcsuonoovuonooeuicdnvElr--iicdnvElr---smlootiDutdlootiDut:edncarCms""edncarCms"""r:tkio_e/:22r:tkio_e/:111:eennFsc99:eennFsc999xremS:o11xremS:o112tfre_n99tfre_n999:i_nCf34:i_nCf341lntOi::lntOi:::.ea:Ng22.ea:Ng111:mF/99:mF/999eIc11eIp112D:Go99D:Gr999o:n34o:o341ces""cev"""kd/ukd/iecamecadr-pe##r-pe###fcprfpprio/.MDir/-MDDlncpaSlocdaSaesornPevoanPt.unoa.intaacmfpgPpdfagPPoeieerreiperlnrgrmoorglmoas/tetv/aetnucinoipnnoemoetcdretcensoeo.oPrs:AlrvpAluu/PirPbmaIdoIlepepirprec./.rpcptAroriPonoeIpfpseie:rgr/t/taicipeoepsns/scuomnefri.gp/rporpoevritdieers.:prrooperties:ro

4. Start the Connectors

dockercomposeup-d-build

Verify startup:

d#ocIkfer"Rcuonmtpiomseelogsrea-dtya"ilis10displayed,itwassuccessful

Executing the Data Exchange Flow

Overall Flow

SSSSSttttteeeeepppppCCCCC12o3o4o5oo::n:n:n:nnsssssPuuuuurmmmmmoeeeeevrrrrri::deErPPDPrrRroooEvvvDiiiCddTdeererrar::nsDfaetraPlane:

Step 1: Register Data with the Provider

Create an Asset (define the data to be provided)

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

0

Create a Policy (define access conditions)

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

1

Create a Contract Definition (link assets with policies)

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

2

Step 2: Retrieve the Catalog

From the Consumer, check the data published by the Provider:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

3

The response includes the “product data” published by the Provider and its Offer ID.

Step 3: Contract Negotiation

Start the contract negotiation using the Offer ID obtained from the catalog:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

4

When the negotiation is complete, the state becomes FINALIZED and a contractAgreementId is issued.

Step 4: Data Transfer

Once the contract is concluded, start the data transfer:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

5

Step 5: Retrieve the Data

Once the Transfer state becomes STARTED, retrieve the EDR and obtain the data:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

6

Response example:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

7


Creating a GUI Dashboard

While CLI operations are good for learning, a visual dashboard is more convenient for actual use. This time, I created an EDC dashboard using Next.js + TypeScript.

EDC Connector Dashboard - Connector List

Features

  1. Connector Tab: Manage assets, policies, and contracts for Consumer/Provider
  2. Data Exchange Flow Tab: Execute the full flow via GUI
  3. Contract Negotiation Tab: View list and status of contract negotiations
  4. Data Transfer Tab: View list and status of data transfers

Executing the Data Exchange Flow

In the “Data Exchange Flow” tab of the dashboard, you can execute data exchange in 5 steps.

Steps 1-2: Retrieve Catalog and Select Offer

Catalog Retrieval

Clicking the “Retrieve Catalog” button displays the data (product data) published by the Provider.

Steps 3-4: Contract Negotiation and Data Transfer

Start Data Transfer

Once the contract negotiation is complete, you can select the transfer type (HTTP Pull/Push) and start the data transfer.

Step 5: Data Retrieval Complete

Data Retrieval Complete

When all steps are complete, the actual data retrieved from the Provider is displayed in JSON format.

Managing Contract Negotiations and Data Transfers

Contract Negotiation List

Contract Negotiation List

Data Transfer List

Data Transfer List

You can check the status of contract negotiations and data transfers in each tab.

Resolving CORS

Since accessing the EDC Management API directly from a browser causes CORS errors, I created a simple proxy server in Python:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

8


Summary

What We Learned

  1. The concept of dataspaces: Differences from traditional API integrations, data sharing while maintaining sovereignty
  2. Eclipse EDC architecture: Control Plane / Data Plane, Management API
  3. Data exchange flow: Catalog retrieval -> Contract negotiation -> Data transfer -> Data retrieval
  4. Hands-on practice: Building EDC with Docker, creating a GUI dashboard

Next Steps

  • Leveraging policies: Setting policies with specific conditions (time limits, regional restrictions, etc.)
  • Authentication and authorization: Vault integration and certificate management for production use
  • Federated Catalog: Catalog search across multiple Providers
  • Catena-X / GAIA-X: Integration with automotive industry and EU dataspace initiatives

References


The code used in this article was created based on GitHub.