02 mrt 2025·8 min leestijd

Database-constraintfouten in de UX: verander fouten in duidelijke meldingen

Leer hoe database-constraintfouten in de UX kunnen worden omgezet in nuttige veldmeldingen door unieke, foreign key- en NOT NULL-fouten in je app te mappen.

Database-constraintfouten in de UX: verander fouten in duidelijke meldingen

Waarom constraintfouten zo vervelend aanvoelen voor gebruikers

Als iemand op Opslaan tikt, verwacht diegene één van twee dingen: het is gelukt, of ze kunnen snel oplossen wat niet klopte. Te vaak krijgen ze een algemene banner zoals “Request failed” of “Er is iets misgegaan.” Het formulier blijft hetzelfde, niets wordt gehighlight, en ze blijven raden.

Dat gat is waarom de UX van database-constraintfouten ertoe doet. De database handhaaft regels die de gebruiker nooit gezien heeft: “deze waarde moet uniek zijn”, “dit record moet naar een bestaand item verwijzen”, “dit veld mag niet leeg zijn.” Als de app die regels verbergt achter een vage foutmelding, voelt de gebruiker zich beschuldigd van iets dat hij niet begrijpt.

Generieke fouten ondermijnen ook vertrouwen. Mensen gaan ervan uit dat de app instabiel is, dus ze proberen het opnieuw, verversen of haken af. Op de werkvloer sturen ze support met screenshots die niet helpen, omdat de screenshot geen bruikbare details bevat.

Een veelvoorkomend voorbeeld: iemand maakt een klantrecord aan en krijgt “Save failed.” Ze proberen opnieuw met hetzelfde e-mailadres. Het faalt weer. Nu gaan ze zich afvragen of het systeem data dupliceert, data kwijtraakt, of allebei.

De database is vaak de uiteindelijke bron van waarheid, zelfs als je in de UI valideert. Hij ziet de meest recente staat, inclusief wijzigingen van andere gebruikers, achtergrondtaken en integraties. Constraintfouten zullen dus gebeuren, en dat is normaal.

Een goed resultaat is simpel: zet een databaseregel om in een melding die verwijst naar een specifiek veld en een volgende stap. Bijvoorbeeld:

  • “E-mail wordt al gebruikt. Probeer een ander e-mailadres of log in.”
  • “Kies een geldig account. Het geselecteerde account bestaat niet meer.”
  • “Telefoonnummer is verplicht.”

De rest van dit artikel gaat over die vertaling, zodat fouten veranderen in snel herstel, of je nu de stack handmatig bouwt of werkt met een tool zoals AppMaster.

De constrainttypes die je tegenkomt (en wat ze betekenen)

De meeste “request failed”-momenten komen van een kleine set databaseregels. Als je de regel kunt benoemen, kun je die meestal omzetten in een duidelijke melding bij het juiste veld.

Hier zijn de veelvoorkomende constrainttypes in gewone taal:

  • Unique constraint: Een waarde moet uniek zijn. Typische voorbeelden zijn email, gebruikersnaam, factuurnummer of een externe ID. Als dit faalt, heeft de gebruiker niet ‘iets fout gedaan’, maar botste hij met bestaande data.
  • Foreign key constraint: Het ene record verwijst naar een ander record dat moet bestaan (zoals order.customer_id). Het faalt wanneer het verwezen object verwijderd is, nooit bestond of de UI de verkeerde ID stuurde.
  • NOT NULL constraint: Een verplicht veld ontbreekt op databaseniveau. Dit kan gebeuren hoewel het formulier volledig lijkt (bijvoorbeeld omdat de UI een veld niet heeft meegestuurd, of de API het overschreef).
  • Check constraint: Een waarde valt buiten een toegestane regel, zoals “aantal moet \u003e 0”, “status moet één van deze waarden zijn” of “korting moet tussen 0 en 100 liggen.”

