Atbildes un kļūdas

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:

  • validationErrors kļūst par details.fields, un code kļūst par VALIDATION_FAILED arī 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, validationErrors un code, tiek pārvietoti uz details; piemēram, pārskata eksporta limit kļūst par details.limit.
  • Virknes tipa augstākā līmeņa error kļūst par message. 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 (422 un citi neklasificēti 4xx), RATE_LIMITED (429), EXTERNAL_PROVIDER_FAILED (502) un INTERNAL_ERROR (citi 5xx, tostarp 503).
  • requestId ir precīzā X-Request-Id atbildes 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ā:

  1. darbvietas marķieru konfigurācija un autentifikācija;
  2. saimnieka politika un marķieru/darbvietu biežuma ierobežojumi;
  3. pašreizējo tiesību filtrēšana;
  4. katrai izmaiņai — idempotences validācija/rezervācija;
  5. 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.

StatussKadPrecīzs satursSaistītās galvenes
401Trū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
404Marķieris ir derīgs, bet tā darbvietas saimniekam nav adminApiEnabled{ "error": "Not Found" }Cache-Control: no-store
429Marķiera vai darbvietas pieprasījumu kvota ir izsmelta{ "error": "Too many attempts. Please try again later." }Retry-After: <seconds>
503Darbvietas marķieru autentifikācija īslaicīgi nav pieejama{ "error": "Admin API workspace-token configuration is unavailable", "code": "WORKSPACE_API_CONFIG_UNAVAILABLE" }—
503Saimnieka 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 uzStatussPrecīzs satursGalvenes/piezīmes
Katrs maršruts pēc autentifikācijas403{ "error": "Insufficient workspace-token scope", "code": "INSUFFICIENT_SCOPE" }Tiek atgriezts, ja trūkst jebkura nepieciešamā tvēruma.
Katra izmaiņa400{ "error": "Idempotency-Key is required for this operation", "code": "IDEMPOTENCY_KEY_REQUIRED" }Atslēga nav norādīta.
Katra izmaiņa400{ "error": "Exactly one Idempotency-Key is required", "code": "INVALID_IDEMPOTENCY_KEY" }Dublēta vai ar komatiem apvienota galvene.
Katra izmaiņa400{ "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ņa409{ "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ņa409{ "error": "Request is already processing", "code": "IDEMPOTENT_REQUEST_PROCESSING" }Retry-After: 5.
Katra izmaiņa409{ "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ņa503{ "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ēmu422{ "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 ID404{ "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ļūmi500{ "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

GalapunktiStatussPrecīzs saturs
Objekta izveide/atjaunināšana; darbvietas lauku validācija422{ "validationErrors": { "<field>": ["<message>"] } }
DELETE /v2/admin/sites/:siteId, ja objektam ir atkarības409{ "error": "<message>", "code": "SITE_NOT_EMPTY" }
GET /v2/admin/sites/geocode nederīgs normalizēts meklējums400{ "error": "<message>", "code": "INVALID_GEOCODE_QUERY" }
Tas pats, pilna ierobežotā pakalpojuma sniedzēja rinda429{ "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ļūda502{ "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ācija422{ "error": "<message>", "code": "INVALID_POWER_MANAGEMENT_CONFIGURATION" }
Tas pats, OCPP atteikums/noildze, sacensības situācija vai saskaņošanas konflikts409{ "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.

GalapunktiStatussPrecīzs saturs
Jebkura iepriekš minētā darbība ar domēna validācijas kļūmi422{ "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 konfliktu409{ "error": "<message>", "code": "CHARGER_CONFLICT" }
GET /chargers/:chargerId/sessions, nederīgs noklusējuma/skaidri norādīts laika diapazons422{ "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

GalapunktiStatussPrecīzs saturs
Datu/eksporta diapazons, kur from >= to422{ "validationErrors": { "range": ["from must be earlier than to"] } }
Datu/eksporta diapazons pārsniedz 90 dienas422{ "validationErrors": { "range": ["Report ranges cannot exceed 90 days"] } }
Nederīgs necaurspīdīgs datu/mērījumu kursors422{ "validationErrors": { "cursor": ["<message>"] } }
GET /reports/export, rezultāts pārsniedz 2 000 rindas422{ "error": "<message>", "code": "REPORT_EXPORT_ROW_LIMIT", "limit": 2000 }
POST /reports/send, nav saglabāta grafika409{ "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ās502{ "error": "Report delivery failed", "code": "REPORT_DELIVERY_FAILED" }
Trūkst piederoša grafika/mērījumu resursa404kopīgais RESOURCE_NOT_FOUND saturs

Veiksmīgais eksports ir binārs; visas eksporta kļūdas paliek JSON.

Tarifu kļūdas

GalapunktiStatussPrecīzs saturs
Izveides/atjaunināšanas/komponentu/tirgus cenu/piešķīrumu domēna validācija422{ "validationErrors": { "<field>": ["<message>"] } }
Tarifa dzēšanas vai piešķīruma stāvokļa/atkarības/unikalitātes konflikts409{ "error": "<message>", "code": "TARIFF_CONFLICT" }
Nepiederošs tarifs, tirdzniecības zona, lādētājs, pieslēgvieta, tarifa piešķīrums vai cits ligzdots resurss404kopīgais RESOURCE_NOT_FOUND saturs

Uzlādes profilu kļūdas

GalapunktiStatussPrecīzs saturs
Izveides/atjaunināšanas/grafika/piešķīrumu domēna validācija422{ "validationErrors": { "<field>": ["<message>"] } }
Uz profilu atsaucas aizsargāta izmantošana409{ "error": "<message>", "code": "CHARGING_PROFILE_IN_USE" }
OCPP sinhronizācijas, piešķīruma, vienlaicīgas piekļuves vai cits profila konflikts409{ "error": "<message>", "code": "CHARGING_PROFILE_CONFLICT" }
Nepiederošs profils, lādētājs, pieslēgvieta, piešķīrums vai cits ligzdots resurss404kopī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.

StatussKods(-i)Saturs
400INVALID_USER_CURSOR{ "validationErrors": { "cursor": ["The user-list cursor is invalid for the selected status"] }, "code": "INVALID_USER_CURSOR" }
409USER_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>" }
422INVALID_EMAIL, INVALID_RFID, INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE{ "validationErrors": { "<field>": ["<message>"] }, "code": "<listed code>" }
422NO_CHARGERS_AVAILABLE{ "error": "No chargers are available", "code": "NO_CHARGERS_AVAILABLE" }
429INVITATION_RESEND_THROTTLED{ "error": "Invitation resend is temporarily unavailable", "code": "INVITATION_RESEND_THROTTLED" }; ietver Retry-After
503USER_CURSOR_UNAVAILABLE{ "error": "User pagination is temporarily unavailable", "code": "USER_CURSOR_UNAVAILABLE" }
404RESOURCE_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 grupaLietotāju domēna kodi, kas nav 404, papildus kopīgajām atbildēm
GET /usersINVALID_USER_CURSOR (400), USER_CURSOR_UNAVAILABLE (503)
POST /usersUSER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409)
PATCH /users/:userIdTAGLESS_USER_PROTECTED (409)
DELETE /users/:userIdTAGLESS_USER_PROTECTED, PROTECTED_WORKSPACE_USER, USER_RELATED_DATA (409)
Lietotāja informācija, transportlīdzekļi, RFID/piekļuves/ierobežojumu lasīšananav domēna koda, kas nav 404
RFID izveideCUSTOMER_CONTRACT_MISSING, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_RFID (422)
RFID atjaunināšana/dzēšanaTAGLESS_USER_PROTECTED (409)
Piekļuves aizstāšanaTAGLESS_USER_PROTECTED (409); NO_CHARGERS_AVAILABLE (422)
Piekļuves atsaukšanaTAGLESS_USER_PROTECTED (409)
Ierobežojuma izveide/atjaunināšanaTAGLESS_USER_PROTECTED, LIMIT_ALREADY_EXISTS (409); INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE (422)
Ierobežojuma dzēšanaTAGLESS_USER_PROTECTED (409)
Darbvietas uzaicinājuma izveideCUSTOMER_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īšanaINVALID_EMAIL (422), INVITATION_RESEND_THROTTLED (429)
Darbvietas uzaicinājuma atcelšanaINVALID_EMAIL (422)
Lādētāja vietējā lietotāja izveide esošam klientamLOCAL_USER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409)
Lādētāja vietējā lietotāja uzaicinājumsLOCAL_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šanaINVALID_EMAIL (422)
Vietējā lietotāja atjaunināšana/dzēšanaTAGLESS_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.