Vastused ja vead

Admin API vastuste ja vigade leping

See fail täiendab iga Endpointide viite endpointi vastuselepingut. Eduka sisu kohta lugege endpointi rida ning kõigi ühiste või endpointipõhiste ebaedukate sisude kohta allolevaid tabeleid. Vaikimisi kasutavad vead mitut ühilduvuskuju; kliendid saavad valida ühe universaalse ümbrise.

Valikuline struktureeritud veaümbris

Saatke see päringupäis mis tahes endpointile:

X-Error-Format: envelope

Väärtuse võrdlemisel eemaldatakse ääretühikud ja tähesuurust ei arvestata. Selle täpse väärtusega teisendatakse iga JSON-vastus olekuga 400 või kõrgem kujule:

ErrorEnvelope = {
  error: {
    code: string,
    message: string,
    details: Record<string, unknown>,
    requestId: string
  }
}

Vaikimisi valideerimissisu teisenduse näide:

{
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "Invalid request",
    "details": {
      "fields": {
        "name": ["String must contain at least 1 character(s)"]
      }
    },
    "requestId": "integration-42"
  }
}

Teisendusreeglid on täpsed:

  • validationErrors muutub details.fields-ks ja code VALIDATION_FAILED-ks ka siis, kui vaikimisi sisul oli domeenikood.
  • Vaikimisi ülataseme code säilib, kui valideerimisvälju pole.
  • Muud ülataseme omadused peale error, message, validationErrors ja code liiguvad details alla; näiteks aruandeekspordi limit muutub väärtuseks details.limit.
  • Ülataseme string error muutub väärtuseks message. Selle puudumisel kasutatakse oleku varuväärtust.
  • Varukoodid on AUTH_REQUIRED (401), PERMISSION_DENIED (403), RESOURCE_NOT_FOUND (404), CONFLICT (409), VALIDATION_FAILED (422 ja muud liigitamata 4xx), RATE_LIMITED (429), EXTERNAL_PROVIDER_FAILED (502) ja INTERNAL_ERROR (muud 5xx, sealhulgas 503).
  • requestId on täpne X-Request-Id vastusepäis. Kliendi antud päringu ID-d kasutatakse ainult siis, kui see vastab pärast ääretühikute eemaldamist [A-Za-z0-9._:-]{1,128}-le; muidu loob server UUID.

See teisendus ei muuda olekut ega sisuga mitteseotud päiseid. See kehtib ka idempotentsetele kordustele vastavalt korduspäringu X-Error-Format päisele. Kahendvormingus edukad vastused jäävad kahendvormingusse; nende JSON-vead saavad ümbrise. Ülejäänud tabelid näitavad vaikimisi sisu; ülaltoodud reeglid annavad igale reale teise võimaliku vastusesisu.

Vastuste tähistus

ValidationError = {
  validationErrors: Record<string, string[]>,
  code?: string
}

CodedError = {
  error: string,
  code: string,
  // a route may add fields explicitly listed below
}

PlainError = { error: string }

error ja valideerimissõnumi tekst on kirjeldavad, mitte stabiilne programmiline eristaja. Harunege code alusel, kui see on olemas. Päringu valideerimine tagastab 422 ValidationError; kogu objekti valideerimine võib anda { "validationErrors": {} }, kui üksikut välja ei tuvastata. Vigane JSON ja ootamatud tõrked tagastavad allpool näidatud globaalse 500 PlainError.

Kõik JSON-näited on täpsed sisustruktuurid. <message> tähistab tagastatavat valideerimis- või toimingusõnumit ja on JSON-string, mitte sõnasõnaline nurksulgudes väärtus.

Päringu töötlemisjärjekord

Päringuid töödeldakse selles järjekorras:

  1. tööruumi pääsutõendi seadistus ja autentimine;
  2. hosti reeglistik ning pääsutõendi/tööruumi päringupiirangud;
  3. praeguste õiguste filtreerimine;
  4. iga muudatuse puhul idempotentsuse kontroll/hõive;
  5. endpointi ulatusekontrollid, päringu valideerimine ja taotletud toiming.

Seega peab ka kehtiva, kuid ebapiisava ulatusega pääsutõendiga muudatus saatma Idempotency-Key. Lõpetatud 403, 404, 409 või 422 muudatuse vastust saab sama võtme/päringuga korrata.

