Kuntratt tar-risponsi u l-iżbalji tal-API tal-amministrazzjoni
Dan il-fajl jikkompleta l-kuntratt tar-risponsi għal kull endpoint f'Referenza tal-endpoints. Aqra r-ringiela tal-endpoint għall-body tas-suċċess tiegħu u t-tabelli hawn taħt għal kull body mhux ta' suċċess kondiviża jew speċifika għall-endpoint. B'mod predefinit, l-iżbalji jużaw diversi strutturi ta' kompatibbiltà; min jagħmel is-sejħa jista' jagħżel envelope universali wieħed.
Envelope strutturat fakultattiv tal-iżbalji
Ibgħat dan il-header tat-talba lil kwalunkwe endpoint:
X-Error-Format: envelope
Il-paragun tal-valur ineħħi l-ispazji mit-truf u ma jagħmilx distinzjoni bejn ittri kbar u żgħar. B'dak il-valur eżatt, kull rispons JSON bi status ta' 400 jew aktar jiġi kkonvertit għal:
ErrorEnvelope = {
error: {
code: string,
message: string,
details: Record<string, unknown>,
requestId: string
}
}
Eżempju ta' konverżjoni ta' body ta' validazzjoni predefinita:
{
"error": {
"code": "VALIDATION_FAILED",
"message": "Invalid request",
"details": {
"fields": {
"name": ["String must contain at least 1 character(s)"]
}
},
"requestId": "integration-42"
}
}
Ir-regoli tal-konverżjoni huma eżatti:
validationErrorsisirdetails.fields, ucodeisirVALIDATION_FAILEDanke meta l-body predefinita kellha wkoll kodiċi tad-dominju.- Jinżamm
codepredefinit fl-ogħla livell meta ma jkunx hemm oqsma ta' validazzjoni. - Proprjetajiet oħra fl-ogħla livell ħlief
error,message,validationErrorsucodejitmexxew f'details; pereżempju,limittal-esportazzjoni tar-rapport isirdetails.limit. errortat-tip string fl-ogħla livell isirmessage. Jekk ma jeżistix, jintuża l-istatus ta' riżerva.- Il-kodiċijiet ta' riżerva huma
AUTH_REQUIRED(401),PERMISSION_DENIED(403),RESOURCE_NOT_FOUND(404),CONFLICT(409),VALIDATION_FAILED(422u4xxoħra mhux klassifikati),RATE_LIMITED(429),EXTERNAL_PROVIDER_FAILED(502) uINTERNAL_ERROR(5xxoħra, inkluż503). requestIdhuwa l-header eżatt tar-risponsX-Request-Id. ID tat-talba pprovdut minn min jagħmel is-sejħa jintuża biss meta jaqbel ma'[A-Za-z0-9._:-]{1,128}wara li jitneħħew l-ispazji mit-truf; inkella s-server jiġġenera UUID.
Din it-trasformazzjoni ma tbiddilx l-istatus jew il-headers mhux tal-body. Tapplika wkoll għal ripetizzjonijiet idempotenti skont il-header X-Error-Format tat-talba ripetuta. Risponsi ta' suċċess binarji jibqgħu binarji; l-iżbalji JSON tagħhom jitqiegħdu f'envelope. It-tabelli li jifdal juru l-bodies predefiniti; l-applikazzjoni tar-regoli ta' hawn fuq tagħti l-body l-oħra possibbli tar-rispons għal kull ringiela.
Notazzjoni tar-risponsi
ValidationError = {
validationErrors: Record<string, string[]>,
code?: string
}
CodedError = {
error: string,
code: string,
// a route may add fields explicitly listed below
}
PlainError = { error: string }
error u t-test tal-messaġġi tal-validazzjoni huma deskrittivi, mhux identifikatur stabbli għall-programmi. Iddistingwi l-każijiet skont code meta preżenti. Il-validazzjoni tat-talba tirritorna 422 ValidationError; il-validazzjoni ta' oġġett sħiħ tista' tipproduċi { "validationErrors": {} } meta ma jiġi identifikat ebda qasam individwali. JSON invalidu u żbalji mhux mistennija jirritornaw il-500 PlainError globali muri hawn taħt.
L-eżempji JSON kollha juru l-istruttura eżatta tal-body. It-test muri bħala <message> huwa l-messaġġ ta' validazzjoni jew operazzjoni rritornat u huwa string JSON, mhux valur litterali bejn parentesi angolari.
Ordni tal-ipproċessar tat-talbiet
It-talbiet jiġu pproċessati f'din l-ordni:
- konfigurazzjoni u awtentikazzjoni tat-tokens tal-ispazju tax-xogħol;
- politika tal-host u limiti tar-rata tat-token/ispazju tax-xogħol;
- filtrazzjoni tad-drittijiet attwali;
- għal kull mutazzjoni, validazzjoni/claim tal-idempotenza;
- kontrolli tal-ambiti tal-endpoint, validazzjoni tat-talba u l-operazzjoni mitluba.
Għaldaqstant, mutazzjoni b'token validu iżda b'ambiti insuffiċjenti xorta trid tibgħat Idempotency-Key. Rispons komplut ta' mutazzjoni 403, 404, 409 jew 422 jista' jiġi ripetut għall-istess ċavetta/talba.
Risponsi tal-awtentikazzjoni, il-politika u l-limitu tar-rata
Dawn ir-risponsi jistgħu jseħħu fuq kull endpoint reġistrat /v2/admin qabel l-ipproċessar speċifiku għall-endpoint.
| Status | Meta | Body eżatta | Headers rilevanti |
|---|---|---|---|
401 | Token tal-ispazju tax-xogħol nieqes, duplikat, magħqud b'virgoli, mhux Bearer, malformat, mhux magħruf, skadut, revokat jew invalidu b'xi mod ieħor | { "error": "Unauthorized", "code": "INVALID_WORKSPACE_TOKEN" } | WWW-Authenticate: Bearer, Cache-Control: no-store |
404 | It-token huwa validu iżda l-host tal-ispazju tax-xogħol tiegħu m'għandux adminApiEnabled | { "error": "Not Found" } | Cache-Control: no-store |
429 | Il-kwota tat-talbiet għal kull token jew spazju tax-xogħol ġiet eżawrita | { "error": "Too many attempts. Please try again later." } | Retry-After: <seconds> |
503 | L-awtentikazzjoni tat-tokens tal-ispazju tax-xogħol temporanjament mhix disponibbli | { "error": "Admin API workspace-token configuration is unavailable", "code": "WORKSPACE_API_CONFIG_UNAVAILABLE" } | — |
503 | Tfittxija tal-politika tal-host jew awtorizzazzjoni tad-drittijiet attwali tfalli | { "error": "Workspace authorization is temporarily unavailable", "code": "WORKSPACE_AUTHORIZATION_UNAVAILABLE" } | — |
L-aċċess API huwa inkluż f'kull pjan. Id-diżattivazzjoni tas-setting adminApiEnabled tal-host tal-ispazju tax-xogħol tirritorna 404; it-telf ta' dritt għal funzjoni addizzjonali jneħħi biss l-ambiti affettwati. Iċ-ċaħda tal-ambitu li tirriżulta tuża r-rispons hawn taħt, mhux fluss ta' tiġdid tat-token.
Żbalji tal-ambiti, l-idempotenza, il-parsing, is-sjieda u mhux mistennija
| Japplika għal | Status | Body eżatta | Headers/noti |
|---|---|---|---|
| Kull rotta wara l-awtentikazzjoni | 403 | { "error": "Insufficient workspace-token scope", "code": "INSUFFICIENT_SCOPE" } | Irritornat meta jkun nieqes kwalunkwe ambitu meħtieġ. |
| Kull mutazzjoni | 400 | { "error": "Idempotency-Key is required for this operation", "code": "IDEMPOTENCY_KEY_REQUIRED" } | Ma ġiet ipprovduta ebda ċavetta. |
| Kull mutazzjoni | 400 | { "error": "Exactly one Idempotency-Key is required", "code": "INVALID_IDEMPOTENCY_KEY" } | Header duplikat jew magħqud b'virgoli. |
| Kull mutazzjoni | 400 | { "error": "Idempotency-Key must contain 1 to 255 visible characters", "code": "INVALID_IDEMPOTENCY_KEY" } | Vojt, twil wisq jew fih karattru ta' kontroll. |
| Kull mutazzjoni | 409 | { "error": "Idempotency-Key was already used with a different request", "code": "IDEMPOTENCY_CONFLICT" } | L-istess token/metodu/path/ċavetta, URL jew body differenti. |
| Kull mutazzjoni | 409 | { "error": "Request is already processing", "code": "IDEMPOTENT_REQUEST_PROCESSING" } | Retry-After: 5. |
| Kull mutazzjoni | 409 | { "error": "Previous request outcome is unknown; verify its effects before attempting the operation again", "code": "IDEMPOTENCY_OUTCOME_UNKNOWN" } | Il-lease tal-ipproċessar preċedenti skada, il-konnessjoni ngħalqet jew it-talba tlestiet b'5xx. |
| Kull mutazzjoni | 503 | { "error": "Idempotency storage unavailable", "code": "IDEMPOTENCY_UNAVAILABLE" } | L-API ma jistax jiċċekkja jew jissejvja r-rekord tal-idempotenza. |
| Kwalunkwe endpoint bi skema query/body/path invalida | 422 | { "validationErrors": { "<field>": ["<message>"] } } | Jista' jkun hemm diversi oqsma/messaġġi. Min jagħmel is-sejħa ma jistax jipprovdi cpoId; l-ispazju tax-xogħol dejjem jiġi mit-token. |
| Kwalunkwe riżorsa nested tal-ispazju tax-xogħol li ma tinstabx jew ID minn spazju ieħor | 404 | { "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" } | Użat b'mod konsistenti sakemm tabella hawn taħt ma tgħidx mod ieħor. |
| Kwalunkwe endpoint bi ħsara mhux mistennija | 500 | { "error": "Something went wrong" } | Għall-mutazzjonijiet, prova mill-ġdid bl-istess ċavetta aktar tard tirritorna 409 IDEMPOTENCY_OUTCOME_UNKNOWN. |
L-IDs tal-path tar-riżorsi jridu jkunu numri pożittivi. :siteId, :chargerId, :portId, :tariffId, :profileId, :assignmentId, :userId, :rfidId, :accessId, :limitId jew :localUserId mhux pożittiv jew mhux numeriku jirritorna 422 ValidationError, mhux 400.
Żbalji tas-siti u tal-ġestjoni tal-qawwa
| Endpoints | Status | Body eżatta |
|---|---|---|
| Ħolqien/aġġornament ta' sit; validazzjoni tal-qasam tal-ispazju tax-xogħol | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
DELETE /v2/admin/sites/:siteId meta s-sit ikollu dipendenzi | 409 | { "error": "<message>", "code": "SITE_NOT_EMPTY" } |
GET /v2/admin/sites/geocode tfittxija normalizzata invalida | 400 | { "error": "<message>", "code": "INVALID_GEOCODE_QUERY" } |
| L-istess, kju limitat tal-fornitur mimli | 429 | { "error": "<message>", "code": "GEOCODING_BUSY" }; jinkludi Retry-After meta pprovdut mill-ġeokodifikatur |
| L-istess, timeout/ħsara tal-fornitur jew żball mhux mistenni tal-ġeokodifikatur | 502 | { "error": "<message>", "code": "GEOCODING_UNAVAILABLE" }; żball mhux mistenni juża Address search is temporarily unavailable |
PUT /v2/admin/sites/:siteId/power-management konfigurazzjoni tat-topoloġija/dominju invalida | 422 | { "error": "<message>", "code": "INVALID_POWER_MANAGEMENT_CONFIGURATION" } |
| L-istess, rifjut/timeout OCPP, kunflitt konkorrenti jew ta' rikonċiljazzjoni | 409 | { "error": "<message>", "code": "POWER_MANAGEMENT_CONFLICT" } |
Żbalji taċ-ċarġers
mapChargerErrors() jintuża għall-ħolqien/aġġornament taċ-ċarġers, kredenzjali, settings tal-konnetturi, elenkar pubbliku, riżoluzzjoni tal-payload QR, mutazzjoni/aġġornament tal-konfigurazzjoni, bidu tal-firmware, l-erba' kmandi bażiċi kollha u t-talba tal-iskeda komposta.
| Endpoints | Status | Body eżatta |
|---|---|---|
| Kwalunkwe operazzjoni ta' hawn fuq bi żball ta' validazzjoni tad-dominju | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Kwalunkwe operazzjoni ta' hawn fuq b'kunflitt tal-istat, l-uniċità, offline/OCPP, il-fatturazzjoni, Tagless, il-konnettur jew il-prontezza | 409 | { "error": "<message>", "code": "CHARGER_CONFLICT" } |
GET /chargers/:chargerId/sessions, firxa tal-ħin predefinita/espliċita invalida | 422 | { "validationErrors": { "from": ["from must be before or equal to to"] } } jew { "validationErrors": { "from": ["Session range cannot exceed 90 days"] } } |
Operazzjonijiet sempliċi tal-qari jirritornaw biss ir-risponsi kondiviżi 401/403/404/429/500/503 flimkien mal-validazzjoni query/path 422. It-tħassir ta' ċarġer jista' jirritorna l-500 PlainError kondiviż jekk ifalli mingħajr rispons ta' żball aktar speċifiku.
Żbalji tar-rapporti
| Endpoints | Status | Body eżatta |
|---|---|---|
Firxa tad-data/esportazzjoni fejn from >= to | 422 | { "validationErrors": { "range": ["from must be earlier than to"] } } |
| Firxa tad-data/esportazzjoni ta' aktar minn 90 jum | 422 | { "validationErrors": { "range": ["Report ranges cannot exceed 90 days"] } } |
| Cursor opak invalidu għad-data/kejl | 422 | { "validationErrors": { "cursor": ["<message>"] } } |
GET /reports/export, ir-riżultat jaqbeż 2,000 ringiela | 422 | { "error": "<message>", "code": "REPORT_EXPORT_ROW_LIMIT", "limit": 2000 } |
POST /reports/send, ebda skeda salvata | 409 | { "error": "A workspace report schedule must be saved before sending", "code": "REPORT_SCHEDULE_REQUIRED" } |
| L-istess, il-mailer jirrifjuta/ifalli | 502 | { "error": "Report delivery failed", "code": "REPORT_DELIVERY_FAILED" } |
| Riżorsa tal-iskeda/kejl taħt is-sjieda assenti | 404 | body kondiviża RESOURCE_NOT_FOUND |
L-esportazzjoni li tirnexxi hija binarja; l-iżbalji kollha tal-esportazzjoni jibqgħu JSON.
Żbalji tat-tariffi
| Endpoints | Status | Body eżatta |
|---|---|---|
| Validazzjoni tad-dominju għall-ħolqien/aġġornament/komponenti/prezzijiet tas-suq/assenjazzjonijiet | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Kunflitt ta' stat/dipendenza/uniċità fit-tħassir tat-tariffa jew fl-assenjazzjoni | 409 | { "error": "<message>", "code": "TARIFF_CONFLICT" } |
| Tariffa, żona tal-offerti, ċarġer, konnettur, assenjazzjoni ta' tariffa jew riżorsa nested oħra mhux taħt is-sjieda | 404 | body kondiviża RESOURCE_NOT_FOUND |
Żbalji tal-profili tal-iċċarġjar
| Endpoints | Status | Body eżatta |
|---|---|---|
| Validazzjoni tad-dominju għall-ħolqien/aġġornament/skeda/assenjazzjonijiet | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Il-profil huwa referenzjat minn użu protett | 409 | { "error": "<message>", "code": "CHARGING_PROFILE_IN_USE" } |
| Kunflitt ta' sinkronizzazzjoni OCPP, assenjazzjoni, konkorrenza jew profil ieħor | 409 | { "error": "<message>", "code": "CHARGING_PROFILE_CONFLICT" } |
| Profil, ċarġer, konnettur, assenjazzjoni jew riżorsa nested oħra mhux taħt is-sjieda | 404 | body kondiviża RESOURCE_NOT_FOUND |
Żbalji tad-dominju tal-utent
Żbalji ta' validazzjoni tal-utent li jidentifikaw qasam jużaw ValidationError flimkien ma' code; żbalji oħra tal-utent jużaw CodedError. Il-każijiet kollha ta' riżorsi nieqsa jużaw ir-rispons kondiviż RESOURCE_NOT_FOUND li ma jiżvelax ir-riżorsi.
| Status | Kodiċi/Kodiċijiet | Body |
|---|---|---|
400 | INVALID_USER_CURSOR | { "validationErrors": { "cursor": ["The user-list cursor is invalid for the selected status"] }, "code": "INVALID_USER_CURSOR" } |
409 | USER_ALREADY_EXISTS, CUSTOMER_CONTRACT_MISSING, INVITATION_EMAIL_IN_USE, RFID_ALREADY_EXISTS, ACCESS_ALREADY_EXISTS, ACCESS_ALL_ALREADY_EXISTS, LIMIT_ALREADY_EXISTS, LOCAL_USER_ALREADY_EXISTS, PROTECTED_WORKSPACE_USER, TAGLESS_USER_PROTECTED, USER_RELATED_DATA | { "error": "<message>", "code": "<listed code>" } |
422 | INVALID_EMAIL, INVALID_RFID, INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE | { "validationErrors": { "<field>": ["<message>"] }, "code": "<listed code>" } |
422 | NO_CHARGERS_AVAILABLE | { "error": "No chargers are available", "code": "NO_CHARGERS_AVAILABLE" } |
429 | INVITATION_RESEND_THROTTLED | { "error": "Invitation resend is temporarily unavailable", "code": "INVITATION_RESEND_THROTTLED" }; jinkludi Retry-After |
503 | USER_CURSOR_UNAVAILABLE | { "error": "User pagination is temporarily unavailable", "code": "USER_CURSOR_UNAVAILABLE" } |
404 | RESOURCE_NOT_FOUND | { "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" } |
POST /users/invitations jista' wkoll jirritorna l-403 INSUFFICIENT_SCOPE kondiviż wara l-parsing tal-body jekk users:access ikun nieqes, jew jekk ġie pprovdut RFID u users:rfid ikun nieqes. L-endpoints tal-utenti lokali jelenkaw kull ambitu meħtieġ f'Referenza tal-endpoints.
Il-kodiċijiet tal-iżbalji tal-utent japplikaw kif ġej:
| Familja ta' endpoints | Kodiċijiet tad-dominju tal-utent mhux 404 flimkien mar-risponsi kondiviżi |
|---|---|
GET /users | INVALID_USER_CURSOR (400), USER_CURSOR_UNAVAILABLE (503) |
POST /users | USER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409) |
PATCH /users/:userId | TAGLESS_USER_PROTECTED (409) |
DELETE /users/:userId | TAGLESS_USER_PROTECTED, PROTECTED_WORKSPACE_USER, USER_RELATED_DATA (409) |
| Dettall tal-utent, vetturi, qari RFID/aċċess/limitu | ebda kodiċi tad-dominju mhux 404 |
| Ħolqien RFID | CUSTOMER_CONTRACT_MISSING, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_RFID (422) |
| Aġġornament/tħassir RFID | TAGLESS_USER_PROTECTED (409) |
| Sostituzzjoni tal-aċċess | TAGLESS_USER_PROTECTED (409); NO_CHARGERS_AVAILABLE (422) |
| Revoka tal-aċċess | TAGLESS_USER_PROTECTED (409) |
| Ħolqien/aġġornament tal-limitu | TAGLESS_USER_PROTECTED, LIMIT_ALREADY_EXISTS (409); INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE (422) |
| Tħassir tal-limitu | TAGLESS_USER_PROTECTED (409) |
| Ħolqien ta' stedina tal-ispazju tax-xogħol | CUSTOMER_CONTRACT_MISSING, INVITATION_EMAIL_IN_USE, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL/INVALID_RFID (422); INVITATION_RESEND_THROTTLED (429) meta japplika perjodu ta' stennija għat-twassil |
| Bgħit mill-ġdid ta' stedina tal-ispazju tax-xogħol | INVALID_EMAIL (422), INVITATION_RESEND_THROTTLED (429) |
| Kanċellazzjoni ta' stedina tal-ispazju tax-xogħol | INVALID_EMAIL (422) |
| Ħolqien ta' utent lokali taċ-ċarġer għal klijent eżistenti | LOCAL_USER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409) |
| Stedina ta' utent lokali taċ-ċarġer | LOCAL_USER_ALREADY_EXISTS, INVITATION_EMAIL_IN_USE, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL (422); INVITATION_RESEND_THROTTLED (429) meta japplika perjodu ta' stennija għat-twassil |
| Kanċellazzjoni ta' stedina ta' utent lokali | INVALID_EMAIL (422) |
| Aġġornament/tħassir ta' utent lokali | TAGLESS_USER_PROTECTED (409) |
L-eżiti kollha tas-sjieda u tar-riżorsi nieqsa f'dawk il-familji, inkluża email mhux reġistrata fuq POST /users, jużaw il-body kondiviża 404 RESOURCE_NOT_FOUND.
Risponsi mingħajr body u ta' ripetizzjoni
Rispons ta' suċċess 204 ma jkollux body. Dan japplika għal kull tħassir dokumentat li jelenka 204 empty. Ripetizzjoni idempotenti kompluta tissettja Idempotency-Replayed: true u tuża l-istatus/body maħżuna; għal 204, ir-rispons HTTP jibqa' mingħajr body. L-API qatt ma jirritorna oġġett JSON ta' suċċess għal operazzjoni dokumentata 204.