Skip to main content

GeneratedAPI

Coming soon

In preparation. This page describes the target interface to gather your feedback; nothing is usable yet.

Generated APIs are in preparation: this manifest is not accepted by sng apply yet.

apiVersionapibuilder.stackngo.io/v1alpha1
kindGeneratedAPI
Applied bysng apply (upcoming)

What it is for​

A GeneratedAPI assembles the Model and View objects of the same application, generates the Go code of an HTTP API, compiles it, and serves it. You describe your data and your routes; the platform produces the binary, deploys it, and exposes it over HTTPS.

Attaching to an API

The Model and View resources are attached to the GeneratedAPI by their spec.application field, which carries its name (application: blog). Without selector, the API is made of all the tenant's resources whose spec.application equals its name.

To send e-mails, spec.mail designates a sender (senderRef, a MailUser) and the templates (templates, MailTemplate objects) the API may use. See Send an email.

Minimal example​

apiVersion: apibuilder.stackngo.io/v1alpha1
kind: GeneratedAPI
metadata:
name: blog
spec:
servicePort: 8080

Complete annotated example​

apiVersion: apibuilder.stackngo.io/v1alpha1
kind: GeneratedAPI
metadata:
name: blog
spec:
servicePort: 8080 # creates an internal service; without it, no exposure
replicas: 2
ingress:
enabled: true
includeGeneratedHost: true # keeps the generated host api-<uuid>.<domain>
domains: [api.blog.acme.dev.stackngo.app]
env: # non-sensitive variables of the generated server
LOG_LEVEL: info
envFromSecrets: # sensitive variables, from a tenant secret
- envVar: PAYMENT_API_KEY
name: blog-runtime
key: payment-api-key
resources:
requests: {cpu: 100m, memory: 128Mi}

Fields​

GeneratedAPI​

GeneratedAPI assemble vos Model et View en une API HTTP générée et déployée par la plateforme dans votre tenant.

ChampDescriptionDéfautValidation
apiVersion stringapibuilder.stackngo.io/v1alpha1
kind stringGeneratedAPI
metadata ObjectMetaSeul metadata.name est à renseigner (nom de la ressource dans votre tenant).
spec GeneratedAPISpec
status GeneratedAPIStatus

GeneratedAPISpec​

GeneratedAPISpec décrit les ressources qui composent l'API et la façon de l'exécuter et de l'exposer.

ChampDescriptionDéfautValidation
selector LabelSelectorSelector choisit, par leurs labels, les Model et View qui composent l'API.
Absent : l'API se compose des ressources dont spec.application vaut le nom de cette API.
generatorImage stringGeneratorImage est l'image du générateur d'API. Vide : image fournie par la plateforme.
runtimeImage stringRuntimeImage est l'image qui exécute l'API générée. Vide : image fournie par la plateforme.
binaryPath stringBinaryPath est l'emplacement de l'exécutable de l'API dans l'image d'exécution (défaut : /work/generated-api).
httpCoreBuildPkg stringPaquet compilé par le générateur (défaut : ./src). À ne modifier que sur indication du support.
replicas integerReplicas est le nombre d'instances de l'API (défaut : 1).1
servicePort integerServicePort est le port d'écoute de l'API. S'il est supérieur à 0, l'API est joignable par vos autres services
sur ce port, et elle peut être publiée sur internet (voir ingress).
debug booleanDebug active les journaux détaillés du générateur.
resources ResourceRequirementsResources fixe le processeur et la mémoire réservés et maximaux de l'API (facultatif).
initResources ResourceRequirementsInitResources fixe le processeur et la mémoire de l'étape de génération, avant le démarrage de l'API (facultatif).
ingress GeneratedAPIIngressSpecPublication de l'API sur internet en HTTPS, à l'adresse api-<nom>.<zone de votre tenant>
et sur vos domaines. Nécessite servicePort.
egress string arrayEgress : sorties ouvertes en plus des services de votre tenant et du DNS. "internet" ouvre
Internet (serveur SMTP, base de données externe), jamais les réseaux internes de la plateforme.
MaxItems: 1
items:Enum: [internet]
Optional: {}
env object (keys:string, values:string)Env : variables d'environnement transmises à l'API.
envFromSecrets GeneratedAPIEnvFromSecret arrayEnvFromSecrets : variables d'environnement lues dans des secrets de votre tenant.
mail GeneratedAPIMailSpecMail : envoi d'e-mails par le service d'e-mails de la plateforme (MailUser et MailTemplate
du groupe mail.stackngo.io de votre tenant). Absent : l'API n'envoie pas d'e-mail.

