Crear Entidad
Crea un nuevo modelo Entity (un content type) en el esquema de tu proyecto, con su lista de campos. Una vez creado, puedes empezar a añadir contenido de ese tipo con POST /content.
Este es el equivalente de gestión de esquema de los endpoints de contenido: en lugar de crear una entrada, crea el tipo al que pertenecen las entradas.
Endpoint
curl -X POST https://api.contentisland.net/api/1.0/model/entity \--header 'Authorization: Bearer TU_WRITE_TOKEN' \--header 'Content-Type: application/json' \--data '{ ... }'Body
interface CreateEntityPayload { name: string; // nombre del modelo (ver "Reglas de nombres" abajo) fieldList: FieldSpec[]; // al menos un campo, en orden}
interface FieldSpec { id?: string; // omítelo al crear — el servidor asigna uno name: string; // nombre del campo, único dentro del modelo type: FieldType; // ver "Tipos de campo" abajo relatedModelId?: string; // obligatorio para los tipos "relation" / "enum" isArray?: boolean; // true → el campo almacena una lista de valores (por defecto false) validations?: Validation[]; // ver "Validaciones" abajo}
interface Validation { name: string; // 'required' | 'unique' | 'min-length' | 'max-length' | 'media-type' customArgs?: any; // depende de la validación (ver la tabla)}| Nombre | Descripción |
|---|---|
name | El nombre del modelo. Debe cumplir las reglas de nombres y ser único entre los modelos del proyecto. |
fieldList | Los campos de la entidad, en orden. Se requiere al menos un campo. El orden de los campos se preserva. |
Tipos de campo
El type de cada campo es uno de los primitivos de abajo, o uno de los dos tipos relacionales.
type | Almacena |
|---|---|
short-text | Una única línea de texto. |
long-text | Un bloque multilínea / rich-text. |
number | Un valor numérico. |
date | Una fecha de calendario. |
date-time | Una fecha junto con una hora. |
media | Una referencia a un fichero subido (imagen, documento, …). |
boolean | true / false. |
color | Un valor de color. |
relation | Una referencia a otra entidad. Requiere relatedModelId. |
enum | Una referencia a un enum. Requiere relatedModelId. |
Pon isArray: true en cualquier campo para que almacene una lista de ese tipo (por ejemplo, un array de tags short-text, o una multi-relación).
Validaciones
Añade validations a un campo para restringir sus valores. Se almacenan cuando creas el modelo y se aplican
cuando el contenido se guarda o se publica.
name | customArgs | Aplicada en |
|---|---|---|
required | — | preflight de publicación |
unique | — | guardado |
min-length | { "length": <number> } | preflight de publicación |
max-length | { "length": <number> } | preflight de publicación |
media-type | { "allowedExtensions": [{ "name": ".png", "category": "image" }, …] } | preflight de publicación |
Reglas de nombres
El nombre de un modelo (y las mismas reglas aplican a los nombres de campo) debe:
- coincidir con el patrón
/^[a-zA-Z0-9_ -]+$/(letras, dígitos, espacios,_,-), - tener como máximo 128 caracteres,
- no ser una palabra reservada de tipo de campo (
short-text,long-text,number,date,date-time,media,boolean,color), - ser único entre los modelos del proyecto. Los nombres de campo deben ser únicos dentro del modelo (sin distinguir mayúsculas/minúsculas).
Ejemplo
Una entidad Article que referencia una entidad Author existente (relation) y un enum Size:
curl -X POST https://api.contentisland.net/api/1.0/model/entity \--header 'Authorization: Bearer TU_WRITE_TOKEN' \--header 'Content-Type: application/json' \--data '{ "name": "Article", "fieldList": [ { "name": "title", "type": "short-text", "validations": [ { "name": "required" }, { "name": "max-length", "customArgs": { "length": 120 } } ] }, { "name": "body", "type": "long-text" }, { "name": "views", "type": "number" }, { "name": "cover", "type": "media", "validations": [ { "name": "media-type", "customArgs": { "allowedExtensions": [ { "name": ".png", "category": "image" }, { "name": ".jpg", "category": "image" } ] } } ] }, { "name": "tags", "type": "short-text", "isArray": true }, { "name": "writtenBy", "type": "relation", "relatedModelId": "660f5b8a3a1c2d4e7f8b9012" }, { "name": "size", "type": "enum", "relatedModelId": "660f5b8a3a1c2d4e7f8b34cd" } ]}'Respuesta
En caso de éxito, el endpoint devuelve 201 Created con el id del nuevo modelo:
interface SaveModelResponse { id: string;}{ "id": "660f5b8a3a1c2d4e7f8b9012"}Códigos de estado
| Código | Descripción |
|---|---|
| 201 | El modelo se creó. El cuerpo de la respuesta contiene el id del nuevo modelo. |
| 400 | Payload inválido — nombre incorrecto (formato / longitud / reservado / duplicado), fieldList vacío, nombres de campo duplicados, o un campo relation/enum apuntando al tipo de destino equivocado. |
| 401 | No autorizado. El token está ausente, malformado o ha expirado. |
| 403 | Prohibido. El token no tiene permisos de escritura — usa un Write Token. |
| 404 | Un relatedModelId no coincide con ningún modelo del proyecto. |
| 500 | Error interno del servidor. |