Het lastige is dat hetzelfde echte probleem er anders uit kan zien afhankelijk van je database en tooling. Postgres kan de constraint een bruikbare naam geven, terwijl een ORM het kan verpakken in een generieke uitzondering. Zelfs dezelfde unique constraint kan verschijnen als “duplicate key”, “unique violation” of een vendor-specifieke foutcode.

Een praktisch voorbeeld: iemand bewerkt een klant in een admin-panel, drukt op Opslaan en krijgt een fout. Als de API aan de UI kan vertellen dat het een unique constraint op email was, kun je onder het Email-veld laten zien: “Dit e-mailadres is al in gebruik” in plaats van een vage toast.

Behandel elk constrainttype als een hint over wat de persoon nu kan doen: kies een andere waarde, kies een bestaand gerelateerd record, of vul het ontbrekende verplichte veld in.

Wat een goede veldmelding moet doen

Een database-constraintfout is een technisch voorval, maar de ervaring moet als normale begeleiding aanvoelen. Goede UX voor database-fouten verandert “er ging iets mis” in “dit moet u aanpassen”, zonder de gebruiker te laten raden.

Gebruik gewone taal. Vervang databasewoorden zoals “unique index” of “foreign key” door iets wat een mens zou zeggen. “Dat e-mailadres wordt al gebruikt” is veel nuttiger dan “duplicate key value violates unique constraint.”

Zet de melding waar de actie is. Als de fout duidelijk bij één invoer hoort, koppel het dan aan dat veld zodat de gebruiker het meteen kan oplossen. Als het over de hele actie gaat (zoals “je kunt dit niet verwijderen omdat het elders gebruikt wordt”), toon het dan op formulierniveau met een duidelijke volgende stap.

Specifiek is beter dan beleefd. Een handige melding beantwoordt twee vragen: wat moet er veranderd worden en waarom werd het afgewezen. “Kies een andere gebruikersnaam” is beter dan “Ongeldige gebruikersnaam.” “Selecteer een klant voordat je opslaat” is beter dan “Ontbrekende gegevens.”

Wees voorzichtig met gevoelige details. Soms lekt de meest “nuttige” melding informatie. Op een inlog- of wachtwoord-resetscherm kan “Er bestaat geen account voor dit e-mailadres” attackers helpen. Gebruik in zulke gevallen veiliger formuleringen zoals “Als er een account bij dit e-mailadres hoort, ontvang je binnenkort een bericht.”

Plan ook voor meer dan één probleem tegelijk. Eén Opslaan kan op meerdere constraints falen. Je UI moet meerdere veldmeldingen tegelijk kunnen tonen zonder het scherm te overladen.

Een sterke veldmelding gebruikt eenvoudige woorden, wijst naar het juiste veld (of is duidelijk formulierniveau), vertelt wat te veranderen, vermijdt het lekken van privéfeiten over accounts of records en ondersteunt meerdere fouten in één antwoord.

Ontwerp een foutcontract tussen API en UI

Goede UX begint met een afspraak: wanneer iets faalt, vertelt de API de UI precies wat er gebeurde, en de UI toont het elke keer op dezelfde manier. Zonder dat contract eindig je weer bij een generieke toast die niemand helpt.

Een praktisch foutformaat is klein maar specifiek. Het moet een stabiele foutcode bevatten, het veld (als het aan één invoer te koppelen is), een menselijke melding en optionele details voor logging.

{
  "error": {
    "code": "UNIQUE_VIOLATION",
    "field": "email",
    "message": "That email is already in use.",
    "details": {
      "constraint": "users_email_key",
      "table": "users"
    }
  }
}

De sleutel is stabiliteit. Blootstelling van ruwe databasetekst aan gebruikers is geen goed idee, en laat de UI niet Postgres-foutstrings parsen. Codes moeten consistent zijn tussen platforms (web, iOS, Android) en tussen endpoints.

