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:
validationErrorsmuutubdetails.fields-ks jacodeVALIDATION_FAILED-ks ka siis, kui vaikimisi sisul oli domeenikood.- Vaikimisi ülataseme
codesäilib, kui valideerimisvälju pole. - Muud ülataseme omadused peale
error,message,validationErrorsjacodeliiguvaddetailsalla; näiteks aruandeekspordilimitmuutub väärtuseksdetails.limit. - Ülataseme string
errormuutub väärtuseksmessage. Selle puudumisel kasutatakse oleku varuväärtust. - Varukoodid on
AUTH_REQUIRED(401),PERMISSION_DENIED(403),RESOURCE_NOT_FOUND(404),CONFLICT(409),VALIDATION_FAILED(422ja muud liigitamata4xx),RATE_LIMITED(429),EXTERNAL_PROVIDER_FAILED(502) jaINTERNAL_ERROR(muud5xx, sealhulgas503). requestIdon täpneX-Request-Idvastusepä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:
- tööruumi pääsutõendi seadistus ja autentimine;
- hosti reeglistik ning pääsutõendi/tööruumi päringupiirangud;
- praeguste õiguste filtreerimine;
- iga muudatuse puhul idempotentsuse kontroll/hõive;
- 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.
| Olek | Millal | Täpne sisu | Asjakohased päised |
|---|---|---|---|
401 | Puuduv, 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 |
404 | Pääsutõend kehtib, kuid selle tööruumi hostil puudub adminApiEnabled | { "error": "Not Found" } | Cache-Control: no-store |
429 | Pääsutõendi või tööruumi päringukvoot on ammendatud | { "error": "Too many attempts. Please try again later." } | Retry-After: <seconds> |
503 | Tööruumi pääsutõendi autentimine pole ajutiselt saadaval | { "error": "Admin API workspace-token configuration is unavailable", "code": "WORKSPACE_API_CONFIG_UNAVAILABLE" } | — |
503 | Hosti 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
| Kohaldub | Olek | Täpne sisu | Päised/märkused |
|---|---|---|---|
| Iga marsruut pärast autentimist | 403 | { "error": "Insufficient workspace-token scope", "code": "INSUFFICIENT_SCOPE" } | Tagastatakse, kui puudub mõni nõutav pääsuulatus. |
| Iga muudatus | 400 | { "error": "Idempotency-Key is required for this operation", "code": "IDEMPOTENCY_KEY_REQUIRED" } | Võtit pole antud. |
| Iga muudatus | 400 | { "error": "Exactly one Idempotency-Key is required", "code": "INVALID_IDEMPOTENCY_KEY" } | Korduv või komaga ühendatud päis. |
| Iga muudatus | 400 | { "error": "Idempotency-Key must contain 1 to 255 visible characters", "code": "INVALID_IDEMPOTENCY_KEY" } | Tühi, liiga pikk või sisaldab juhtmärki. |
| Iga muudatus | 409 | { "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 muudatus | 409 | { "error": "Request is already processing", "code": "IDEMPOTENT_REQUEST_PROCESSING" } | Retry-After: 5. |
| Iga muudatus | 409 | { "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 muudatus | 503 | { "error": "Idempotency storage unavailable", "code": "IDEMPOTENCY_UNAVAILABLE" } | API ei saa idempotentsuskirjet kontrollida ega salvestada. |
| Mis tahes vigase päringu-/sisu-/teeskeemiga endpoint | 422 | { "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 ID | 404 | { "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" } | Kasutatakse järjepidevalt, kui allolev tabel ei ütle teisiti. |
| Mis tahes ootamatu tõrkega endpoint | 500 | { "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
| Endpointid | Olek | Täpne sisu |
|---|---|---|
| Asukoha loomine/uuendamine; tööruumi väljade valideerimine | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
DELETE /v2/admin/sites/:siteId, kui asukohal on sõltuvusi | 409 | { "error": "<message>", "code": "SITE_NOT_EMPTY" } |
GET /v2/admin/sites/geocode vigane normaliseeritud otsing | 400 | { "error": "<message>", "code": "INVALID_GEOCODE_QUERY" } |
| Sama, teenusepakkuja piiratud järjekord on täis | 429 | { "error": "<message>", "code": "GEOCODING_BUSY" }; sisaldab Retry-After, kui geokodeerija selle annab |
| Sama, teenusepakkuja ajalõpp/tõrge või geokodeerija ootamatu viga | 502 | { "error": "<message>", "code": "GEOCODING_UNAVAILABLE" }; ootamatu viga kasutab Address search is temporarily unavailable |
PUT /v2/admin/sites/:siteId/power-management vigane topoloogia/domeeniseadistus | 422 | { "error": "<message>", "code": "INVALID_POWER_MANAGEMENT_CONFIGURATION" } |
| Sama, OCPP keeldumine/ajalõpp, võidujooks või kooskõlastuskonflikt | 409 | { "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.
| Endpointid | Olek | Täpne sisu |
|---|---|---|
| Mis tahes ülaltoodud toiming domeeni valideerimisveaga | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Mis tahes ülaltoodud toiming oleku, unikaalsuse, võrguühenduse/OCPP, arvelduse, Taglessi, pistiku või valmiduse konfliktiga | 409 | { "error": "<message>", "code": "CHARGER_CONFLICT" } |
GET /chargers/:chargerId/sessions, vigane vaikimisi/selgesõnaline ajavahemik | 422 | { "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
| Endpointid | Olek | Täpne sisu |
|---|---|---|
Andmete/ekspordi vahemik, kus from >= to | 422 | { "validationErrors": { "range": ["from must be earlier than to"] } } |
| Andmete/ekspordi vahemik üle 90 päeva | 422 | { "validationErrors": { "range": ["Report ranges cannot exceed 90 days"] } } |
| Andmete/mõõtmiste vigane läbipaistmatu kursor | 422 | { "validationErrors": { "cursor": ["<message>"] } } |
GET /reports/export, tulemus ületab 2000 rida | 422 | { "error": "<message>", "code": "REPORT_EXPORT_ROW_LIMIT", "limit": 2000 } |
POST /reports/send, salvestatud ajakava puudub | 409 | { "error": "A workspace report schedule must be saved before sending", "code": "REPORT_SCHEDULE_REQUIRED" } |
| Sama, meiliteenus keeldub/nurjub | 502 | { "error": "Report delivery failed", "code": "REPORT_DELIVERY_FAILED" } |
| Omatav ajakava-/mõõtmisressurss puudub | 404 | ühine RESOURCE_NOT_FOUND sisu |
Edukas eksport on kahendvormingus; kõik ekspordivead jäävad JSON-iks.
Tariifivead
| Endpointid | Olek | Täpne sisu |
|---|---|---|
| Loomise/uuendamise/komponentide/turuhinna/määramise domeenivalideerimine | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Tariifi kustutamise või määramise oleku/sõltuvuse/unikaalsuse konflikt | 409 | { "error": "<message>", "code": "TARIFF_CONFLICT" } |
| Tariif, hinnapiirkond, laadija, pistik, tariifimäärang või muu pesastatud ressurss ei kuulu omanikule | 404 | ühine RESOURCE_NOT_FOUND sisu |
Laadimisprofiilide vead
| Endpointid | Olek | Täpne sisu |
|---|---|---|
| Loomise/uuendamise/ajakava/määramise domeenivalideerimine | 422 | { "validationErrors": { "<field>": ["<message>"] } } |
| Profiilile viitab kaitstud kasutus | 409 | { "error": "<message>", "code": "CHARGING_PROFILE_IN_USE" } |
| OCPP sünkroonimise, määramise, samaaegsuse või muu profiili konflikt | 409 | { "error": "<message>", "code": "CHARGING_PROFILE_CONFLICT" } |
| Profiil, laadija, pistik, määrang või muu pesastatud ressurss ei kuulu omanikule | 404 | ü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.
| Olek | Koodid | Sisu |
|---|---|---|
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" }; sisaldab 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 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ühm | Muud kui 404 kasutajadomeeni koodid lisaks ühistele vastustele |
|---|---|
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) |
| Kasutaja andmete, sõidukite, RFID/juurdepääsu/piirangute lugemine | pole muud domeenikoodi kui 404 |
| RFID loomine | CUSTOMER_CONTRACT_MISSING, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_RFID (422) |
| RFID uuendamine/kustutamine | TAGLESS_USER_PROTECTED (409) |
| Juurdepääsu asendamine | TAGLESS_USER_PROTECTED (409); NO_CHARGERS_AVAILABLE (422) |
| Juurdepääsu tühistamine | TAGLESS_USER_PROTECTED (409) |
| Piirangu loomine/uuendamine | TAGLESS_USER_PROTECTED, LIMIT_ALREADY_EXISTS (409); INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE (422) |
| Piirangu kustutamine | TAGLESS_USER_PROTECTED (409) |
| Tööruumikutse loomine | CUSTOMER_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 saatmine | INVALID_EMAIL (422), INVITATION_RESEND_THROTTLED (429) |
| Tööruumikutse tühistamine | INVALID_EMAIL (422) |
| Laadija kohaliku kasutaja loomine olemasolevale kliendile | LOCAL_USER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409) |
| Laadija kohaliku kasutaja kutse | LOCAL_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ühistamine | INVALID_EMAIL (422) |
| Kohaliku kasutaja uuendamine/kustutamine | TAGLESS_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.