Autentimise, reeglistiku ja päringupiirangu vastused

Need vastused võivad tekkida igal registreeritud /v2/admin endpointil enne endpointipõhist töötlemist.

OlekMillalTäpne sisuAsjakohased päised
401Puuduv, korduv, komaga ühendatud, mitte-Bearer, vigase vorminguga, tundmatu, aegunud, tühistatud või muul viisil vigane tööruumi pääsutõend{ "error": "Unauthorized", "code": "INVALID_WORKSPACE_TOKEN" }WWW-Authenticate: Bearer, Cache-Control: no-store
404Pääsutõend kehtib, kuid selle tööruumi hostil puudub adminApiEnabled{ "error": "Not Found" }Cache-Control: no-store
429Pääsutõendi või tööruumi päringukvoot on ammendatud{ "error": "Too many attempts. Please try again later." }Retry-After: <seconds>
503Tööruumi pääsutõendi autentimine pole ajutiselt saadaval{ "error": "Admin API workspace-token configuration is unavailable", "code": "WORKSPACE_API_CONFIG_UNAVAILABLE" }—
503Hosti reeglistiku päring või praeguste õiguste autoriseerimine nurjub{ "error": "Workspace authorization is temporarily unavailable", "code": "WORKSPACE_AUTHORIZATION_UNAVAILABLE" }—

API juurdepääs sisaldub igas paketis. Tööruumi hosti adminApiEnabled seade keelamisel tagastatakse 404; lisafunktsiooni õiguse kaotamine eemaldab vaid mõjutatud pääsuulatused. Tekkiv ulatusest keeldumine kasutab allolevat vastust, mitte pääsutõendi uuendamise voogu.

Pääsuulatus, idempotentsus, parsimine, omand ja ootamatud tõrked

KohaldubOlekTäpne sisuPäised/märkused
Iga marsruut pärast autentimist403{ "error": "Insufficient workspace-token scope", "code": "INSUFFICIENT_SCOPE" }Tagastatakse, kui puudub mõni nõutav pääsuulatus.
Iga muudatus400{ "error": "Idempotency-Key is required for this operation", "code": "IDEMPOTENCY_KEY_REQUIRED" }Võtit pole antud.
Iga muudatus400{ "error": "Exactly one Idempotency-Key is required", "code": "INVALID_IDEMPOTENCY_KEY" }Korduv või komaga ühendatud päis.
Iga muudatus400{ "error": "Idempotency-Key must contain 1 to 255 visible characters", "code": "INVALID_IDEMPOTENCY_KEY" }Tühi, liiga pikk või sisaldab juhtmärki.
Iga muudatus409{ "error": "Idempotency-Key was already used with a different request", "code": "IDEMPOTENCY_CONFLICT" }Sama pääsutõend/meetod/tee/võti, erinev URL või sisu.
Iga muudatus409{ "error": "Request is already processing", "code": "IDEMPOTENT_REQUEST_PROCESSING" }Retry-After: 5.
Iga muudatus409{ "error": "Previous request outcome is unknown; verify its effects before attempting the operation again", "code": "IDEMPOTENCY_OUTCOME_UNKNOWN" }Eelmine töötlusliising aegus, ühendus sulgus või päring lõppes veaga 5xx.
Iga muudatus503{ "error": "Idempotency storage unavailable", "code": "IDEMPOTENCY_UNAVAILABLE" }API ei saa idempotentsuskirjet kontrollida ega salvestada.
Mis tahes vigase päringu-/sisu-/teeskeemiga endpoint422{ "validationErrors": { "<field>": ["<message>"] } }Välju/sõnumeid võib olla mitu. Kliendid ei saa anda cpoId; tööruum tuleb alati pääsutõendist.
Mis tahes puuduv pesastatud tööruumi ressurss või teise tööruumi ID404{ "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" }Kasutatakse järjepidevalt, kui allolev tabel ei ütle teisiti.
Mis tahes ootamatu tõrkega endpoint500{ "error": "Something went wrong" }Muudatuste korral annab sama võtmega hiljem kordamine 409 IDEMPOTENCY_OUTCOME_UNKNOWN.