Bepaal van tevoren hoe je veldfouten tegenover formulierfouten representeert. Een veldfout betekent dat één invoer geblokkeerd is (zet field, toon de boodschap onder de invoer). Een formulierfout betekent dat de actie niet voltooid kan worden hoewel de velden correct lijken (laat field leeg, toon de melding bij de Opslaan-knop). Als meerdere velden tegelijk kunnen falen, retourneer dan een array van fouten, elk met zijn eigen field en code.

Om rendering consistent te houden, maak je UI-regels saai en voorspelbaar: toon eerst een korte samenvatting bovenaan en inline naast het veld, houd meldingen kort en actiegericht, hergebruik dezelfde bewoording over flows heen (aanmelden, profiel bewerken, admin-schermen) en log details terwijl je alleen message toont.

Als je met AppMaster bouwt, behandel dit contract als elk ander API-output. Je backend kan de gestructureerde vorm retourneren en je gegenereerde web (Vue3) en mobiele apps kunnen het met één gedeeld patroon weergeven, zodat elke constraintfout voelt als begeleiding, niet als een crash.

Stap voor stap: zet DB-fouten om in veldmeldingen

Bouw betere admin-formulieren
Ship interne tools met betrouwbaar opslaan-gedrag dat gebruikers naar het juiste veld begeleidt.
Maak app

Goede UX bij database-constraintfouten begint met de database als uiteindelijke rechter te behandelen, niet als de eerste feedbacklijn. Gebruikers mogen nooit ruwe SQL-tekst, stacktraces of vage “request failed” zien. Ze moeten weten welk veld aandacht nodig heeft en wat de volgende stap is.

Een praktische flow die in de meeste stacks werkt:

  1. Bepaal waar de fout wordt opgevangen. Kies één plek waar databasefouten API-responses worden, vaak je repository/DAO-laag of een globale error handler. Dit voorkomt “soms inline, soms toast”-chaos.
  2. Classificeer de fout. Wanneer een schrijfoperatie faalt, detecteer de klasse: unique constraint, foreign key, NOT NULL of check constraint. Gebruik driverfoutcodes wanneer mogelijk. Vermijd het parsen van menselijke tekst tenzij het niet anders kan.
  3. Map constraintnamen naar formuliervelden. Constraints zijn prima identificatoren, maar UIs hebben veldkeys nodig. Houd een simpele lookup zoals users_email_key -> email of orders_customer_id_fkey -> customerId. Zet het dicht bij de code die het schema beheert.
  4. Genereer een veilige melding. Bouw korte, gebruikersvriendelijke tekst per klasse, niet op basis van ruwe DB-boodschap. Unique -> “Deze waarde is al in gebruik.” FK -> “Kies een bestaande klant.” NOT NULL -> “Dit veld is verplicht.” Check -> “Waarde valt buiten het toegestane bereik.”
  5. Retourneer gestructureerde fouten en render ze inline. Stuur een consistente payload (bijvoorbeeld: [{ field, code, message }]). Koppel in de UI meldingen aan velden, scroll en focus het eerste falende veld en houd een globale banner slechts als samenvatting.

Als je met AppMaster bouwt, pas je hetzelfde idee toe: vang de databasefout op één backend-plek, vertaal het naar een voorspelbaar veldfoutformaat en toon het naast de invoer in je web- of mobiele UI. Dit houdt de ervaring consistent zelfs als je datamodel evolueert.

Een realistisch voorbeeld: drie mislukte opslagen, drie nuttige uitkomsten

Deze fouten worden vaak samengeperst in één generieke toast. Elk geval heeft een verschillende melding nodig, ook al komt alles uit de database.

1) Aanmelden: e-mail al in gebruik (unique constraint)

Ruwe fout (wat je in logs ziet): duplicate key value violates unique constraint "users_email_key"

Wat de gebruiker moet zien: “Dat e-mailadres is al geregistreerd. Probeer in te loggen of gebruik een ander e-mailadres.”

