| title | Quick Start |
|---|---|
| description | Create your first Entity Template and Entity in the Internal Developer Platform in minutes |
This tutorial walks you through creating your first Entity Template and Entity in the Internal Developer Platform. By the end, you'll understand the basic workflow of modeling your software catalog.
Ensure the Internal Developer Platform is running. See Installation for setup instructions.
# Verify the Internal Developer Platform is running
curl http://localhost:8084/actuator/healthBefore creating Entity Templates, think about what you want to track. For this tutorial, we'll model a simple software catalog with:
- Services - Microservices in your platform
- Teams - Engineering teams
- Repositories - GitHub repositories
erDiagram
TEAM ||--o{ SERVICE : owns
SERVICE ||--|| REPOSITORY : "has code in"
SERVICE {
string identifier PK
string name
string description
string status
}
TEAM {
string identifier PK
string name
string slack_channel
}
REPOSITORY {
string identifier PK
string name
string url
number stars
}
curl -X POST http://localhost:8084/api/v1/entity-templates \
-H "Content-Type: application/json" \
-d '{
"identifier": "team",
"description": "An engineering team in the organization",
"properties_definitions": [
{
"name": "name",
"description": "Team name",
"type": "STRING",
"required": true,
"rules": {
"min_length": 2,
"max_length": 100
}
},
{
"name": "slack_channel",
"description": "Team Slack channel",
"type": "STRING",
"required": false
},
{
"name": "email",
"description": "Team contact email",
"type": "STRING",
"required": false,
"rules": {
"format": "EMAIL"
}
}
]
}'curl -X POST http://localhost:8084/api/v1/entity-templates \
-H "Content-Type: application/json" \
-d '{
"identifier": "github_repository",
"description": "A GitHub repository containing source code",
"properties_definitions": [
{
"name": "name",
"description": "Repository name",
"type": "STRING",
"required": true
},
{
"name": "url",
"description": "Repository URL",
"type": "STRING",
"required": true,
"rules": {
"format": "URL"
}
},
{
"name": "stars",
"description": "Number of GitHub stars",
"type": "NUMBER",
"required": false,
"rules": {
"min_value": 0
}
},
{
"name": "is_public",
"description": "Whether the repository is public",
"type": "BOOLEAN",
"required": false
}
]
}'curl -X POST http://localhost:8084/api/v1/entity-templates \
-H "Content-Type: application/json" \
-d '{
"identifier": "service",
"description": "A microservice in the platform",
"properties_definitions": [
{
"name": "name",
"description": "Service name",
"type": "STRING",
"required": true
},
{
"name": "description",
"description": "Service description",
"type": "STRING",
"required": false
},
{
"name": "status",
"description": "Service lifecycle status",
"type": "STRING",
"required": false,
"rules": {
"enum_values": ["development", "staging", "production", "deprecated"]
}
}
],
"relations_definitions": [
{
"name": "owned_by",
"target_template_identifier": "team",
"required": true,
"to_many": false
},
{
"name": "repository",
"target_template_identifier": "github_repository",
"required": false,
"to_many": false
}
]
}'List all created templates:
curl http://localhost:8084/api/v1/entity-templates | jqGet a specific template:
curl http://localhost:8084/api/v1/entity-templates/identifier/service | jqYou've just created three Entity Templates. Let's break down what each part means:
{
"identifier": "service", // Unique ID for referencing
"description": "...", // Human-readable description
"properties_definitions": [...], // Data fields
"relations_definitions": [...] // Links to other templates
}{
"name": "status", // Property name
"description": "...", // What it represents
"type": "STRING", // Data type: STRING, NUMBER, BOOLEAN
"required": false, // Is it mandatory?
"rules": { // Validation rules
"enum_values": ["dev", "prod"]
}
}{
"name": "owned_by", // Relation name
"target_template_identifier": "team", // Target template
"required": true, // Is it mandatory?
"to_many": false // One-to-one or one-to-many?
}Now that you have Entity Templates, you can:
- Understand Concepts - Deep dive into Entity Templates, Properties, and Relations
- Configure Data Integration - Set up Webhooks and Kafka to populate entities automatically
- Create Scorecards - Track engineering metrics and health
- Explore the API - Full API reference with Swagger UI
To delete a template (and all its entities):
curl -X DELETE http://localhost:8084/api/v1/entity-templates/identifier/service[!WARNING] "Cascading Deletes" Deleting a template may affect relations in other templates. Plan your deletions carefully.