Aplicaciones y targets

Crea y cambia aplicaciones, elige su visibilidad, su modo de carga y su política de source maps, define sus targets de frontend y de backend, y vincula una aplicación a un proyecto de Beyond.

  • Disponibilidad: Planificado
  • Evidencia: Leído del código fuente
  • Referencia

Operaciones

Operación Solicitud Capacidad Reintento
applications.list GET /v1/organizations/{organization}/applications application.read
applications.create POST /v1/organizations/{organization}/applications application.manage key
applications.read GET /v1/applications/{application} application.read
applications.change PATCH /v1/applications/{application} application.manage version
applications.remove DELETE /v1/applications/{application} application.manage natural
targets.list GET /v1/applications/{application}/targets application.read
targets.define PUT /v1/applications/{application}/targets/{target} application.manage natural
targets.remove DELETE /v1/applications/{application}/targets/{target} application.manage natural
projects.read GET /v1/projects/{project} application.read
projects.bind PUT /v1/applications/{application}/project application.manage natural
projects.release DELETE /v1/applications/{application}/project application.manage natural

Los tipos de reintento se explican en Autenticación y convenciones.

applications.list acepta el parámetro de consulta opcional project, una identidad de proyecto: responde solo las aplicaciones vinculadas a ese proyecto, incluidos los vínculos pendientes. Las tres operaciones projects.* se explican en El proyecto de una aplicación.

La aplicación

Miembro Valores Predeterminado Notas
name ^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$ Obligatorio Único dentro de la organización, y la etiqueta predeterminada del subdominio de pruebas. Un nombre en uso es 409 NAME_CONFLICT.
title Hasta 120 caracteres Nombre para mostrar
visibility public, private public private exige la habilitación private_apps y la capacidad access.manage además de application.manage. Sin la habilitación: 403 ENTITLEMENT_REQUIRED.
loader esm, system esm El modo de carga de sus releases web
sourcemaps restricted, public, none restricted Consulta source maps
notices true, false true Si se generan avisos de actualización de dependencias. Un aviso nunca actualiza ni activa nada.
project Una identidad de proyecto, ^prj_[0-9a-f]{24}$ Solo en applications.create: registra la aplicación para ese proyecto de Beyond en la misma solicitud. En el documento de una aplicación, project es el vínculo que se describe abajo, y no está cuando la aplicación no pertenece a ningún proyecto.
version Entero Aumenta con cada cambio. Envíalo como expected_version cuando cambies la aplicación.
JSON
{
  "name": "shop",
  "title": "Shop",
  "visibility": "public",
  "loader": "esm",
  "sourcemaps": "restricted"
}

Cambiar una aplicación

PATCH recibe los miembros que se van a cambiar y expected_version. Los cambios se aplican a los releases que se preparen después: un release existente es inmutable y conserva el modo de carga, la política de source maps y la visibilidad con que se preparó.

Hacer privada una aplicación surte efecto en la entrega dentro del plazo de revocación configurado.

Eliminar una aplicación

Eliminarla desvincula sus entornos y dominios y revoca sus permisos de invitado. Sus fuentes y artefactos quedan a disposición de la recolección de basura, que conserva lo que otros releases y los trabajos en curso todavía referencian. Una aplicación en un estado que no permite eliminarla responde 409 STATE_INVALID.

El proyecto de una aplicación

Un proyecto de Beyond es una identidad que comparten Workspace, Delegate y CDN. En el CDN es una referencia en una aplicación y nada más.

  • Una aplicación pertenece como máximo a un proyecto. Un proyecto puede tener muchas aplicaciones. Una aplicación sin proyecto sigue siendo válida: nada exige un proyecto para registrar, preparar, hacer un release, vincular un dominio o servir.
  • El proyecto debe pertenecer a la organización de la aplicación.
  • Vincular y desvincular no cambian ningún identificador de aplicación, release, target ni salida, ninguna URL, ninguna cuota, plan ni crédito. La entrega publicada nunca lee la referencia y sirve igual responda o no Projects.
  • Las aplicaciones y los proyectos se relacionan solo por identificador, nunca por nombre.

Una aplicación que pertenece a un proyecto lleva project:

Miembro Valores Significado
id ^prj_[0-9a-f]{24}$ La identidad del proyecto
state pending, bound bound: Projects confirmó el vínculo. pending: el CDN registró la referencia y Projects todavía no la confirmó. La aplicación existe y funciona en ambos casos
bound Fecha y hora Cuándo se registró la referencia
by Opaco El miembro que la registró

