Administrēšanas API atbilžu un kļūdu līgums
Šis fails pabeidz atbilžu līgumu katram galapunktam Galapunktu uzziņā. Veiksmīgās atbildes saturu lasiet galapunkta rindā, bet visu kopīgo un galapunktam specifisko neveiksmīgo atbilžu saturu — tālāk norādītajās tabulās. Noklusēti kļūdas izmanto vairākas saderības struktūras; izsaucēji var izvēlēties vienu universālu ietvaru.
Neobligāts strukturēts kļūdas ietvars
Nosūtiet šo pieprasījuma galveni jebkurā galapunktā:
X-Error-Format: envelope
Vērtības salīdzināšanā tiek noņemtas sākuma un beigu atstarpes un netiek ņemts vērā burtu reģistrs. Ar šo precīzo vērtību katra JSON atbilde, kuras statuss ir 400 vai augstāks, tiek pārveidota par:
ErrorEnvelope = {
error: {
code: string,
message: string,
details: Record<string, unknown>,
requestId: string
}
}
Noklusējuma validācijas satura pārveidošanas piemērs:
{
"error": {
"code": "VALIDATION_FAILED",
"message": "Invalid request",
"details": {
"fields": {
"name": ["String must contain at least 1 character(s)"]
}
},
"requestId": "integration-42"
}
}
Pārveidošanas noteikumi ir precīzi:
validationErrorskļūst pardetails.fields, uncodekļūst parVALIDATION_FAILEDarī tad, ja noklusējuma saturs ietvēra domēna kodu.- Ja nav validācijas lauku, tiek saglabāts noklusējuma augstākā līmeņa
code. - Citi augstākā līmeņa rekvizīti, izņemot
error,message,validationErrorsuncode, tiek pārvietoti uzdetails; piemēram, pārskata eksportalimitkļūst pardetails.limit. - Virknes tipa augstākā līmeņa
errorkļūst parmessage. Ja tāda nav, tiek izmantota statusa rezerves vērtība. - Rezerves kodi ir
AUTH_REQUIRED(401),PERMISSION_DENIED(403),RESOURCE_NOT_FOUND(404),CONFLICT(409),VALIDATION_FAILED(422un citi neklasificēti4xx),RATE_LIMITED(429),EXTERNAL_PROVIDER_FAILED(502) unINTERNAL_ERROR(citi5xx, tostarp503). requestIdir precīzāX-Request-Idatbildes galvene. Izsaucēja norādīts pieprasījuma ID tiek izmantots tikai tad, ja pēc sākuma un beigu atstarpju noņemšanas tas atbilst[A-Za-z0-9._:-]{1,128}; citādi serveris ģenerē UUID.
Šī pārveidošana nemaina statusu vai galvenes, kas nav saistītas ar saturu. Tā attiecas arī uz idempotentiem atkārtojumiem atbilstoši atkārtojuma pieprasījuma X-Error-Format galvenei. Veiksmīgas binārās atbildes paliek bināras; to JSON kļūdas tiek ievietotas ietvarā. Atlikušās tabulas rāda noklusējuma saturu; piemērojot iepriekš norādītos noteikumus, iegūst otru iespējamo katras rindas atbildes saturu.
Atbilžu apzīmējumi
ValidationError = {
validationErrors: Record<string, string[]>,
code?: string
}
CodedError = {
error: string,
code: string,
// a route may add fields explicitly listed below
}
PlainError = { error: string }
error un validācijas ziņojuma teksts ir aprakstošs, nevis stabils programmatisks atšķiršanas kritērijs. Ja ir code, atšķiriet gadījumus pēc tā. Pieprasījuma validācija atgriež 422 ValidationError; visa objekta validācija var radīt { "validationErrors": {} }, ja nav identificēts atsevišķs lauks. Nederīgs JSON un neparedzētas kļūmes atgriež tālāk norādīto globālo 500 PlainError.
Visi JSON piemēri rāda precīzu satura struktūru. Teksts, kas parādīts kā <message>, ir atgrieztais validācijas vai darbības ziņojums un ir JSON virkne, nevis burtiska vērtība leņķiekavās.
Pieprasījumu apstrādes secība
Pieprasījumi tiek apstrādāti šādā secībā:
- darbvietas marķieru konfigurācija un autentifikācija;
- saimnieka politika un marķieru/darbvietu biežuma ierobežojumi;
- pašreizējo tiesību filtrēšana;
- katrai izmaiņai — idempotences validācija/rezervācija;
- galapunkta tvērumu pārbaudes, pieprasījuma validācija un pieprasītā darbība.
Tādēļ arī izmaiņu pieprasījumam ar derīgu, bet nepietiekama tvēruma marķieri ir jāsūta Idempotency-Key. Pabeigtas 403, 404, 409 vai 422 izmaiņas atbildi var atkārtot tai pašai atslēgai/pieprasījumam.
Autentifikācijas, politikas un biežuma ierobežojumu atbildes
Šīs atbildes var rasties katrā reģistrētajā /v2/admin galapunktā pirms galapunktam specifiskās apstrādes.
| Statuss | Kad | Precīzs saturs | Saistītās galvenes |
|---|---|---|---|
401 | Trūkstošs, dublēts, ar komatiem apvienots, ne-Bearer, nepareizi formatēts, nezināms, beidzies, atsaukts vai citādi nederīgs darbvietas marķieris | { "error": "Unauthorized", "code": "INVALID_WORKSPACE_TOKEN" } | WWW-Authenticate: Bearer, Cache-Control: no-store |
404 | Marķieris ir derīgs, bet tā darbvietas saimniekam nav adminApiEnabled | { "error": "Not Found" } | Cache-Control: no-store |
429 | Marķiera vai darbvietas pieprasījumu kvota ir izsmelta | { "error": "Too many attempts. Please try again later." } | Retry-After: <seconds> |
503 | Darbvietas marķieru autentifikācija īslaicīgi nav pieejama | { "error": "Admin API workspace-token configuration is unavailable", "code": "WORKSPACE_API_CONFIG_UNAVAILABLE" } | — |
503 | Saimnieka politikas nolasīšana vai pašreizējo tiesību autorizācija neizdodas | { "error": "Workspace authorization is temporarily unavailable", "code": "WORKSPACE_AUTHORIZATION_UNAVAILABLE" } | — |
API piekļuve ir iekļauta katrā plānā. Atspējojot darbvietas saimnieka adminApiEnabled iestatījumu, tiek atgriezts 404; zaudējot papildu funkcijas tiesības, tiek noņemti tikai attiecīgie tvērumi. Iegūtais tvēruma atteikums izmanto tālāk norādīto atbildi, nevis marķiera atsvaidzināšanas plūsmu.
Tvēruma, idempotences, parsēšanas, īpašumtiesību un neparedzētas kļūmes
| Attiecas uz | Statuss | Precīzs saturs | Galvenes/piezīmes |
|---|---|---|---|
| Katrs maršruts pēc autentifikācijas | 403 | { "error": "Insufficient workspace-token scope", "code": "INSUFFICIENT_SCOPE" } | Tiek atgriezts, ja trūkst jebkura nepieciešamā tvēruma. |
| Katra izmaiņa | 400 | { "error": "Idempotency-Key is required for this operation", "code": "IDEMPOTENCY_KEY_REQUIRED" } | Atslēga nav norādīta. |
| Katra izmaiņa | 400 | { "error": "Exactly one Idempotency-Key is required", "code": "INVALID_IDEMPOTENCY_KEY" } | Dublēta vai ar komatiem apvienota galvene. |
| Katra izmaiņa | 400 | { "error": "Idempotency-Key must contain 1 to 255 visible characters", "code": "INVALID_IDEMPOTENCY_KEY" } | Tukšs, pārāk garš vai satur vadības rakstzīmi. |
| Katra izmaiņa | 409 | { "error": "Idempotency-Key was already used with a different request", "code": "IDEMPOTENCY_CONFLICT" } | Tas pats marķieris/metode/ceļš/atslēga, cits URL vai saturs. |
| Katra izmaiņa | 409 | { "error": "Request is already processing", "code": "IDEMPOTENT_REQUEST_PROCESSING" } | Retry-After: 5. |
| Katra izmaiņa | 409 | { "error": "Previous request outcome is unknown; verify its effects before attempting the operation again", "code": "IDEMPOTENCY_OUTCOME_UNKNOWN" } | Iepriekšējās apstrādes rezervācija beidzās, savienojums tika aizvērts vai pieprasījums beidzās ar 5xx. |
| Katra izmaiņa | 503 | { "error": "Idempotency storage unavailable", "code": "IDEMPOTENCY_UNAVAILABLE" } | API nevar pārbaudīt vai saglabāt idempotences ierakstu. |
| Jebkurš galapunkts ar nederīgu vaicājuma/satura/ceļa shēmu | 422 | { "validationErrors": { "<field>": ["<message>"] } } | Var būt vairāki lauki/ziņojumi. Izsaucēji nevar norādīt cpoId; darbvieta vienmēr tiek iegūta no marķiera. |
| Jebkurš neatrasts ligzdots darbvietas resurss vai citas darbvietas ID | 404 | { "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" } | Tiek izmantots konsekventi, ja vien tabula tālāk nenorāda citādi. |
| Jebkurš galapunkts ar neparedzētu kļūmi | 500 | { "error": "Something went wrong" } | Izmaiņu gadījumā atkārtots mēģinājums vēlāk ar to pašu atslēgu atgriež 409 IDEMPOTENCY_OUTCOME_UNKNOWN. |
Resursu ceļu ID jābūt pozitīviem skaitļiem. Nepozitīvs vai neskaitlisks :siteId, :chargerId, :portId, :tariffId, :profileId, :assignmentId, :userId, :rfidId, :accessId, :limitId vai :localUserId atgriež 422 ValidationError, nevis 400.
Objektu un jaudas pārvaldības kļūdas
| Galapunkti | Statuss | Precīzs saturs |
|---|---|---|
| Objekta izveide/atjaunināšana; darbvietas lauku validācija | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
DELETE /v2/admin/sites/:siteId, ja objektam ir atkarības | 409 | { "error": "<message>", "code": "SITE_NOT_EMPTY" } |
GET /v2/admin/sites/geocode nederīgs normalizēts meklējums | 400 | { "error": "<message>", "code": "INVALID_GEOCODE_QUERY" } |
| Tas pats, pilna ierobežotā pakalpojuma sniedzēja rinda | 429 | { "error": "<message>", "code": "GEOCODING_BUSY" }; ietver Retry-After, ja to sniedz ģeokodētājs |
| Tas pats, pakalpojuma sniedzēja noildze/kļūme vai neparedzēta ģeokodētāja kļūda | 502 | { "error": "<message>", "code": "GEOCODING_UNAVAILABLE" }; neparedzēta kļūda izmanto Address search is temporarily unavailable |
PUT /v2/admin/sites/:siteId/power-management nederīga topoloģijas/domēna konfigurācija | 422 | { "error": "<message>", "code": "INVALID_POWER_MANAGEMENT_CONFIGURATION" } |
| Tas pats, OCPP atteikums/noildze, sacensības situācija vai saskaņošanas konflikts | 409 | { "error": "<message>", "code": "POWER_MANAGEMENT_CONFLICT" } |
Lādētāju kļūdas
mapChargerErrors() izmanto lādētāja izveide/atjaunināšana, piekļuves dati, pieslēgvietu iestatījumi, publiskais saraksts, QR satura noteikšana, konfigurācijas maiņa/pārlāde, aparātprogrammatūras sākšana, visas četras pamata komandas un apvienotā grafika pieprasījums.
| Galapunkti | Statuss | Precīzs saturs |
|---|---|---|
| Jebkura iepriekš minētā darbība ar domēna validācijas kļūmi | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Jebkura iepriekš minētā darbība ar stāvokļa, unikalitātes, bezsaistes/OCPP, norēķinu, Tagless, pieslēgvietas vai gatavības konfliktu | 409 | { "error": "<message>", "code": "CHARGER_CONFLICT" } |
GET /chargers/:chargerId/sessions, nederīgs noklusējuma/skaidri norādīts laika diapazons | 422 | { "validationErrors": { "from": ["from must be before or equal to to"] } } vai { "validationErrors": { "from": ["Session range cannot exceed 90 days"] } } |
Vienkāršas lasīšanas darbības atgriež tikai kopīgās 401/403/404/429/500/503 atbildes un 422 vaicājuma/ceļa validāciju. Lādētāja dzēšana var atgriezt kopīgo 500 PlainError, ja dzēšana neizdodas bez konkrētākas kļūdas atbildes.
Pārskatu kļūdas
| Galapunkti | Statuss | Precīzs saturs |
|---|---|---|
Datu/eksporta diapazons, kur from >= to | 422 | { "validationErrors": { "range": ["from must be earlier than to"] } } |
| Datu/eksporta diapazons pārsniedz 90 dienas | 422 | { "validationErrors": { "range": ["Report ranges cannot exceed 90 days"] } } |
| Nederīgs necaurspīdīgs datu/mērījumu kursors | 422 | { "validationErrors": { "cursor": ["<message>"] } } |
GET /reports/export, rezultāts pārsniedz 2 000 rindas | 422 | { "error": "<message>", "code": "REPORT_EXPORT_ROW_LIMIT", "limit": 2000 } |
POST /reports/send, nav saglabāta grafika | 409 | { "error": "A workspace report schedule must be saved before sending", "code": "REPORT_SCHEDULE_REQUIRED" } |
| Tas pats, e-pasta sūtītājs noraida/kļūdās | 502 | { "error": "Report delivery failed", "code": "REPORT_DELIVERY_FAILED" } |
| Trūkst piederoša grafika/mērījumu resursa | 404 | kopīgais RESOURCE_NOT_FOUND saturs |
Veiksmīgais eksports ir binārs; visas eksporta kļūdas paliek JSON.
Tarifu kļūdas
| Galapunkti | Statuss | Precīzs saturs |
|---|---|---|
| Izveides/atjaunināšanas/komponentu/tirgus cenu/piešķīrumu domēna validācija | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Tarifa dzēšanas vai piešķīruma stāvokļa/atkarības/unikalitātes konflikts | 409 | { "error": "<message>", "code": "TARIFF_CONFLICT" } |
| Nepiederošs tarifs, tirdzniecības zona, lādētājs, pieslēgvieta, tarifa piešķīrums vai cits ligzdots resurss | 404 | kopīgais RESOURCE_NOT_FOUND saturs |
Uzlādes profilu kļūdas
| Galapunkti | Statuss | Precīzs saturs |
|---|---|---|
| Izveides/atjaunināšanas/grafika/piešķīrumu domēna validācija | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Uz profilu atsaucas aizsargāta izmantošana | 409 | { "error": "<message>", "code": "CHARGING_PROFILE_IN_USE" } |
| OCPP sinhronizācijas, piešķīruma, vienlaicīgas piekļuves vai cits profila konflikts | 409 | { "error": "<message>", "code": "CHARGING_PROFILE_CONFLICT" } |
| Nepiederošs profils, lādētājs, pieslēgvieta, piešķīrums vai cits ligzdots resurss | 404 | kopīgais RESOURCE_NOT_FOUND saturs |
Lietotāju domēna kļūdas
Lietotāja validācijas kļūdas, kas identificē lauku, izmanto ValidationError un code; citas lietotāju kļūdas izmanto CodedError. Visi trūkstoša resursa gadījumi izmanto kopīgo resursu uzskaitīšanu nepieļaujošo RESOURCE_NOT_FOUND atbildi.
| Statuss | Kods(-i) | Saturs |
|---|---|---|
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" }; ietver 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 var arī atgriezt kopīgo 403 INSUFFICIENT_SCOPE pēc satura parsēšanas, ja trūkst users:access, vai ja ir norādīts RFID un trūkst users:rfid. Vietējo lietotāju galapunkti uzskaita katru nepieciešamo tvērumu Galapunktu uzziņā.
Lietotāju kļūdu kodi tiek piemēroti šādi:
| Galapunktu grupa | Lietotāju domēna kodi, kas nav 404, papildus kopīgajām atbildēm |
|---|---|
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) |
| Lietotāja informācija, transportlīdzekļi, RFID/piekļuves/ierobežojumu lasīšana | nav domēna koda, kas nav 404 |
| RFID izveide | CUSTOMER_CONTRACT_MISSING, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_RFID (422) |
| RFID atjaunināšana/dzēšana | TAGLESS_USER_PROTECTED (409) |
| Piekļuves aizstāšana | TAGLESS_USER_PROTECTED (409); NO_CHARGERS_AVAILABLE (422) |
| Piekļuves atsaukšana | TAGLESS_USER_PROTECTED (409) |
| Ierobežojuma izveide/atjaunināšana | TAGLESS_USER_PROTECTED, LIMIT_ALREADY_EXISTS (409); INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE (422) |
| Ierobežojuma dzēšana | TAGLESS_USER_PROTECTED (409) |
| Darbvietas uzaicinājuma izveide | CUSTOMER_CONTRACT_MISSING, INVITATION_EMAIL_IN_USE, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL/INVALID_RFID (422); INVITATION_RESEND_THROTTLED (429), ja piemēro piegādes nogaidīšanas periodu |
| Darbvietas uzaicinājuma atkārtota nosūtīšana | INVALID_EMAIL (422), INVITATION_RESEND_THROTTLED (429) |
| Darbvietas uzaicinājuma atcelšana | INVALID_EMAIL (422) |
| Lādētāja vietējā lietotāja izveide esošam klientam | LOCAL_USER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409) |
| Lādētāja vietējā lietotāja uzaicinājums | LOCAL_USER_ALREADY_EXISTS, INVITATION_EMAIL_IN_USE, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL (422); INVITATION_RESEND_THROTTLED (429), ja piemēro piegādes nogaidīšanas periodu |
| Vietējā lietotāja uzaicinājuma atcelšana | INVALID_EMAIL (422) |
| Vietējā lietotāja atjaunināšana/dzēšana | TAGLESS_USER_PROTECTED (409) |
Visi īpašumtiesību un trūkstošu resursu rezultāti šajās grupās, tostarp nereģistrēta e-pasta adrese galapunktā POST /users, izmanto kopīgo 404 RESOURCE_NOT_FOUND saturu.
Atbildes bez satura un atkārtojumi
Veiksmīgai 204 atbildei nav satura. Tas attiecas uz katru dokumentēto dzēšanu, kur norādīts 204 empty. Pabeigta idempotenta atkārtošana iestata Idempotency-Replayed: true un izmanto saglabāto statusu/saturu; 204 gadījumā HTTP atbilde joprojām ir bez satura. Dokumentētai 204 darbībai API nekad neatgriež JSON veiksmes objektu.