API restituisce sempre le migliori pratiche di JSONObject o JSONArray

3

Sto creando un'API che restituirà i dati in JSON.

Volevo anche sul lato client creare una classe di utilità per chiamare questa API.

Qualcosa come:

JSONObject sendGetRequest(Url url);
JSONObject sendPostRequest(Url url, HashMap postData);

Tuttavia a volte l'API restituisce l'array dell'oggetto [{id:1},{id:2}]

Ora ho quattro scelte ():

  • Effettua il test del metodo per JSONArray o JSONObject e rimanda un Object che dovrò trasmettere nel chiamante
  • Crea un metodo che restituisce JSONObject e uno per JSONArray (come sendGetRequestAndReturnAsJSONArray )
  • Fai in modo che il server invii sempre Arrays anche per un elemento
  • Fai in modo che il server invii sempre Objects al mio array

Vado per gli ultimi due metodi poiché penso che sarebbe una buona cosa obbligare l'API a inviare un tipo di dati coerente.

Ma quale sarebbe la migliore pratica (se ne esiste una).

Invia sempre array? o inviare sempre oggetti?

    
posta Michael Laffargue 20.08.2014 - 16:36
fonte

2 risposte

2

Questo dovrebbe dipendere da ciò che effettivamente sta facendo. Se sta recuperando uno o più oggetti, ha senso logicamente restituire sempre un array contenente i risultati, anche se si tratta di un array con un solo elemento. Ad esempio, è facile eseguire un foreach sull'array restituito.

Se il formato della richiesta fa sì che restituisca tipi di dati completamente diversi, sarebbe più chiaro avere un metodo diverso per ogni contesto.

Come questo potrebbe funzionare come metodo è una buona analogia. Se si dispone di una raccolta foo e una funzione searchFoo che cerca la raccolta di elementi, non la si scriverà in modo tale che restituisca un elemento se solo un elemento corrisponde, e in caso contrario restituisce un elenco di elementi. O trova sempre solo un elemento (ad esempio se la ricerca è basata su una chiave univoca) nel qual caso restituisce anche un oggetto del tipo appropriato, o troverà un numero variabile di elementi, nel qual caso restituirà sempre un elenco , indipendentemente dal numero di elementi trovati.

    
risposta data 20.08.2014 - 17:03
fonte
3

Questo argomento potrebbe già essere chiuso ma, per motivi di discussione, inserirò qui i miei 10 centesimi. Sto facendo una ricerca sulla sicurezza di json e Web Service e penso che dovresti sempre restituire un oggetto json invece di json array. La ragione di ciò è che json array può essere manomesso per restituire alcuni script XSS. Ad esempio: se l'array restituito è

[1, alert('You are hacked!'), 'abc']

Quindi indovina quale sorpresa otterrai quando la chiamata sarà finita? Può essere trattato come una chiamata javascript valida e mostrare l'avviso. Restituzione di oggetti json impedirà questo:

{'data':[1, alert('you are hacked', 'abc')]}

è un dato json non valido e nessuno script js che verrà visualizzato come errore nella console del browser. Ecco perché chiamare webservice da asp.net restituirà sempre json con un membro 'd'.

Maggiori informazioni: link

    
risposta data 10.03.2016 - 03:21
fonte

Leggi altre domande sui tag