-
Notifications
You must be signed in to change notification settings - Fork 1
Native Data Management System
Nodify Headless CMS is not just a powerful content management system — it is also an open source platform built with Java that integrates a native data management system. This built-in feature allows users to store and retrieve data directly within the CMS, eliminating the need for external databases or third-party services. The system is entirely API-driven, ensuring seamless integration with various applications, from websites to mobile apps and IoT devices.
With native i18n (multilingual) support, Nodify's data management system can handle translated data values across different languages, making it ideal for global applications.
| Challenge with Traditional CMS | Nodify's Solution |
|---|---|
| Need for external database (MySQL, PostgreSQL, MongoDB) | Built-in data storage |
| Separate API layer required | Native REST API included |
| Complex data synchronization | Unified content + data management |
| Additional licensing costs | Open source – no extra fees |
| Multiple systems to maintain | All-in-one platform |
Nodify provides an integrated way to push and fetch data efficiently. Unlike traditional CMS solutions that require separate databases or APIs, Nodify's internal data management system enables developers to interact with data effortlessly — all within the same platform that manages your content.
Nodify exposes a REST API to handle data operations. All endpoints are fully documented and support JSON payloads.
Data stored at the node level is automatically inherited by child nodes and their contents, following the same inheritance rules as content translations and values.
Store different data values per language using Nodify's built-in i18n capabilities:
{
"key": "WELCOME_BANNER",
"value": {
"en": "Welcome to our site",
"fr": "Bienvenue sur notre site",
"es": "Bienvenido a nuestro sitio"
}
}POST /v0/datas
Content-Type: application/jsonThis endpoint allows users to store data within Nodify's internal system.
Request Body Example:
{
"key": "user_settings",
"value": {
"theme": "dark",
"notifications": true,
"language": "en"
},
"name": "User Preferences",
"contentNodeCode": "user_123"
}Response (201 Created):
{
"id": "data_789",
"key": "user_settings",
"value": { "theme": "dark", "notifications": true },
"creationDate": 1703260800000
}GET /v0/datas/key/{key}Retrieve a specific data entry using its unique key.
Example Request:
GET /v0/datas/key/user_settingsResponse (200 OK):
{
"key": "user_settings",
"value": { "theme": "dark", "notifications": true },
"name": "User Preferences",
"creationDate": 1703260800000,
"modificationDate": 1703347200000
}DELETE /v0/datas/key/{key}Remove a specific data entry based on its key.
Example Request:
DELETE /v0/datas/key/user_settingsResponse: 204 No Content
GET /v0/datas/contentCode/{code}Retrieve all data entries associated with a specific content code (node or content identifier).
Example Request:
GET /v0/datas/contentCode/blog_post_123Response (200 OK):
[
{
"key": "author_name",
"value": "John Doe",
"dataType": "string"
},
{
"key": "reading_time",
"value": 5,
"dataType": "number"
}
]DELETE /v0/datas/contentCode/{code}Delete all data entries associated with a specific content code.
Example Request:
DELETE /v0/datas/contentCode/blog_post_123Response: 204 No Content
The data structure used in Nodify follows a straightforward JSON schema:
{
"contentNodeCode": "string",
"creationDate": 0,
"modificationDate": 0,
"dataType": "string",
"name": "string",
"key": "string",
"value": "string | object | array | number | boolean"
}| Field | Type | Description |
|---|---|---|
| contentNodeCode | string | Identifier linking data to a content node or content item |
| creationDate | long (timestamp) | When the data was created (milliseconds since epoch) |
| modificationDate | long (timestamp) | When the data was last modified |
| dataType | string | Type of data being stored (string, number, boolean, object, array) |
| name | string | Human-readable name for the data entry |
| key | string | Unique identifier for the data entry |
| value | any | The actual stored data (can be any JSON-serializable type) |
Stored data can be accessed in your templates using the $value(KEY) syntax:
<!-- Display stored data -->
<div class="user-profile">
<h2>$value(USER_NAME)</h2>
<p>Theme preference: $value(USER_THEME)</p>
<p>Notifications: $value(USER_NOTIFICATIONS)</p>
</div>
<!-- Conditional rendering based on stored data -->
$if(value(ENABLE_FEATURE_X))
<div class="new-feature">Check out our new feature!</div>
$endif| Use Case | Example | Benefit |
|---|---|---|
| User preferences | Theme, language, notification settings | No external user database needed |
| Application configuration | Feature flags, API keys, environment variables | Centralized configuration management |
| Session data | Shopping cart, form progress | Persistent across user visits |
| Analytics counters | Page views, click counts | Built-in data storage |
| A/B testing | Variant assignments, test groups | Simple key-value storage |
| Personalization | User segments, content recommendations | Data-driven content delivery |
| Form submissions | Contact forms, surveys | Direct storage without external DB |
Data can be linked to specific content items using the contentNodeCode field:
POST /v0/datas
{
"key": "article_metadata",
"value": { "author": "Jane Smith", "readingTime": 8 },
"contentNodeCode": "article_456"
}Store language-specific data using object values:
{
"key": "promo_banner",
"value": {
"en": "Summer Sale - 50% off!",
"fr": "Soldes d'été - 50% de réduction !",
"es": "Rebajas de verano - 50% de descuento!"
}
}Then display the correct language version:
<div class="promo">$value(promo_banner, $translate(LANGUAGE))</div>| Benefit | Description |
|---|---|
| Eliminates external databases | Everything is handled within Nodify – no MySQL, PostgreSQL, or MongoDB required |
| Simplifies development | Push and pull data without additional configurations or services |
| API-first approach | Ensures seamless integration with external systems (web, mobile, IoT) |
| Scalability | Enables easy data expansion and retrieval at scale |
| Open source | Full control over your data with no vendor lock-in |
| Java-based performance | Enterprise-grade reliability and speed |
| Unified platform | Content + data management in one place |
| i18n ready | Store multilingual data natively |
| Inheritance support | Parent node data automatically available to children |
// Good
{ "key": "user_email_notification_preference" }
// Avoid
{ "key": "u1" }Always associate data with the appropriate content node to maintain organizational clarity.
// String for text
{ "key": "site_name", "value": "My Website", "dataType": "string" }
// Boolean for flags
{ "key": "maintenance_mode", "value": false, "dataType": "boolean" }
// Object for complex data
{ "key": "social_links", "value": { "twitter": "@me", "github": "myuser" }, "dataType": "object" }Use the DELETE endpoints to remove stale or unused data entries.
| Feature | Nodify Native Data | External Database (MySQL, etc.) |
|---|---|---|
| Setup time | None – built-in | Hours to days |
| Maintenance | Zero | Ongoing |
| Scaling | Automatic with Nodify | Manual configuration |
| API layer | Included | Must be built |
| Content integration | Native | Custom integration required |
| i18n support | Built-in | Custom implementation |
| Cost | Included (open source) | Additional licensing/hosting |
With Nodify Headless CMS, managing structured data is more efficient than ever. Its built-in data management system allows developers to store, retrieve, and delete data without relying on external sources. As an open source, Java-based platform with a powerful REST API, native i18n support, and seamless content integration, Nodify is an all-in-one solution for both content and data management needs. 🚀
#Nodify #HeadlessCMS #DataManagement #NativeData #KeyValueStore #API #RESTAPI #OpenSource #Java #i18n #Multilingual #NoExternalDatabase #AllInOneCMS #ContentManagement #DataStorage #WebDevelopment #DeveloperTools