3. API Description¶
This section describes the available API endpoints provided by the Semantic Ethical Glass Box (SEGB), including their usage, expected inputs, and response formats.
Authentication and Permissions¶
The SEGB API uses Bearer Tokens for authentication and authorization. Each endpoint requires a specific role to access it. The roles are defined as follows:
Auditor: Can read the graph and experiment data.
Logger: Can log data to the SEGB.
Admin: Has full access to all endpoints, including deleting the graph and accessing the history.
These must be included as information at token generation time. The SEGB server will validate the token and check the permissions associated with it before processing the request. A token can be defined with several roles and the server will check the permissions for each endpoint. It means that a auditor/logger token can be generated.
Note
Tokens must be generated manually by a SEGB admin (who knows the secret) using token_generator_script.py and are unique to each user. The tokens are valid for a limited time and should be kept secure. The server will not accept expired or invalid tokens. Additionally, tokens should be refreshed periodically to maintain security.
Tokens must be included in the Authorization header as follows:
Authorization: Bearer <TOKEN>
If the server is secured, unauthorized access will result in the following status codes:
401 Unauthorized: Invalid token.
403 Forbidden: Token provided but insufficient permissions or no token provided.
3.1. GET /¶
Description: The root endpoint serves as a redirect to the /docs playground, providing an entry point for exploring the API documentation.
Request Details:
URL: /
Method: GET
Response Codes:
Status Code |
Description |
|---|---|
|
The server is operational and redirects to the /docs playground for API exploration. |
3.2. GET /health¶
Description: Health check endpoint to verify that the SEGB server is running.
Request Details:
URL: /health
Method: GET
Response Codes:
Status Code |
Description |
|---|---|
|
The server is running and returns the message: “The SEGB is working”. |
3.3. POST /log¶
Description: This endpoint receives data in Turtle (TTL) format, converts it into JSON-LD, and stores it in the database. The TTL payload may include one or multiple RDF triples.
Request Details:
URL: /log
Method: POST
Required Headers:
Content-Type: text/turtle; encoding=utf-8Authorization: Bearer <LOGGER_TOKEN or ADMIN_TOKEN>
Request Body:
A valid RDF document in Turtle (TTL) format.
Response Codes:
Status Code |
Description |
|---|---|
|
The data was successfully received and stored. |
|
Insufficient permissions (e.g., using a Auditor Token). |
|
The request contained invalid or malformed data. |
3.4. GET /log¶
Description: Retrieve detailed information about a specific log entry.
Request Details:
URL: /log
Method: GET
Required Headers:
Authorization: Bearer <AUDITOR_TOKEN or ADMIN_TOKEN>
Query Parameters:
log_id: The ID of the log to retrieve.
Response Codes:
Status Code |
Description |
|---|---|
|
Returns the log details in JSON format. |
|
Missing or invalid log_id parameter. |
|
Insufficient permissions (e.g., using a Logger Token). |
|
The specified log was not found. |
3.5. GET /graph¶
Description: Retrieve the entire graph stored in the SEGB in Turtle (TTL) format.
Request Details:
URL: /graph
Method: GET
Required Headers:
Authorization: Bearer <AUDITOR_TOKEN or ADMIN_TOKEN>
Response Codes:
Status Code |
Description |
|---|---|
|
Successfully returns the graph in Turtle (TTL) format. |
|
The graph is empty. |
|
Insufficient permissions (e.g., using a Logger Token). |
3.6. DELETE /graph¶
Description: Delete the entire graph stored in the SEGB.
Request Details:
URL: /graph
Method: DELETE
Required Headers:
Authorization: Bearer <ADMIN_TOKEN>
Response Codes:
Status Code |
Description |
|---|---|
|
The graph was successfully deleted. |
|
The graph was already empty. |
|
Insufficient permissions (e.g., using a Auditor Token). |
3.7. GET /experiments¶
Description: Retrieve a list of all experiments registered or information about a specific experiment and its associated activities (based on parameters).
Request Details:
URL: /experiments
Method: GET
Required Headers:
Authorization: Bearer <AUDITOR_TOKEN or ADMIN_TOKEN>
Query Parameters:
Retrieving a list of all experiments can be done by providing no parameters.
Important: If no parameters are provided, the endpoint will return all experiment URIs registered in the SEGB in JSON format.
Example without parameters:
Request:
GET /experiments HTTP/1.1 Host: http://example.com/experiments Authorization: Bearer <AUDITOR_TOKEN>
Response:
[ "http://www.gsi.upm.es/ontologies/amor/experiments/execution/ns#exp1", "http://www.gsi.upm.es/ontologies/amor/experiments/execution/ns#exp2" ]
Retrieving information about a specific experiment can be done in two ways:
Note: Any of the following alternatives can be used to specify the experiment in query parameters.
Option 1:
uri: Complete URI of the experiment (e.g., namespace#experiment_id).Important: If uri is provided, the namespace and experiment_id parameters will be ignored.
Recommendation: When using Python’s requests library, use the params argument to ensure proper encoding of the # character as %23. For example:
import requests url = "http://example.com/experiments" params = {"uri": "http://www.gsi.upm.es/ontologies/amor/experiments/execution/ns#exp1"} headers = {"Authorization": "Bearer <AUDITOR_TOKEN>"} response = requests.get(url, params=params, headers=headers) print(response.url) # The URL will automatically encode # as %23
Note for query parameter: The uri parameter contains # character is not allowed in a query parameter, it must be encoded as %23 if it is included in the URI. This is not required if the params argument is used, as in the previous example. For example:
/experiments?uri=http://www.gsi.upm.es/ontologies/amor/experiments/execution/ns%23exp1
Option 2:
namespace: The namespace of the experiment.experiment_id: The ID of the experiment.Recommendation: When using Python’s requests library, use the params argument to ensure proper encoding of the # character as %23. For example:
import requests url = "http://example.com/experiments" params = {"namespace": "http://www.gsi.upm.es/ontologies/amor/experiments/execution/ns", "experiment_id": "exp1"} headers = {"Authorization": "Bearer <AUDITOR_TOKEN>"} response = requests.get(url, params=params, headers=headers) print(response.url) # The URL will automatically encode # as %23
The following examples are valid:
/experiments?namespace=http://www.gsi.upm.es/ontologies/amor/experiments/execution/ns&experiment_id=exp1
/experiments?namespace=http://www.gsi.upm.es/ontologies/amor/experiments/execution/ns%23&experiment_id=exp1
Response Codes:
Status Code |
Description |
|---|---|
|
Returns the experiment details in Turtle (TTL) format (if uri is provided) or JSON format (if namespace and experiment_id are provided). If not, returns a list of all experiment URIs registered in the SEGB. |
|
No experiments found. |
|
Insufficient permissions (e.g., using a Logger Token). |
|
The specified experiment was not found. |
|
Missing required parameters (e.g., namespace or experiment_id) or Invalid URI format. The URI must be a valid IRI (Internationalized Resource Identifier <prefix>#<resource>) and should not contain spaces or special characters that are not allowed in IRIs. The URI must also be properly encoded if it contains reserved characters. |
3.8. GET /history¶
Description: Retrieve the history of all logged actions in the SEGB.
Request Details:
URL: /history
Method: GET
Required Headers:
Authorization: Bearer <AUDITOR_TOKEN or ADMIN_TOKEN>
Response Codes:
Status Code |
Description |
|---|---|
|
Returns the history in JSON format. |
|
No history found. |
|
Insufficient permissions (e.g., using a Logger Token). |
3.9. GET /query¶
Description: Execute a SPARQL query on the graph. (Not implemented yet)
Request Details:
URL: /query
Method: GET
Required Headers:
Authorization: Bearer <ADMIN_TOKEN>
Response Codes:
Status Code |
Description |
|---|---|
|
Insufficient permissions (e.g., using a Auditor or Logger Token). |
|
This endpoint is not yet implemented. |
3.10. GET /docs¶
Description: Access the OpenAPI playground for exploring and testing the SEGB API
Request Details:
URL: /docs
Method: GET
Response Codes:
Status Code |
Description |
|---|---|
|
Successfully loads the OpenAPI playground. |