Válaszok és hibák

Adminisztrációs API válasz- és hibaszerződése

Ez a fájl egészíti ki a Végpontreferencia összes végpontjának válaszszerződését. A sikertörzset a végpont sorában, minden közös vagy végpontspecifikus sikertelen törzset az alábbi táblázatokban talál. A hibák alapértelmezetten több kompatibilitási formát használnak; a hívók egységes univerzális burkolót választhatnak.

Opcionális strukturált hibaburkoló

Bármely végponton elküldheti ezt a kérésfejlécet:

X-Error-Format: envelope

Az összehasonlítás a szélső szóközök nélkül, kis- és nagybetűk megkülönböztetése nélkül történik. Ennél a pontos értéknél minden 400 vagy magasabb állapotú JSON-válasz így alakul át:

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

Példa egy alapértelmezett érvényesítési törzs átalakítására:

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

Az átalakítási szabályok pontosak:

  • A(z) validationErrors értékből details.fields, a(z) code értékből VALIDATION_FAILED lesz akkor is, ha az alapértelmezett törzs tartománykódot is tartalmazott.
  • Érvényesítési mezők hiányában a rendszer megtartja az alapértelmezett legfelső szintű code értéket.
  • A(z) error, message, validationErrors és code kivételével minden más legfelső szintű tulajdonság a(z) details alá kerül; például a jelentésexport limit értékéből details.limit lesz.
  • A karakterlánc típusú legfelső szintű error értékből message lesz. Ha nincs ilyen, az állapothoz tartozó tartalékérték érvényesül.
  • A tartalékkódok: AUTH_REQUIRED (401), PERMISSION_DENIED (403), RESOURCE_NOT_FOUND (404), CONFLICT (409), VALIDATION_FAILED (422 és más besorolatlan 4xx), RATE_LIMITED (429), EXTERNAL_PROVIDER_FAILED (502) és INTERNAL_ERROR (más 5xx, beleértve a(z) 503 esetet).
  • A(z) requestId a pontos X-Request-Id válaszfejléc. A hívó által megadott kérésazonosítót csak akkor használja a rendszer, ha a szélső szóközök eltávolítása után megfelel a(z) [A-Za-z0-9._:-]{1,128} mintának; máskülönben a szerver UUID-t generál.

Az átalakítás nem módosítja az állapotot vagy a nem törzshöz tartozó fejléceket. Az idempotens újrajátszásokra is érvényes az újrajátszási kérés X-Error-Format fejléce szerint. A bináris sikerválaszok binárisak maradnak; JSON-hibáik burkolót kapnak. A további táblázatok az alapértelmezett törzseket mutatják; a fenti szabályok alkalmazásával megkapjuk minden sor másik lehetséges választörzsét.

Válaszjelölések

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

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

PlainError = { error: string }

A(z) error és az érvényesítési üzenet szövege leíró jellegű, nem stabil programozott megkülönböztető. Ha van code, az alapján ágaztasson el. A kérésérvényesítés 422 ValidationError választ ad; teljes objektum érvényesítése { "validationErrors": {} } értéket eredményezhet, ha nincs azonosított egyedi mező. Az érvénytelen JSON és váratlan hibák az alább látható globális 500 PlainError választ adják.

Minden JSON-példa pontos törzsszerkezetet mutat. A(z) <message> formában megadott szöveg a visszaadott érvényesítési vagy műveleti üzenet, és JSON-karakterlánc, nem szó szerinti, csúcsos zárójelbe tett érték.

Kérések feldolgozási sorrendje

A kérések feldolgozási sorrendje:

  1. munkaterület-tokenek beállítása és hitelesítése;
  2. gazdaházirend és token-/munkaterület-sebességkorlátok;
  3. aktuális csomagjogosultságok szűrése;
  4. minden módosításnál idempotencia-ellenőrzés/foglalás;
  5. végponthatókör-ellenőrzés, kérésérvényesítés és a kért művelet.

Ezért az érvényes, de elégtelen hatókörű tokennel küldött módosításhoz is kötelező a(z) Idempotency-Key. A befejezett 403, 404, 409 vagy 422 módosítás válasza ugyanahhoz a kulcshoz/kéréshez újrajátszható.

Hitelesítési, házirend- és sebességkorlátozási válaszok

Ezek a válaszok minden regisztrált /v2/admin végponton előfordulhatnak a végpontspecifikus feldolgozás előtt.

