API-virheet: selkeät toimet ilman salaisuuksia

Tiivistelmä

Virhevastaus auttaa korjaamaan syötteen, tunnistautumaan, pyytämään oikeuksia tai odottamaan. Julkinen viesti ja sisäinen diagnoosi tarvitsevat eri tarkkuuden.

Tyhjä suojattu palvelin- ja verkkokäytävä
Tässä artikkelissa

Erota tila, tyyppi ja esiintymä

RFC 9457 määrittelee application/problem+json-muodon. Käytä vakaata ongelmatyyppiä ja ymmärrettävää kuvausta; asiakkaan ei tulisi päätellä toimintaa käännetystä tekstistä. Mahdollisen status-kentän tulee vastata lähetettyä HTTP-tilaa.

TilaHTTP-merkitysMahdollinen käsittely
400Virheellinen pyyntöKorjaa ennen uusintaa.
401Kelvolliset tunnistetiedot puuttuvatTarkista tunnisteet ja sovittu menettely.
403Ymmärretty mutta evätty pyyntöTarkista oikeudet; uusinta ei anna niitä.
503Palvelu tilapäisesti poissaRajattu odotus ja turvallinen uusinta.

Tee virhepoluista ennakoitavat

  • Dokumentoi koodit, muodot ja käsittely. Testaa myös tyhjät vastaukset, yhdyskäytävän muu kuin JSON, yhteyskatkot ja aikakatkaisut.
  • Tarkista syötteet ja oikeudet palvelimella. Käsittele odotetut virheet peittämättä tuntemattomia vikoja; älä naamioi epäonnistumista onnistumiseksi.
  • Palauta tuelle sopiva korrelaatiotunniste. Pidä pinolistaukset, sisäiset kyselyt, salasanat ja tokenit poissa julkisista vastauksista.

Uusi vain perustellusti

5xx ei salli rajattomia yrityksiä. Yhdistä sopimus, tila, idempotenssi ja aikaraja. Ilmoita viasta pienellä puhdistetulla toistotapauksella; testaa korjauksen jälkeen myös läheiset käyttöoikeuskiellot.

Alkuperäiset lähteet

API-virheiden tulisi ohjata toimintaa ilman vuotoja.

HTTP-tila antaa alkukategorian, mutta asiakas saattaa tarvita vakaan tyypin ja hyödyllisiä tietoja. RFC 9457 kuvaa yleisen ongelmarakenteen; se ei oikeuta sisäisten jälkien tai arkaluonteisten tietojen paljastamista.

  • Erota pysyvä kieltäytyminen, korjattavissa oleva syöte ja tilapäinen epäonnistuminen.
  • Asiakirjan tyyppi, tila ja mahdolliset asiakkaan toimet kunkin tärkeän virheen osalta.
  • Testaa, että vastaukset eivät sisällä salaisuuksia tai tarpeettomia täysiä hyötykuormia.

Ensisijainen lähde: IETF RFC 9457 — Problem Details for HTTP APIs. Aiheeseen liittyvä menetelmä: lue käytännön opas.

API-uusinnat: laske koko aikabudjetti

Määritä kutsuraja ja kokonaismääräaika.

Kuvitteellinen opetustapaus: luvut eivät kuvaa CIE:tä tai asiakkaita.

Kuvitteellinen malli: neljä enintään 250 ms:n kutsua ja odotukset 100, 200, 400 ms. Jitter, yhteys, jonot ja paikallinen tarkistus puuttuvat.

Yrityksiä yhteensä
41 + 3
Odotus yhteensä (ms)
700100 + 200 + 400
Mallin aikabudjetti (ms)
17004 × 250 + 700
Erittele kutsuketju
VaiheKutsun enimmäisaika (ms)Seuraava odotus (ms)
Yritys 1250100
Yritys 2250200
Yritys 3250400
Yritys 42500
Yhteensä1000700
Mallin ajat (ms)
  • Kutsuaika1 000
  • Odotusaika yhteensä700
  • Kokonaismääräaika (ms)1 500

Tarkistukset ennen johtopäätöstä

  1. 1 000 + 700 = 1 700 ms ylittää 1 500 ms:n määräajan.
  2. Välitä kokonaismääräaika ja estä kaksoisvaikutukset; timeout ei todista etäpään peruutusta.

Kokeile uusintojen aikabudjettia

n × T + W × (2^(n−1) − 1)

Aiheeseen liittyvä menetelmä: lue käytännön opas.

API-virheet: tyypit, tilat ja todisteet

Tämän kieliversion tarkemmat lähdekuvaukset ovat englanniksi.

Handle an error without parsing its sentence

An API client may receive a translated title, missing member or unfamiliar extension. Preserve decisions based on the documented type and HTTP status, then connect a safe action to the context.

  • Compare received status and JSON status without silently replacing either.
  • Test absent type, string status instead of a number, and an unknown extension.
  • Separate person-facing text, business code and occurrence reference.

Explore problem types and eight fictional responses →

IETF · M. Nottingham, E. Wilde, S. Dalal · RFC 9457 · July 2023 · obsoletes RFC 7807 · §3.1, §3.2, §4.2, §5