Overview
The main use cases for JsonHub are as follows:
Host object schemas - users can publish the definitions of data they serve or require in one central place. The only "language" supported right now is the JsonSchema
Gathering data directly - each defined object can be not only viewed by other users, but each user can also create one or more entities based on that object definition
Act as "backend" storage - the application's REST API supports all operations (also, there are available/planned SDKs for different programming languages), making the JsonHub possible persistence layer for other apps.
Glossary
The Term list:
- Definition
The Schema (Blueprint/Class) - this is the term that refers to the JSON Schema object's specification. Each Definition - in the context of the JsonHub application - is the JSON Schema object.
- Entity
The Data - Entities are "instances" of objects described by Definitions (schemas), wherefore each Entity refers to exactly one Definition that describes the validation rules for that Entity data.
- Parent Entity
As Definitions as Entities can have assigned a "parent" Entity (only Entity - it can't be a Definition). For Entities, it is optional - the Entity doesn't have to have a "parent" defined - if it doesn't, it is the so-called "Root Entity". On the other hand, all the Definitions created by Users MUST have a parent Entity defined - the "Root Definitions" are part of the application's core and can't be created by Users.
- Owner
Each created Definition and Entity has its "owner" (the User who created it). Entities, as definitions, can't have assigned the Parent Entity whose Owner is different from their own. Owners are not shown to other Users - so it is impossible to find all the objects "owned" by X unless you are the X and are looking for all the objects you own.
- User
Consumer of the data provided by the application
Diagram
To sum up the main rules:
Definitions without the "Parent Entity" are so-called "Root Definitions" and can't be created by users - they are part of the application core.
Users can't use the Entities that other users have created as a Parent Entity.
Above means that each Owner has to start by creating a "Root Entity" based on one of the "Root Definitions" - such an Enitity can (should) describe the "intention" for all its children (and so it can be called a Project)
There is no way (for other users) to find out which projects have been created by which Owners; however, of course, the Owners can freely add to the "Root Entities"/Projects any information, also such ones that will allow to identified them.
Each Entity is related to exactly one Definition, and Entity data are validated according to the Definition rules.