ÁllapotMikorPontos törzsKapcsolódó fejlécek
401Hiányzó, ismételt, vesszővel összekapcsolt, nem Bearer, hibás formátumú, ismeretlen, lejárt, visszavont vagy más okból érvénytelen munkaterület-token{ "error": "Unauthorized", "code": "INVALID_WORKSPACE_TOKEN" }WWW-Authenticate: Bearer, Cache-Control: no-store
404A token érvényes, de a munkaterület gazdáján nincs engedélyezve a(z) adminApiEnabled{ "error": "Not Found" }Cache-Control: no-store
429Kimerült a tokenenkénti vagy munkaterületenkénti kéréskeret{ "error": "Too many attempts. Please try again later." }Retry-After: <seconds>
503A munkaterület-token hitelesítése átmenetileg nem érhető el{ "error": "Admin API workspace-token configuration is unavailable", "code": "WORKSPACE_API_CONFIG_UNAVAILABLE" }—
503A gazdaházirend lekérése vagy az aktuális csomagjogosultság ellenőrzése sikertelen{ "error": "Workspace authorization is temporarily unavailable", "code": "WORKSPACE_AUTHORIZATION_UNAVAILABLE" }—

Az API-hozzáférés minden csomagban benne van. A munkaterület gazdájának adminApiEnabled beállítását kikapcsolva 404 a válasz; egy további funkciójogosultság elvesztése csak az érintett hatóköröket távolítja el. Az így keletkező hatókörmegtagadás az alábbi választ használja, nem tokenfrissítési folyamatot.

Hatókör-, idempotencia-, feldolgozási, tulajdonlási és váratlan hibák

Erre vonatkozikÁllapotPontos törzsFejlécek/megjegyzések
Minden útvonal hitelesítés után403{ "error": "Insufficient workspace-token scope", "code": "INSUFFICIENT_SCOPE" }Akkor érkezik, ha bármely szükséges hatókör hiányzik.
Minden módosítás400{ "error": "Idempotency-Key is required for this operation", "code": "IDEMPOTENCY_KEY_REQUIRED" }Nincs megadva kulcs.
Minden módosítás400{ "error": "Exactly one Idempotency-Key is required", "code": "INVALID_IDEMPOTENCY_KEY" }Ismételt vagy vesszővel összekapcsolt fejléc.
Minden módosítás400{ "error": "Idempotency-Key must contain 1 to 255 visible characters", "code": "INVALID_IDEMPOTENCY_KEY" }Üres, túl hosszú vagy vezérlőkaraktert tartalmaz.
Minden módosítás409{ "error": "Idempotency-Key was already used with a different request", "code": "IDEMPOTENCY_CONFLICT" }Azonos token/metódus/útvonal/kulcs, eltérő URL vagy törzs.
Minden módosítás409{ "error": "Request is already processing", "code": "IDEMPOTENT_REQUEST_PROCESSING" }Retry-After: 5.
Minden módosítás409{ "error": "Previous request outcome is unknown; verify its effects before attempting the operation again", "code": "IDEMPOTENCY_OUTCOME_UNKNOWN" }Az előző feldolgozási foglalás lejárt, a kapcsolat megszakadt, vagy a kérés 5xx eredménnyel fejeződött be.
Minden módosítás503{ "error": "Idempotency storage unavailable", "code": "IDEMPOTENCY_UNAVAILABLE" }Az API nem tudja ellenőrizni vagy menteni az idempotenciarekordot.
Bármely végpont érvénytelen lekérdezés-/törzs-/útvonalsémával422{ "validationErrors": { "<field>": ["<message>"] } }Több mező/üzenet is szerepelhet. A hívók nem adhatnak meg cpoId értéket; a munkaterület mindig a tokenből származik.
Bármely hiányzó beágyazott munkaterület-erőforrás vagy más munkaterülethez tartozó azonosító404{ "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" }Következetesen ezt használja a rendszer, hacsak az alábbi táblázat másként nem jelzi.
Bármely végpont váratlan hibával500{ "error": "Something went wrong" }Módosításoknál ugyanazon kulcs későbbi újrapróbálása 409 IDEMPOTENCY_OUTCOME_UNKNOWN választ ad.

Az erőforrásútvonal-azonosítóknak pozitív számoknak kell lenniük. A nem pozitív vagy nem numerikus :siteId, :chargerId, :portId, :tariffId, :profileId, :assignmentId, :userId, :rfidId, :accessId, :limitId vagy :localUserId érték 422 ValidationError választ ad, nem 400 választ.