projects.read responde el proyecto tal como lo informa Projects en ese momento; el CDN no guarda ninguna copia:

Miembro Valores Significado
id ^prj_[0-9a-f]{24}$ La identidad del proyecto
organization Opaco La organización a la que pertenece
name Hasta 200 caracteres Su nombre en Projects
state active, archived, deleted Su estado en Projects
url URI, opcional La dirección del proyecto en Beyond Projects, tomada de la configuración de la instalación. No está cuando no hay ninguna configurada

Un proyecto de una organización a la que no perteneces responde el mismo 404 NOT_FOUND que uno que no existe.

Vincular, registrar para un proyecto y desvincular

projects.bind recibe { "project": "prj_…" }.

Respuesta Significado
422 PROJECT_UNKNOWN El proyecto no existe o pertenece a otra organización. Nunca se distingue entre las dos
409 PROJECT_INACTIVE El proyecto está archivado o eliminado; details.state lleva su estado. Un proyecto archivado no recibe aplicaciones nuevas, y las que ya tiene quedan intactas
409 PROJECT_CONFLICT La aplicación ya está vinculada a otro proyecto, aquí o en Projects; details.current lo nombra. Desvincúlala primero: no hay ningún traslado implícito
502 UPSTREAM_UNAVAILABLE Projects no respondió. No es un rechazo ni una aprobación. La referencia queda pending, y repetir la solicitud converge
501 NOT_IMPLEMENTED Esta instancia del servicio no está conectada a Projects
409 STATE_INVALID Se desvinculó mientras se le consultaba a Projects. La desvinculación gana y la aplicación queda sin vínculo

Repetir una vinculación para el mismo proyecto deja el mismo estado y confirma un vínculo pending.

applications.create con project comprueba el proyecto antes de crear nada, así que PROJECT_UNKNOWN, PROJECT_INACTIVE, UPSTREAM_UNAVAILABLE y NOT_IMPLEMENTED no crean nada. La respuesta es la aplicación tal como queda: project.state es bound cuando Projects confirmó y pending cuando no, nunca bound para un vínculo que nadie confirmó. Un reintento con la misma Idempotency-Key no crea una segunda aplicación y le consulta de nuevo a Projects mientras el vínculo está pendiente.

projects.release elimina solo la referencia, primero en Projects y luego aquí. La aplicación, sus targets, releases, vínculos de entorno, dominios, permisos de invitado y salidas publicadas quedan exactamente como están, y se puede vincular de nuevo. Desvincular una aplicación que no pertenece a ningún proyecto responde lo mismo. Cuando Projects no responde, no cambia nada y la respuesta es 502 UPSTREAM_UNAVAILABLE.

Vincular y desvincular se anuncian con el evento existente application.changed, con data.change igual a project.bound o project.released. No hay ningún tipo de evento nuevo.

Archivar o eliminar un proyecto en Beyond Projects no destruye nada en el CDN. Solo impide que se le vinculen aplicaciones nuevas.

Targets

Un target es una entrada de la aplicación. El parámetro de ruta es su nombre, ^[a-z][a-z0-9-]{0,31}$, por ejemplo web o api.

Miembro Obligatorio Regla
kind Sí frontend o backend
package Sí El nombre del paquete, opcionalmente con el prefijo de su proveedor: npm: cuando no se indica
selection Sí Una versión exacta o un rango. Un rango se resuelve una vez por registro y queda fijado en el grafo.
entry Sí Una subruta de entrada pública del paquete, . para la exportación principal. Nunca es una ruta a un archivo fuente interno.
conditions No Nombres de condiciones adicionales, en minúsculas
runtime No Solo para targets de backend: un requisito que se declara al consumidor externo, de hasta 80 caracteres. El CDN nunca inicia ni administra un host.
JSON
{ "kind": "frontend", "package": "@example/app", "selection": "^1.0.0", "entry": "." }

Un target surte efecto en el siguiente registro. Definir un target no prepara nada por sí solo. Una entrada que esta versión no puede procesar, como un proveedor desconocido, es 422 UNSUPPORTED_INPUT.

Los targets de backend se entregan como salidas compiladas con una resolución congelada. Consulta Targets de backend.