Zet de melding naast het E-mailveld en behoud het ingevulde formulier. Bied indien mogelijk een secundaire actie aan zoals “Inloggen”, zodat ze niet hoeven te raden wat er gebeurde.

2) Order aanmaken: ontbrekende klant (foreign key)

Ruwe fout: insert or update on table "orders" violates foreign key constraint "orders_customer_id_fkey"

Wat de gebruiker moet zien: “Kies een klant om deze bestelling te plaatsen.”

Dit voelt voor de gebruiker niet als een “fout” maar als ontbrekende context. Highlight de Klant-selector, behoud eventuele toegevoegde orderregels en als de klant in een andere tab verwijderd is, zeg dat duidelijk: “Die klant bestaat niet meer. Kies een andere.”

3) Profiel bijwerken: verplicht veld ontbreekt (NOT NULL)

Ruwe fout: null value in column "last_name" violates not-null constraint

Wat de gebruiker moet zien: “Achternaam is verplicht.”

Dat is hoe goede constraintafhandeling eruitziet: normale formulierfeedback, geen systeemfout.

Om support te helpen zonder technische details te lekken naar gebruikers, bewaar je de volledige fout in logs (of een intern foutpaneel): includeer een request ID en user/session ID, de constraintnaam (indien beschikbaar) en tabel/veld, de API-payload (masker gevoelige velden), timestamp en endpoint/actie, en het gebruikervriendelijke bericht dat is getoond.

Foreign key-fouten: help de gebruiker herstellen

Verbeter herstel na fouten
Behoud gebruikersinvoer, focus het eerste falende veld en verminder retries en supporttickets.
Start een project

Foreign key-fouten betekenen meestal dat iemand iets koos dat niet meer bestaat, niet meer toegestaan is of niet overeenkomt met de huidige regels. Het doel is niet alleen de fout uit te leggen, maar een duidelijke volgende stap te geven.

Meestal map je een FK-fout naar één veld: de picker die naar een ander record verwijst (Klant, Project, Toegewezen aan). De melding moet het ding noemen dat de gebruiker herkent, niet het databaseconcept. Vermijd interne ID's of tabelnamen. “Klant bestaat niet meer” is nuttig. “FK_orders_customer_id violated (customer_id=42)” is dat niet.

Een betrouwbaar herstelpatroon behandelt de fout als een verouderde selectie. Vraag de gebruiker opnieuw te kiezen uit de meest recente lijst (ververs de dropdown of open de zoekpicker). Als het record verwijderd of gearchiveerd is, zeg dat duidelijk en wijs op een actief alternatief. Als de gebruiker geen toegang meer heeft, zeg “Je hebt geen toestemming meer om dit item te gebruiken” en vraag om een andere keuze of contact met een admin. Als het normaal is om een gerelateerd record aan te maken, bied dan “Nieuwe klant aanmaken” aan in plaats van herhaalde retries te forceren.

Verwijderde en gearchiveerde records zijn een veelvoorkomende valkuil. Als je UI inactieve items voor context kan tonen, label ze duidelijk (Gearchiveerd) en voorkom selectie. Dat voorkomt de fout, maar behandelt het nog steeds als een andere gebruiker data verandert.

Soms hoort een foreign key-fout op formulierniveau, niet op veldniveau. Doe dat wanneer je niet betrouwbaar kunt zeggen welke referentie de fout veroorzaakte, wanneer meerdere referenties ongeldig zijn of wanneer het echte probleem permissies over de hele actie betreft.

NOT NULL en validatie: voorkom de fout, maar handel het alsnog af

Laat opslaan voorspelbaar aanvoelen
Bouw een backend en UI die veldniveau-fouten teruggeven in plaats van vage “request failed”-meldingen.
Probeer AppMaster

