# API Client models

## Principles for designing a data model

### No view definition

Data models should only contain the data related to the functionality, and not view.
Each application should keep separate metadata related to the view configuration.

### The "kind" as the object type identifier

Each data object that can exist by itself or in multiple contexts' should contain the `kind` property that uniquely identifies the type. For example, the `HttpProject` class has the `Core#HttpProject`. These kinds are used by other libraries to identify which data types they are given as the input.
Kinds are defined in the `src/models/kinds.ts` file.

### Validation

THe data models should contain validators that produce the validation report. This ensures the support libraries can perform a validation of the data model they are receiving as an input to keep integrity of the data.

## The "store" models

All models under the `src/models/store` directory are considered "API" related models. For example, the `File` model is used to describe the file object in the API, but it is not used as any application's core data model. 
