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. |
{
"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.
El vínculo
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. |
{ "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.