NOT NULL-fouten zijn het makkelijkst te voorkomen en het meest irritant als ze doorheen glippen. Als iemand “request failed” ziet nadat een verplicht veld leeggelaten is, doet de database UI-werk. Goede UX betekent dat de UI de voor de hand liggende gevallen blokkeert, en dat de API nog steeds heldere veldfouten teruggeeft wanneer iets wordt gemist.

Begin met vroege checks in het formulier. Markeer verplichte velden vlak bij de invoer, niet alleen in een generieke banner. Een korte hint als “Vereist voor bonnetjes” is nuttiger dan alleen een rood sterretje. Als een veld conditioneel verplicht is (bijvoorbeeld “Bedrijfsnaam” alleen bij “Accounttype = Zakelijk”), maak die regel zichtbaar op het moment dat het relevant wordt.

UI-validatie is niet genoeg. Gebruikers kunnen deze omzeilen met oudere appversies, slechte netwerken, bulkimports of automatisering. Spiegel dezelfde regels in de API zodat je geen ronde verspilt om uiteindelijk bij de database te falen.

Houd bewoording consistent door de app zodat mensen leren wat elke melding betekent. Voor ontbrekende waarden gebruik je “Vereist.” Voor lengtebeperkingen: “Te lang (max 50 karakters).” Voor formaatchecks: “Ongeldig formaat (gebruik [email protected]).” Voor typefouten: “Moet een nummer zijn.”

Partiële updates zijn waar NOT NULL lastig wordt. Een PATCH die een verplicht veld weglaat, mag niet falen als de bestaande waarde al aanwezig is, maar moet falen als de client het expliciet op null of een lege waarde zet. Bepaal deze regel één keer, documenteer het en handhaaf het consequent.

Een praktisch aanpak is valideren op drie lagen: client-formulieregels, API-requestvalidatie en een laatste vangnet dat een database NOT NULL-fout opvangt en naar het juiste veld mapt.

Veelgemaakte fouten die weer naar “request failed” leiden

De snelste manier om constraintafhandeling te verpesten is al het harde werk in de database doen en het resultaat verstoppen achter een generieke toast. Gebruikers geven niet om het feit dat een constraint afging. Ze willen weten wat te herstellen, waar en of hun data veilig is.

Een veelvoorkomende fout is het tonen van ruwe databasetekst. Meldingen als duplicate key value violates unique constraint voelen als een crash, ook als de app kan herstellen. Gebruikers maken er supporttickets van omdat ze angstaanjagende tekst kopiëren in plaats van één veld te corrigeren.

Een andere valkuil is vertrouwen op stringmatching. Het werkt totdat je een driver verandert, Postgres upgrade of een constraint hernoemt. Dan stopt je mapping stilletjes en zit je weer met “request failed.” Gebruik liever stabiele foutcodes en includeer de veldnaam die je UI begrijpt.

Schemawijzigingen breken veldmapping vaker dan men verwacht. Een hernoeming van email naar primary_email kan een duidelijke melding veranderen in nergens-te-tonen data. Maak de mapping onderdeel van dezelfde wijzigingsset als de migratie en laat tests luid falen als een veldkey onbekend is.

Een grote UX-killer is elke constraintfout in HTTP 500 omzetten zonder body. Dat zegt tegen de UI “dit is de server zijn fout”, dus kan hij geen veldhints tonen. De meeste constraintfouten zijn door gebruikers te corrigeren, dus retourneer een validatie-achtige response met details.

Een paar patronen om op te letten:

  • Unieke e-mailmeldingen die bevestigen dat een account bestaat (gebruik neutrale bewoording in aanmeldflows)
  • “Één fout tegelijk” behandelen en het tweede gebroken veld verbergen
  • Multistep-formulieren die fouten vergeten na Vorige/Volgende-klik
  • Retries die verouderde waarden indienen en het correcte veldbericht overschrijven
  • Logging die de constraintnaam of foutcode weggooit, waardoor bugs moeilijk te traceren zijn