Ressursitee ID-d peavad olema positiivsed arvud. Mittepositiivne või mittearvuline :siteId, :chargerId, :portId, :tariffId, :profileId, :assignmentId, :userId, :rfidId, :accessId, :limitId või :localUserId tagastab 422 ValidationError, mitte 400.

Asukoha ja võimsushalduse vead

EndpointidOlekTäpne sisu
Asukoha loomine/uuendamine; tööruumi väljade valideerimine422{ "validationErrors": { "<field>": ["<message>"] } }
DELETE /v2/admin/sites/:siteId, kui asukohal on sõltuvusi409{ "error": "<message>", "code": "SITE_NOT_EMPTY" }
GET /v2/admin/sites/geocode vigane normaliseeritud otsing400{ "error": "<message>", "code": "INVALID_GEOCODE_QUERY" }
Sama, teenusepakkuja piiratud järjekord on täis429{ "error": "<message>", "code": "GEOCODING_BUSY" }; sisaldab Retry-After, kui geokodeerija selle annab
Sama, teenusepakkuja ajalõpp/tõrge või geokodeerija ootamatu viga502{ "error": "<message>", "code": "GEOCODING_UNAVAILABLE" }; ootamatu viga kasutab Address search is temporarily unavailable
PUT /v2/admin/sites/:siteId/power-management vigane topoloogia/domeeniseadistus422{ "error": "<message>", "code": "INVALID_POWER_MANAGEMENT_CONFIGURATION" }
Sama, OCPP keeldumine/ajalõpp, võidujooks või kooskõlastuskonflikt409{ "error": "<message>", "code": "POWER_MANAGEMENT_CONFLICT" }

Laadija vead

mapChargerErrors() kasutatakse laadija loomisel/uuendamisel, autentimisandmetel, pistikuseadetel, avalikul loetlemisel, QR-sisu lahendamisel, seadistuse muutmisel/uuesti laadimisel, püsivara käivitamisel, kõigi nelja põhikäsu ja koondajakava päringul.

EndpointidOlekTäpne sisu
Mis tahes ülaltoodud toiming domeeni valideerimisveaga422{ "validationErrors": { "<field>": ["<message>"] } }
Mis tahes ülaltoodud toiming oleku, unikaalsuse, võrguühenduse/OCPP, arvelduse, Taglessi, pistiku või valmiduse konfliktiga409{ "error": "<message>", "code": "CHARGER_CONFLICT" }
GET /chargers/:chargerId/sessions, vigane vaikimisi/selgesõnaline ajavahemik422{ "validationErrors": { "from": ["from must be before or equal to to"] } } või { "validationErrors": { "from": ["Session range cannot exceed 90 days"] } }

Tavalised lugemistoimingud tagastavad ainult ühised 401/403/404/429/500/503 vastused ja 422 päringu/tee valideerimise. Laadija kustutamine võib tagastada ühise 500 PlainError, kui kustutamine nurjub ilma täpsema veavastuseta.

Aruandevead

EndpointidOlekTäpne sisu
Andmete/ekspordi vahemik, kus from >= to422{ "validationErrors": { "range": ["from must be earlier than to"] } }
Andmete/ekspordi vahemik üle 90 päeva422{ "validationErrors": { "range": ["Report ranges cannot exceed 90 days"] } }
Andmete/mõõtmiste vigane läbipaistmatu kursor422{ "validationErrors": { "cursor": ["<message>"] } }
GET /reports/export, tulemus ületab 2000 rida422{ "error": "<message>", "code": "REPORT_EXPORT_ROW_LIMIT", "limit": 2000 }
POST /reports/send, salvestatud ajakava puudub409{ "error": "A workspace report schedule must be saved before sending", "code": "REPORT_SCHEDULE_REQUIRED" }
Sama, meiliteenus keeldub/nurjub502{ "error": "Report delivery failed", "code": "REPORT_DELIVERY_FAILED" }
Omatav ajakava-/mõõtmisressurss puudub404ühine RESOURCE_NOT_FOUND sisu

Edukas eksport on kahendvormingus; kõik ekspordivead jäävad JSON-iks.

Tariifivead