Helyszín- és teljesítménykezelési hibák

VégpontokÁllapotPontos törzs
Helyszín létrehozása/frissítése; munkaterületmező-érvényesítés422{ "validationErrors": { "<field>": ["<message>"] } }
DELETE /v2/admin/sites/:siteId, ha a helyszínnek függőségei vannak409{ "error": "<message>", "code": "SITE_NOT_EMPTY" }
GET /v2/admin/sites/geocode érvénytelen normalizált keresés400{ "error": "<message>", "code": "INVALID_GEOCODE_QUERY" }
Ugyanez, a szolgáltató korlátozott várólistája megtelt429{ "error": "<message>", "code": "GEOCODING_BUSY" }; tartalmazza a(z) Retry-After értéket, ha a geokódoló megadja
Ugyanez, szolgáltatói időtúllépés/hiba vagy váratlan geokódolóhiba502{ "error": "<message>", "code": "GEOCODING_UNAVAILABLE" }; váratlan hiba esetén Address search is temporarily unavailable
PUT /v2/admin/sites/:siteId/power-management érvénytelen topológiai/tartománykonfiguráció422{ "error": "<message>", "code": "INVALID_POWER_MANAGEMENT_CONFIGURATION" }
Ugyanez, OCPP-elutasítás/időtúllépés, versenyhelyzet vagy egyeztetési ütközés409{ "error": "<message>", "code": "POWER_MANAGEMENT_CONFLICT" }

Töltőhibák

A(z) mapChargerErrors() a töltő létrehozásához/frissítéséhez, hitelesítő adataihoz, csatlakozóbeállításaihoz, nyilvános listázásához, QR-tartalom feloldásához, konfigurációmódosításhoz/újratöltéshez, firmware-indításhoz, mind a négy alapvető parancshoz és az összesített ütemezés kéréséhez használatos.

VégpontokÁllapotPontos törzs
Bármely fenti művelet tartományérvényesítési hibával422{ "validationErrors": { "<field>": ["<message>"] } }
Bármely fenti művelet állapot-, egyediség-, offline/OCPP-, számlázási, Tagless-, csatlakozó- vagy készenléti ütközéssel409{ "error": "<message>", "code": "CHARGER_CONFLICT" }
GET /chargers/:chargerId/sessions, érvénytelen alapértelmezett/kifejezett időtartomány422{ "validationErrors": { "from": ["from must be before or equal to to"] } } vagy { "validationErrors": { "from": ["Session range cannot exceed 90 days"] } }

Az egyszerű olvasási műveletek csak a közös 401/403/404/429/500/503 válaszokat és a(z) 422 lekérdezés-/útvonalérvényesítést adják. A töltőtörlés a közös 500 PlainError választ adhatja, ha konkrétabb hibaválasz nélkül sikertelen.

Jelentéshibák

VégpontokÁllapotPontos törzs
Adat-/exporttartomány, ahol from >= to422{ "validationErrors": { "range": ["from must be earlier than to"] } }
90 napnál hosszabb adat-/exporttartomány422{ "validationErrors": { "range": ["Report ranges cannot exceed 90 days"] } }
Érvénytelen átlátszatlan adat-/mérési kurzor422{ "validationErrors": { "cursor": ["<message>"] } }
GET /reports/export, az eredmény több mint 2 000 sor422{ "error": "<message>", "code": "REPORT_EXPORT_ROW_LIMIT", "limit": 2000 }
POST /reports/send, nincs mentett ütemezés409{ "error": "A workspace report schedule must be saved before sending", "code": "REPORT_SCHEDULE_REQUIRED" }
Ugyanez, a levélküldő elutasít vagy hibázik502{ "error": "Report delivery failed", "code": "REPORT_DELIVERY_FAILED" }
Hiányzó, tulajdonban lévő ütemezési/mérési erőforrás404közös RESOURCE_NOT_FOUND törzs

A sikeres export bináris; minden exporthiba JSON marad.

Tarifahibák

