risposte di errore di convalida nell'API REST

1

Sto progettando un'API RESTful e mi chiedo quale sia il formato migliore per i messaggi di errore di convalida.

Ad esempio, l'endpoint di creazione del mio account accetta un oggetto JSON:

user: {
  first_name: string,
  last_name: string,
  address: {
    street: string,
    city: string,
    zip_code: string
  }
}

Le mie risposte saranno nel seguente formato:

{
    code: 400,  // HTTP code
    message: "Validation failed",  // general message
    type: "validation_failed",  // there are other types of errors as well
    errors: WHAT_DO_I_SHOW_HERE
}

Ho diverse opzioni per i messaggi di errore di convalida:

Formato 1

errors: {
  last_name: "First name is required",
  address: {
    zip_code: "ZIP code is invalid"
  }
}

o appiattisci gli errori come nel formato 2

errors: {
  last_name: "First name is required",
  "address.city": "City is required",
  "address.zip_code": "ZIP code is invalid"
}

o usa un array, in cui ogni elemento può avere nome di campo, codice di errore, messaggio di errore, errori annidati, ecc.

errors: [
  {
    field: "first_name",
    message: "First name is required",
  },
  {
    field: "address",
    errors: [
      {
        field: "zip_code",
        message: "ZIP code is invalid"
      }
    ]
  }
]

o

errors: [
  {
    field: "first_name",
    message: "First name is required",
  },
  {
    field: "address.zip_code",
    message: "ZIP code is invalid"
  }
]

Apparentemente il formato della matrice è più flessibile poiché il nome del campo è facoltativo, quindi può contenere errori relativi a una combinazione di più campi (ad esempio, l'ora di fine di un intervallo di tempo deve essere successiva all'ora di inizio). Ma la mia domanda è, quale sarebbe più facile per gli utenti API consumare?

    
posta sean hawk 29.09.2016 - 04:38
fonte

2 risposte

4

Stai provando a fare troppo nel tuo livello API. È sufficiente eseguire il fail sul primo errore di convalida e restituire il messaggio.

L'utente della tua API deve implementare la validazione completa prima chiamando l'api e devi pubblicare le regole di convalida per consentire loro di farlo.

    
risposta data 01.10.2016 - 10:36
fonte
1

Come consumatore di API, preferirei l'ultima opzione. Effettua il loop sull'array, collega i messaggi di errore al campo (se esiste il nome) o alla casella degli errori generali (se non lo è).

Gli array annidati sono un problema da codificare e le opzioni precedenti sono tutte limitanti perché non consentono errori di convalida a livello di modulo.

    
risposta data 29.09.2016 - 17:17
fonte

Leggi altre domande sui tag