API di convalida
Convalida documenti JSON OSCAL 1.2.2 su HTTP: stateless, anonimi o con una chiave API, alimentati dallo stesso motore del validatore del browser.
L'API di convalida OSCAL Secani convalida i documenti JSON OSCAL 1.2.2 su HTTP. PUBBLICA il documento stesso come organismo della richiesta – senza busta, senza account – e ricevi un rapporto leggibile dalla macchina dallo stesso motore che alimenta il validatore del browser. È progettato per macchine in volo: lavori CI, script di integrazione e altri strumenti che producono o trasformano documenti OSCAL.
Contratto sulla privacy. Il tuo documento viene elaborato temporaneamente in memoria sui server dell'UE (Francoforte) e scartato quando viene inviata la risposta. Niente viene persistente, registrato o utilizzato per altro oltre a produrre la risposta; la telemetria è solo aggregata (tipo di modello, intervallo di dimensioni, risultato, durata). IL validatore del browser rimane completamente locale nel browser: il tuo documento non lascia mai il browser lì.
Avvio rapido
curl -sS -X POST https://secani.com/api/oscal/v1/validate \
-H "content-type: application/json" \
--data-binary @system-security-plan.jsonGli artefatti di grandi dimensioni (i cataloghi completi possono superare il limite di 4 MB del corpo grezzo) si comprimono molto bene: inviali compressi:
gzip -c catalog.json | curl -sS -X POST https://secani.com/api/oscal/v1/validate \
-H "content-type: application/json" \
-H "content-encoding: gzip" \
--data-binary @-Risposta
Una convalida completata restituisce sempre HTTP 200 – "valid": false è una convalida riuscita di un documento non valido. Ramo sul valid campo, non il codice di stato.
{
"valid": false,
"model": "system-security-plan",
"oscalVersion": "1.2.2",
"level": "schema",
"complete": true,
"issues": [
{
"ruleId": "nist-schema:1.2.2:system-security-plan:required:system-security-plan/metadata/version:required",
"path": "/system-security-plan/metadata/version",
"message": "must have required property 'version'",
"keyword": "required",
"severity": "error"
}
],
"issueCount": 37,
"truncated": false,
"meta": {
"engine": "@secani/oscal",
"validator": "1.2.2",
"schemaSource": "NIST OSCAL v1.2.2 release JSON schemas",
"patches": ["profile-combine-method"],
"durationMs": 84
}
}| Campo | Senso |
|---|---|
valid | Se il documento è stato convalidato senza error risultati. warning i risultati non ce la fanno false. |
model | Modello OSCAL rilevato (uno degli otto modelli OSCAL 1.2.2). |
oscalVersion | IL oscal-version dichiarato nei metadati del documento; unknown se assente. |
level | Livello di convalida eseguito: schema (predefinito) o full (vedi Livelli di validazione). |
complete | true quando ogni livello richiesto è stato completato per un modello riconosciuto. |
issues[].ruleId | ID stabile della regola che ha prodotto il risultato, derivato da schema o semantico. |
issues[].path | Puntatore JSON RFC 6901 nel documento inviato. |
issues[].severity | error O warning; warning è consultivo e non fa valid falso. |
issueCount | Numero totale reale di problemi, anche quando issues è troncato. |
truncated | true quando sono stati trovati più di 200 problemi e l'elenco è stato limitato. |
meta.validator | OSCAL rilascia il target dei validatori precompilati (attualmente 1.2.2). |
meta.patches | Deviazioni documentate dagli schemi di rilascio grezzi del NIST. |
Errori
Gli errori utilizzano i dettagli del problema RFC 9457 (application/problem+json) con un formato leggibile dalla macchina stabile code:
Ogni problema include anche un'azione utilizzabile resolution e un documentation URL. Vedi il completo riferimento per il ripristino degli errori.
| Stato | Codice | Senso |
|---|---|---|
| 400 | ERR_INVALID_JSON | Il corpo non è JSON ben formato. |
| 400 | ERR_INVALID_UTF8 | Il corpo della richiesta non è UTF-8 valido. |
| 400 | ERR_UNKNOWN_MODEL | JSON, ma nessun modello root OSCAL riconoscibile. |
| 400 | ERR_INVALID_CONTENT_ENCODING | Content-Encoding: gzip dichiarato ma il corpo non è un gzip valido. |
| 400 | ERR_UNSUPPORTED_PARAMETER | Un parametro di query contiene un valore non valido o non supportato (ad esempio un valore sconosciuto rules id). |
| 401 | ERR_INVALID_API_KEY | La chiave API presentata è sconosciuta o revocata. |
| 405 | ERR_METHOD_NOT_ALLOWED | Sono accettati solo POST (e OPZIONI). |
| 413 | ERR_PAYLOAD_TOO_LARGE | Corpo grezzo superiore a 4 MB o corpo decompresso superiore a 24 MB. |
| 415 | ERR_UNSUPPORTED_MEDIA_TYPE | Tipo di contenuto diverso da application/json, o una codifica non supportata. |
| 429 | ERR_RATE_LIMITED | Limite di velocità superato; Vedere Retry-After. |
| 500 | ERR_INTERNAL | Guasto imprevisto; non vengono divulgati dati interni. |
| 503 | ERR_KEY_SERVICE_UNAVAILABLE | La verifica della chiave è temporaneamente non disponibile; Vedere Retry-After. |
Livelli di validazione
IL level il parametro di query controlla la profondità di convalida. Senza nessuno dato, level=schema viene eseguito: semplice convalida dello schema JSON, invariato. level=full coinvolge inoltre il livello semantico: controlli di vincoli e riferimenti che vanno oltre ciò che il solo JSON Schema può esprimere.
curl -sS -X POST "https://secani.com/api/oscal/v1/validate?level=full" \
-H "content-type: application/json" \
--data-binary @catalog.jsonUN full run che raggiunge effettivamente il livello semantico può restituire risultati con severity: "warning". warning i risultati sono consultivi e non rendono un documento non valido: segnalano modelli discutibili ma che non violano lo schema (come un collegamento interno che non punta a nulla) e valid soggiorni true. Continua a ramificarsi valid; severity quindi separa gli errori dai suggerimenti.
{
"valid": true,
"model": "catalog",
"oscalVersion": "1.2.2",
"level": "full",
"complete": true,
"issues": [
{
"ruleId": "CAT-002.a",
"path": "/catalog/controls/0/links/0/href",
"message": "local catalog link '#missing-part' does not resolve to a control, part, or resource",
"keyword": "resolved-catalog-link",
"severity": "warning"
}
],
"issueCount": 1,
"truncated": false,
"meta": {
"engine": "@secani/oscal",
"validator": "1.2.2",
"schemaSource": "NIST OSCAL v1.2.2 release JSON schemas",
"patches": ["profile-combine-method"],
"durationMs": 112,
"semanticRules": {
"count": 30,
"sha256": "d5e9ef745394fed06db58bcd5999c505cbccc83e460db024b6f3061cb710d213"
}
}
}Le regole predefinite vengono attivate individualmente tramite rules= – un elenco di ID regola separati da virgole, valido solo insieme level=full. Ritorna un ID sconosciuto 400 ERR_UNSUPPORTED_PARAMETER nominare l'ID incriminato, senza scaricare il catalogo delle regole:
curl -sS -X POST "https://secani.com/api/oscal/v1/validate?level=full&rules=PROF-002.a" \
-H "content-type: application/json" \
--data-binary @profile.jsonOgni full run che raggiunge i report del livello semantico meta.semanticRules: il numero di regole semantiche attive (count) e un SHA-256 stabile sull'insieme ordinato dei loro ID (sha256). UN full run rifiutato a livello di schema non raggiunge mai la semantica, quindi porta no meta.semanticRules. L'hash identifica esattamente quale set di regole è stato applicato, quindi è possibile inserire una regola rules= lo cambia. Una risposta archiviata diventa quindi una registrazione riproducibile di ciò che è stato effettivamente controllato, anche se il catalogo delle regole cresce con le versioni future.
Limiti
- Corpo della richiesta: 4 MB grezzi, 24 MB decompressi (
Content-Encoding: gzipè supportato e consigliato per documenti di grandi dimensioni). - Un documento per richiesta.
- Limiti di velocità anonimi: 10 richieste al minuto e 300 al giorno per cliente, emerse
RateLimit-Limit,RateLimit-Remaining, ERateLimit-Resetintestazioni di risposta, conRetry-Aftersu 429 risposte. Hai bisogno di più? Crea una chiave API (vedi sotto) o contatta ciao@secani.com.
Chiavi API
Limiti più elevati e durevoli vengono forniti con una chiave API. Crei le chiavi nelle impostazioni dell'organizzazione; ogni chiave viene mostrata esattamente una volta: al momento della creazione. Invialo come Authorization: Bearer sk_oscal_…:
curl -sS -X POST https://secani.com/api/oscal/v1/validate \
-H "authorization: Bearer sk_oscal_..." \
-H "content-type: application/json" \
--data-binary @system-security-plan.jsonCon una chiave, i limiti salgono a 120 richieste al minuto e 10.000 al giorno per chiave, applicati centralmente e indipendentemente da ogni singola istanza del server, mentre i limiti anonimi sono ottimali per istanza. Resta il livello anonimo: richieste senza an Authorization l'intestazione si comporta invariata. Ritorna una chiave sconosciuta o revocata 401 ERR_INVALID_API_KEY e non ritorna mai al livello anonimo.
Parametri riservati
level E rules non sono più prenotati: sono attivi; vedere Livelli di convalida sopra. Un parametro mantiene un intervallo di valori riservato:
oscal-version– blocca la versione specifica e accetta solo1.2.2Oggi. Qualsiasi altro valore è riservato per futuri rilasci e resi OSCALERR_UNSUPPORTED_PARAMETERcon una spiegazione.
OpenAPI
Viene notificato il contratto canonico leggibile dalla macchina /openapi.json. La versione /api/oscal/v1/openapi.json L'URL rimane disponibile per la compatibilità. CORS è aperto (*), in modo che l'API possa essere richiamata direttamente dagli strumenti basati su browser.
Vedi anche: il validatore del browser per uso interattivo e il Kit di strumenti TypeScript dietro entrambi.