Bijvoorbeeld: als een aanmeldformulier zegt “E-mail bestaat al”, bevestig je mogelijk dat een account bestaat. Een veiligere melding is “Controleer uw e-mail of probeer in te loggen”, terwijl je de fout nog steeds aan het e-mailveld koppelt.

Snel checklist voordat je live gaat

Ga om met verandering zonder breuk
Regeneer schone, schaalbare code als requirements veranderen, zonder technische schuld op te stapelen.
Probeer bouwen

Voordat je uitrolt, controleer de kleine details die bepalen of een constraintfout aanvoelt als een behulpzame duw of een doodlopende weg.

API-respons: kan de UI er echt op handelen?

Zorg dat elke validatie-achtige fout genoeg structuur teruggeeft om naar een specifiek invoerveld te wijzen. Voor elke fout: return een field, een stabiele code en een menselijke message. Dek de gangbare databasetypes af (unique, foreign key, NOT NULL, check). Houd technische details voor logs, niet voor gebruikers.

UI-gedrag: helpt het de persoon herstellen?

Zelfs een perfecte melding voelt slecht als het formulier de gebruiker tegenwerkt. Focus het eerste falende veld en scroll het in beeld indien nodig. Behoud wat de gebruiker al heeft ingevuld (vooral bij meerdere veldfouten). Toon eerst veldmeldingen, met een korte samenvatting alleen als dat helpt.

Logging en tests: vang je regressies?

Constraintafhandeling breekt vaak stilletjes bij schemawijzigingen, dus behandel het als een onderhouden feature. Log de DB-fout intern (constraintnaam, tabel, operatie, request ID), maar toon het nooit direct. Voeg tests toe voor minstens één voorbeeld per constrainttype en verifieer dat je mapping stabiel blijft, zelfs als de exacte databasedtekst verandert.

Volgende stappen: maak het consistent door je app heen

De meeste teams repareren constraintfouten per scherm. Dat helpt, maar gebruikers merken de gaten: het ene formulier toont een duidelijke melding, het andere zegt nog steeds “request failed.” Consistentie is wat dit van een pleister in een patroon verandert.

Begin waar het pijn doet. Haal een week aan logs of supporttickets op en kies de paar constraints die het vaakst voorkomen. Die “topveroorzakers” zijn eerst aan de beurt voor vriendelijke veldmeldingen.

Behandel foutvertaling als een kleine productfeature. Houd één gedeelde mapping die de hele app gebruikt: constraintnaam (of code) -> veldnaam -> melding -> herstelhint. Houd meldingen eenvoudig en de hint uitvoerbaar.

Een lichtgewicht rollout-plan dat in een druk producttraject past:

  • Identificeer de 5 constraints die gebruikers het vaakst raken en schrijf de exacte melding die je wilt tonen.
  • Voeg een mappingtabel toe en gebruik die in elk endpoint dat data opslaat.
  • Standaardiseer hoe formulieren fouten renderen (zelfde plaatsing, zelfde toon, zelfde focusgedrag).
  • Laat een niet-technische collega de meldingen reviewen en vraag: “Wat zou je nu doen?”
  • Voeg één test per formulier toe die controleert of het juiste veld gemarkeerd wordt en de melding leesbaar is.

Als je dit consistente gedrag wilt bouwen zonder elk scherm met de hand te maken, ondersteunt AppMaster (appmaster.io) backend-API's plus gegenereerde web- en native mobiele apps. Dat maakt het makkelijker om één gestructureerd foutformaat te hergebruiken in alle clients, zodat veldgerichte feedback consistent blijft als je datamodel verandert.

Schrijf ook een korte “error message style”-nota voor je team. Houd het simpel: welke woorden je vermijdt (databasetermen) en wat elke melding moet bevatten (wat er gebeurde, wat de volgende stap is).

FAQ

