BoxLatviaIzstrādātājiem
Pieprasīt piekļuvi
Pamācības

Kļūdas

Kļūdas tiek atgrieztas standarta problem details formātā ar satura tipu application/problem+json. Vispirms pārbaudiet HTTP statusu; lietojiet type, lai atšķirtu cēloņus.

Piezīme
Paskaidrojošie teksti kļūdu atbildēs (detail, message) ir angļu valodā un var tikt pārfrāzēti. Balstiet savu kodu uz status un type, nevis uz teksta.

#Formāts

Validācijas kļūda

Validācija ziņo par visām problēmām uzreiz, lai jūs varētu tās labot vienā reizē.

curl -X POST "$API/v1/locations" \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "",
  "latitude": 95,
  "longitude": 24.0536
}'
422 Unprocessable Content
{
  "type": "https://api.boxlatvia.lv/problems/validation-failed",
  "title": "Validation failed",
  "status": 422,
  "detail": "One or more fields are invalid.",
  "request_id": "5f22a099-b84d-48eb-b078-6c5423a2175e",
  "errors": [
    {
      "field": "name",
      "message": "must not be empty"
    },
    {
      "field": "latitude",
      "message": "Number must be less than or equal to 90"
    }
  ]
}
LauksNozīme
typeStabils problēmas veida identifikators (skatiet tabulu zemāk). Salīdziniet pēc tā, nevis pēc teksta.
title, detailĪss, cilvēkam lasāms skaidrojums. Formulējums laika gaitā var uzlaboties.
statusHTTP statuss, atkārtots.
request_idŠī pieprasījuma unikāls identifikators, arī galvenē X-Request-Id. Norādiet to, sazinoties ar atbalstu.
errorsTikai 422: saraksts ar { field, message }, viens katrai problēmai.

#Problēmu veidi

Katrs type sākas ar https://api.boxlatvia.lv/problems/. Tie ir identifikatori, nevis tīmekļa lapas.

VeidsStatussNozīme
bad-request400Saturs nav derīgs JSON, vai parametrs, piemēram, cursor, nav nolasāms.
unauthorized401Trūkstoši, nepareizi, beigušies vai atsaukti piekļuves dati, vai beidzies tokens.
forbidden403IP adrese šiem piekļuves datiem nav atļauta, vai darbība piegādātājiem nav pieejama.
insufficient-scope403Piekļuves datiem trūkst izsaukumam vajadzīgo tiesību; required_scope tās nosauc.
not-found404Jums nav šāda objekta. Citu piegādātāju objekti izskatās tieši tāpat.
conflict / duplicate-external-id409external_id ir aizņemts (existing_id nosauc otru objektu).
location-has-boxes409Lokācijā vēl ir telpas.
box-has-orders409Telpai ir pasūtījumi, un to nevar dzēst.
box-already-published409Publicētu telpu nevar iesniegt; vispirms atsauciet to.
image-limit409Vairāk nekā 20 attēli; limit un existing norāda skaitļus.
request-in-progress409Jūsu iepriekšējais izsaukums ar to pašu Idempotency-Key vēl darbojas.
precondition-failed412If-Match ir novecojis: nolasiet objektu vēlreiz.
payload-too-large413Pieprasījums ir lielāks par 27 MB.
unsupported-media-type415Attēli jāsūta kā multipart/form-data.
validation-failed422Kāda vērtība ir nederīga; errors uzskaita visas problēmas.
box-incomplete422Telpu vēl nevar iesniegt; missing uzskaita, kas tai vajadzīgs.
idempotency-key-reused422Šī Idempotency-Key jau tika izmantota citam pieprasījumam.
precondition-required428Trūkst If-Match.
too-many-requests429Pārāk daudz neveiksmīgu autentifikāciju no jūsu adreses; uzgaidiet Retry-After sekundes.
internal-error / timeout / storage-unavailable500Kaut kas nogāja greizi mūsu pusē (timeout ir 503, storage-unavailable ir 502). Mēģiniet atkārtoti ar to pašu Idempotency-Key.

#Piemēri

Nepareizi vai trūkstoši piekļuves dati
curl "$API/v1/me"
401 UnauthorizedWww-Authenticate: Basic realm="BoxLatvia Supplier API", Bearer realm="BoxLatvia Supplier API"
{
  "type": "https://api.boxlatvia.lv/problems/unauthorized",
  "title": "Authentication required",
  "status": 401,
  "detail": "Send HTTP Basic credentials or a Bearer token.",
  "request_id": "3f502d49-40f5-43e8-8004-dc4bb2f28a99"
}
Objekts nav atrasts
curl "$API/v1/boxes/e8e189c3-3ac4-47d0-8ff1-584221c4e1ae" \
  -u "$CLIENT_ID:$CLIENT_SECRET"
404 Not Found
{
  "type": "https://api.boxlatvia.lv/problems/not-found",
  "title": "Not found",
  "status": 404,
  "detail": "No such box.",
  "request_id": "734e0d86-9a60-4107-9997-c9f0bcf77610"
}
Telpa, kas vēl nav gatava
curl -X POST "$API/v1/boxes/9d7f53d3-a9cd-4ee1-b9cf-470a572f8b4e/submit" \
  -u "$CLIENT_ID:$CLIENT_SECRET"
422 Unprocessable Content
{
  "type": "https://api.boxlatvia.lv/problems/box-incomplete",
  "title": "Box is incomplete",
  "status": 422,
  "detail": "Fill in description, price, price_unit, size, features before submitting this box for review.",
  "request_id": "f48c9ebd-fa4f-4b14-be21-b98154de2c1e",
  "missing": [
    "description",
    "price",
    "price_unit",
    "size",
    "features"
  ]
}
Noteikumi starp laukiem
curl -X POST "$API/v1/boxes" \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Box 2 m²",
  "location_id": "9d80d5f4-d17a-4f3e-99f6-4ab43b132bc3",
  "price": 10,
  "promotional_price": 12,
  "total_units": 5,
  "available_units": 8,
  "price_unit": "gadsimts",
  "features": [
    "sauna"
  ]
}'
422 Unprocessable Content
{
  "type": "https://api.boxlatvia.lv/problems/validation-failed",
  "title": "Validation failed",
  "status": 422,
  "detail": "One or more fields are invalid.",
  "request_id": "ce26822d-d546-4254-a374-08549ad6e04b",
  "errors": [
    {
      "field": "price_unit",
      "message": "is not a known price unit code"
    },
    {
      "field": "features",
      "message": "unknown or inactive feature code(s): sauna"
    },
    {
      "field": "promotional_price",
      "message": "must be lower than price"
    },
    {
      "field": "available_units",
      "message": "cannot be greater than total_units"
    }
  ]
}

#OAuth kļūdas

Token galapunkts tā vietā seko OAuth 2.0 standartam: JSON saturs ar error un error_description.

Nepareizi client piekļuves dati
curl -X POST "$API/v1/oauth/token" \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -d grant_type=client_credentials
401 Unauthorized
{
  "error": "invalid_client",
  "error_description": "Invalid client credentials."
}
Piezīme
Uztveriet 5xx un gaidīšanas laika beigas kā pagaidu problēmas: mēģiniet atkārtoti ar to pašu Idempotency-Key un pieaugošām pauzēm. Neatkārtojiet citas 4xx kļūdas, nemainot pieprasījumu (izņemot 412 pēc atkārtotas nolasīšanas un 429 pēc gaidīšanas).