Saltearse al contenido

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

shell
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)
}
NombreDescripción
nameEl nombre del modelo. Debe cumplir las reglas de nombres y ser único entre los modelos del proyecto.
fieldListLos 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.

typeAlmacena
short-textUna única línea de texto.
long-textUn bloque multilínea / rich-text.
numberUn valor numérico.
dateUna fecha de calendario.
date-timeUna fecha junto con una hora.
mediaUna referencia a un fichero subido (imagen, documento, …).
booleantrue / false.
colorUn valor de color.
relationUna referencia a otra entidad. Requiere relatedModelId.
enumUna 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.

namecustomArgsAplicada en
requiredpreflight de publicación
uniqueguardado
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:

shell
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ódigoDescripción
201El modelo se creó. El cuerpo de la respuesta contiene el id del nuevo modelo.
400Payload 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.
401No autorizado. El token está ausente, malformado o ha expirado.
403Prohibido. El token no tiene permisos de escritura — usa un Write Token.
404Un relatedModelId no coincide con ningún modelo del proyecto.
500Error interno del servidor.