Waarom voelen database-constraintfouten zo frustrerend voor gebruikers?

Behandel het als normale formulierfeedback, niet als een systeemcrash. Toon een korte melding bij het exacte veld dat aanpassingen nodig heeft, behoud wat de gebruiker al heeft ingevuld en leg in duidelijk Nederlands uit wat de volgende stap is.

Wat is het verschil tussen een veldniveau-fout en een generieke “request failed”-melding?

Een veldniveau-fout wijst naar één invoer en zegt direct wat de gebruiker daar moet aanpassen, bijvoorbeeld “E-mail is al in gebruik.” Een generieke fout dwingt tot gokken, opnieuw proberen en supportberichten omdat hij niet uitlegt wat er veranderd moet worden.

Hoe detecteer ik betrouwbaar welke constraint faalde?

Gebruik stabiele foutcodes van je database-driver wanneer dat kan en map die vervolgens naar gebruikerstypen zoals uniek, foreign key, verplicht of bereikregels. Vermijd het parsen van ruwe database-tekst, dat verandert tussen drivers en versies.

Hoe map ik een constraintnaam naar het juiste formulierveld?

Houd in de backend een eenvoudige mapping bij van constraintnaam naar UI-veldkey, dicht bij de code die het schema beheert. Bijvoorbeeld: map een unieke constraint op e-mail naar het veld email zodat de UI het juiste invoerveld kan highlighten zonder te gokken.

Wat moet ik zeggen bij een unieke constraintfout (bijv. dubbele e-mail)?

Stel standaard: “Deze waarde is al in gebruik” en geef een duidelijke volgende stap zoals “Probeer een andere” of “Log in”, afhankelijk van de flow. Bij aanmelding of wachtwoordherstel gebruik neutrale bewoording om niet te bevestigen of een account bestaat.

Hoe behandel ik foreign key-fouten zonder gebruikers in verwarring te brengen?

Leg het uit als een verouderde of ongeldige selectie die de gebruiker herkent, bijvoorbeeld “Die klant bestaat niet meer. Kies een andere.” Als herstel alleen kan door een gerelateerd record aan te maken, bied dan die optie in de UI in plaats van herhaalde pogingen te forceren.

Als mijn UI verplichte velden valideert, waarom gebeuren NOT NULL-fouten toch?

Markeer verplichte velden in de UI en valideer voordat je verstuurt, maar behandel databasefouten als vangnet. Als het tóch gebeurt, toon eenvoudig “Verplicht” bij het veld en behoud de rest van het formulier.

Hoe ga ik om met meerdere constraintfouten bij één Opslaan?

Retourneer een array met fouten, elk met een veldkey, een stabiele code en een korte boodschap, zodat de UI ze allemaal tegelijk kan tonen. Focus aan de client het eerste falende veld maar laat de andere meldingen zichtbaar zodat gebruikers niet vastzitten in één-fout-per-keer.

Wat moet een API-foutrespons bevatten zodat de UI die correct kan renderen?

Gebruik een consistent payload dat scheidt wat gebruikers zien van wat je logt, bijvoorbeeld een gebruikersbericht plus interne details zoals constraintnaam en request ID. Toon nooit ruwe SQL-fouten aan gebruikers en laat de UI niet database-strings moeten parsen.

Hoe houd ik constraintfoutafhandeling consistent in web- en mobiele apps?

Centraliseer de vertaling op één plek in de backend, retourneer één voorspelbare foutvorm en toon die op dezelfde manier in elk formulier. Met AppMaster kun je hetzelfde gestructureerde foutcontract toepassen in gegenereerde backend-API's en web/mobile UIs, wat helpt om meldingen consistent te houden als je datamodel verandert.

Gemakkelijk te starten
Maak iets geweldigs

Experimenteer met AppMaster met gratis abonnement.
Als je er klaar voor bent, kun je het juiste abonnement kiezen.

Aan de slag