GeneratedAPIStatus​

GeneratedAPIStatus est l'état de l'API constaté par la plateforme.

ChampDescriptionDéfautValidation
conditions Condition arrayConditions : Ready (API déployée et prête), Synced (configuration à jour).
mergedConfigHash stringMergedConfigHash est l'empreinte de la configuration complète de l'API ; elle change à chaque modification prise en compte.
observedGeneration integerObservedGeneration est la dernière version du manifeste prise en compte.
ingressUUID stringObsolète : identifiant de l'ancienne adresse générée api-<identifiant>.<domaine>, conservée
pour les API qui l'ont déjà reçue hors d'un tenant. Les nouvelles API n'en reçoivent plus.
ingressHost stringAdresse publique principale de l'API (ex. api-blog.acme.example.com).
ingressHosts string arrayToutes les adresses publiques de l'API.

GeneratedAPIIngressSpec​

GeneratedAPIIngressSpec règle la publication de l'API sur internet.

ChampDescriptionDéfautValidation
enabled booleanEnabled : false garde l'API privée à votre tenant. Absent : l'API est publiée dès que servicePort est défini.
domains string arrayDomains : noms de domaine complets supplémentaires sous lesquels publier l'API, dans la zone
de votre tenant ou dans un domaine que vous avez apporté.
includeGeneratedHost booleanIncludeGeneratedHost garde l'adresse générée api-<nom>.<zone de votre tenant> en plus de vos domaines (défaut : true).true

GeneratedAPIEnvFromSecret​

GeneratedAPIEnvFromSecret lit une variable d'environnement dans une clé d'un secret de votre tenant.

ChampDescriptionDéfautValidation
envVar stringEnvVar est le nom de la variable d'environnement transmise à l'API.
name stringName est le nom du secret.
key stringKey est la clé du secret qui contient la valeur.

GeneratedAPIMailSpec​

GeneratedAPIMailSpec désigne l'expéditeur et les modèles d'e-mail que l'API peut utiliser.

ChampDescriptionDéfautValidation
senderRef stringSenderRef est le nom d'un MailUser (expéditeur) de votre tenant.MaxLength: 253
MinLength: 1
templates string arrayTemplates : noms des MailTemplate de votre tenant que l'API peut envoyer.MaxItems: 50
MinItems: 1

Status and conditions​

ConditionMeaning
ReadyThe generated server is deployed and ready
SyncedThe models and views are merged without conflict, and the designated sender and e-mail templates exist and are ready
ReasonMeaningWhat to do
MergeFailedTwo models for the same key, two views for the same pathRead the message, rename
MailNotReadyThe MailUser or a MailTemplate designated by spec.mail is missing or not readySee Send an email
MissingImagesGeneration or runtime images not configuredReport it to support
InvalidEnvConfigMalformed variable in env or envFromSecretsRead the message
DeploymentNotReadyThe server does not startRead the logs of the generation container, then of the server

status.ingressHost gives the public address, status.ingressUUID the stable identifier of the generated host, status.mergedConfigHash the fingerprint of the merged configuration.

What happens when you apply​

Every change to an attached Model or View regenerates and redeploys the API.

What happens when you delete​

Deleting the GeneratedAPI stops the API: its HTTPS address no longer responds. The Model and View objects remain.

See also​