EndpointidOlekTäpne sisu
Loomise/uuendamise/komponentide/turuhinna/määramise domeenivalideerimine422{ "validationErrors": { "<field>": ["<message>"] } }
Tariifi kustutamise või määramise oleku/sõltuvuse/unikaalsuse konflikt409{ "error": "<message>", "code": "TARIFF_CONFLICT" }
Tariif, hinnapiirkond, laadija, pistik, tariifimäärang või muu pesastatud ressurss ei kuulu omanikule404ühine RESOURCE_NOT_FOUND sisu

Laadimisprofiilide vead

EndpointidOlekTäpne sisu
Loomise/uuendamise/ajakava/määramise domeenivalideerimine422{ "validationErrors": { "<field>": ["<message>"] } }
Profiilile viitab kaitstud kasutus409{ "error": "<message>", "code": "CHARGING_PROFILE_IN_USE" }
OCPP sünkroonimise, määramise, samaaegsuse või muu profiili konflikt409{ "error": "<message>", "code": "CHARGING_PROFILE_CONFLICT" }
Profiil, laadija, pistik, määrang või muu pesastatud ressurss ei kuulu omanikule404ühine RESOURCE_NOT_FOUND sisu

Kasutajadomeeni vead

Välja tuvastavad kasutaja valideerimisvead kasutavad ValidationError ja code; muud kasutajavead kasutavad CodedError. Kõik puuduva ressursi juhud kasutavad ühist olemasolu mitteavalduvat RESOURCE_NOT_FOUND vastust.

OlekKoodidSisu
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" }; sisaldab 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 võib pärast sisu parsimist tagastada ka ühise 403 INSUFFICIENT_SCOPE, kui users:access puudub, või kui RFID anti ja users:rfid puudub. Kohalike kasutajate endpointid loetlevad iga nõutava pääsuulatuse Endpointide viites.

Kasutajate veakoodid kehtivad järgmiselt:

Endpointide rühmMuud kui 404 kasutajadomeeni koodid lisaks ühistele vastustele
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)
Kasutaja andmete, sõidukite, RFID/juurdepääsu/piirangute lugeminepole muud domeenikoodi kui 404
RFID loomineCUSTOMER_CONTRACT_MISSING, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_RFID (422)
RFID uuendamine/kustutamineTAGLESS_USER_PROTECTED (409)
Juurdepääsu asendamineTAGLESS_USER_PROTECTED (409); NO_CHARGERS_AVAILABLE (422)
Juurdepääsu tühistamineTAGLESS_USER_PROTECTED (409)
Piirangu loomine/uuendamineTAGLESS_USER_PROTECTED, LIMIT_ALREADY_EXISTS (409); INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE (422)
Piirangu kustutamineTAGLESS_USER_PROTECTED (409)
Tööruumikutse loomineCUSTOMER_CONTRACT_MISSING, INVITATION_EMAIL_IN_USE, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL/INVALID_RFID (422); INVITATION_RESEND_THROTTLED (429), kui saatmise ooteaeg kehtib
Tööruumikutse uuesti saatmineINVALID_EMAIL (422), INVITATION_RESEND_THROTTLED (429)
Tööruumikutse tühistamineINVALID_EMAIL (422)
Laadija kohaliku kasutaja loomine olemasolevale kliendileLOCAL_USER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409)
Laadija kohaliku kasutaja kutseLOCAL_USER_ALREADY_EXISTS, INVITATION_EMAIL_IN_USE, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL (422); INVITATION_RESEND_THROTTLED (429), kui saatmise ooteaeg kehtib
Kohaliku kasutaja kutse tühistamineINVALID_EMAIL (422)
Kohaliku kasutaja uuendamine/kustutamineTAGLESS_USER_PROTECTED (409)

Kõik omandi ja puuduva ressursi tulemused neis rühmades, ka registreerimata e-post POST /users puhul, kasutavad ühist 404 RESOURCE_NOT_FOUND sisu.

Sisuta ja kordusvastused

Edukal 204 vastusel pole sisu. See kehtib iga dokumenteeritud kustutamise kohta, kus on 204 empty. Lõpetatud idempotentne kordus määrab Idempotency-Replayed: true ja kasutab salvestatud olekut/sisu; 204 puhul jääb HTTP vastus sisuta. API ei tagasta kunagi JSON-eduobjekti dokumenteeritud 204 toimingule.