VégpontokÁllapotPontos törzs
Létrehozás/frissítés/összetevők/piaci ár/hozzárendelés tartományérvényesítése422{ "validationErrors": { "<field>": ["<message>"] } }
Tarifatörlési vagy hozzárendelési állapot-/függőségi/egyediségütközés409{ "error": "<message>", "code": "TARIFF_CONFLICT" }
Tarifa, ajánlattételi zóna, töltő, csatlakozó, tarifahozzárendelés vagy más beágyazott erőforrás tulajdonlási hiánya404közös RESOURCE_NOT_FOUND törzs

Töltésiprofil-hibák

VégpontokÁllapotPontos törzs
Létrehozás/frissítés/ütemezés/hozzárendelés tartományérvényesítése422{ "validationErrors": { "<field>": ["<message>"] } }
A profilra védett használat hivatkozik409{ "error": "<message>", "code": "CHARGING_PROFILE_IN_USE" }
OCPP-szinkronizálási, hozzárendelési, párhuzamossági vagy egyéb profilütközés409{ "error": "<message>", "code": "CHARGING_PROFILE_CONFLICT" }
Profil, töltő, csatlakozó, hozzárendelés vagy más beágyazott erőforrás tulajdonlási hiánya404közös RESOURCE_NOT_FOUND törzs

Felhasználói tartományhibák

A mezőt azonosító felhasználóérvényesítési hibák ValidationError és code értéket használnak; más felhasználói hibák CodedError típust használnak. Minden hiányzóerőforrás-eset a közös, felderítést megakadályozó RESOURCE_NOT_FOUND választ használja.

ÁllapotKód(ok)Törzs
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" }; tartalmazza: 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" }

A(z) POST /users/invitations a törzs feldolgozása után a közös 403 INSUFFICIENT_SCOPE választ is adhatja, ha a(z) users:access hiányzik, vagy ha RFID-t adtak meg, és a(z) users:rfid hiányzik. A helyifelhasználó-végpontok minden szükséges hatókört felsorolnak a Végpontreferenciában.

A felhasználói hibakódok alkalmazása:

VégpontcsaládNem 404-es felhasználói tartománykódok a közös válaszokon felül
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)
Felhasználói részletek, járművek, RFID-/hozzáférés-/korlátolvasásoknincs nem 404-es tartománykód
RFID létrehozásaCUSTOMER_CONTRACT_MISSING, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_RFID (422)
RFID frissítése/törléseTAGLESS_USER_PROTECTED (409)
Hozzáférés cseréjeTAGLESS_USER_PROTECTED (409); NO_CHARGERS_AVAILABLE (422)
Hozzáférés visszavonásaTAGLESS_USER_PROTECTED (409)
Korlát létrehozása/frissítéseTAGLESS_USER_PROTECTED, LIMIT_ALREADY_EXISTS (409); INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE (422)
Korlát törléseTAGLESS_USER_PROTECTED (409)
Munkaterületi meghívás létrehozásaCUSTOMER_CONTRACT_MISSING, INVITATION_EMAIL_IN_USE, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL/INVALID_RFID (422); INVITATION_RESEND_THROTTLED (429), ha kézbesítési várakozási idő érvényes
Munkaterületi meghívás újraküldéseINVALID_EMAIL (422), INVITATION_RESEND_THROTTLED (429)
Munkaterületi meghívás visszavonásaINVALID_EMAIL (422)
Töltő helyi felhasználójának létrehozása meglévő ügyfélhezLOCAL_USER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409)
Töltő helyi felhasználójának meghívásaLOCAL_USER_ALREADY_EXISTS, INVITATION_EMAIL_IN_USE, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL (422); INVITATION_RESEND_THROTTLED (429), ha kézbesítési várakozási idő érvényes
Helyi felhasználó meghívásának visszavonásaINVALID_EMAIL (422)
Helyi felhasználó frissítése/törléseTAGLESS_USER_PROTECTED (409)

Az ezekben a csoportokban előforduló minden tulajdonlási és hiányzóerőforrás-eredmény, beleértve a(z) POST /users végponton a nem regisztrált e-mail-címet is, a közös 404 RESOURCE_NOT_FOUND törzset használja.

Törzs nélküli és újrajátszott válaszok

A sikeres 204 válasz nem tartalmaz törzset. Ez minden olyan dokumentált törlésre érvényes, amely 204 empty választ sorol fel. A befejezett idempotens újrajátszás beállítja a(z) Idempotency-Replayed: true értéket, és a tárolt állapotot/törzset használja; 204 esetén a HTTP-válasz törzs nélküli marad. Az API soha nem ad JSON-sikerobjektumot dokumentált 204 művelethez.