API JSON o Plain JSON

6

Nella mia azienda c'è un dibattito sull'opportunità di utilizzare la specifica API JSON o attenersi a un semplice JSON per lo sviluppo di API che verranno utilizzate da app mobili, principalmente iOS e Android.

Un argomento per l'API JSON è che poiché tutto è definito in anticipo, se i nuovi sviluppatori dovessero iniziare a lavorare sull'API dovrebbero essere in grado di trovare rapidamente ciò di cui hanno bisogno. Un altro è che poiché la maggior parte delle relazioni possono essere raggruppate in una risposta, può alleggerire il carico del server.

Un argomento contro l'API JSON è che crea problemi che prima non esistevano. Quando si usa JSON normale ci sono attributi che mantengono relazioni o oggetti dello stesso tipo per esempio: Se io dovessi avere un romanzo contenente informazioni sull'autore e sull'editore, il JSON normale sarebbe qualcosa del genere:

{
    author: { 
                name: "John",
                lastname: "Appleseed",
                id: 1
            },
    title: "Some great novel",
    publisher: {
                   name: "Something"     
               }
}

e poi, su Android, potrei creare una classe per serializzare il JSON. La classe sarebbe qualcosa di simile

class Novel {
    String title;
    Author author;
    Publisher publisher;
}

class Author {
    String name;
    String lastname;
    int id;
}

class Publisher {
    String name;
}

e quindi Retrofit analizzerebbe la risposta e restituirà un POJO Novel.

In Swift, potremmo usare SwiftyJSON e creare alcune strutture o classi simili con la sola differenza che dovrei scrivere un codice di codice aggiuntivo per impostare i valori della classe. Questo sembra un approccio semplice.

Ma quando si utilizza l'implementazione dell'API JSON diventerà molto più complesso e illeggibile.

Riguardo all'argomento che allevia il carico del server dal momento che può raggruppare la maggior parte delle relazioni e restituirle con la risposta, puoi farlo con un semplice JSON come nell'esempio sopra.

Potrei usare alcune informazioni su se è una buona scelta usare l'API JSON con linguaggi tipizzati staticamente come Java o Swift

    
posta gkaimakas 27.05.2016 - 12:08
fonte

4 risposte

5

Non sono interessato a JSON, sono interessato agli oggetti creati da JSON. Come nel tuo esempio, trasformare il semplice JSON in oggetti è facile. Quanto è difficile per i nuovi sviluppatori? Per lo più sono interessati agli oggetti creati. Possono guardare il codice che trasforma JSON in oggetti, il che è banale.

Ho esaminato le specifiche API di JSON e non lo consiglierei a nessuno se non a un masochista.

    
risposta data 27.05.2016 - 23:57
fonte
3

L'API JSON è carina, ma con specifiche complesse. Anche la sua implementazione non è facile, specialmente se non hai una buona libreria che la implementa.

Quindi è soprattutto una domanda "ne vale la pena per il nostro caso d'uso"?

A mio parere, ne vale la pena se si dispone di API grandi e / o pubbliche che devono essere stabili, estendibili, sviluppate per anni. L'API JSON fornisce uno standard ragionevole per le API (quindi non è necessario crearne di proprie), ha coperto molti casi avanzati (che non si pensa nemmeno a questo punto, ma causerà problemi in seguito), ha implementazioni esistenti in molte lingue e piattaforme e ha specifiche pubbliche e ben definite, supporto esistente e base utente ecc.

Non ne vale la pena, se si tratta di un'API privata tra un client e un server che potrebbe essere completamente rielaborata in un anno o giù di lì, lavorata da un piccolo team.

Naturalmente, ci sono molti progetti che si trovano tra questi casi piuttosto estremi, in cui la decisione potrebbe non essere facile.

    
risposta data 29.05.2016 - 03:17
fonte
0

Attualmente mi occupo di un'API SOAP e del WSDL corrispondente. Dopo aver esaminato le specifiche dell'API JSON. Ho l'impressione che stiano cercando di essere un equivalente WSDL per i server REST JSON.

Come i WSDL, l'API JSON non è la più leggibile al mondo (sebbene più leggibile dei WSDL), ma è pensata per essere analizzata da strumenti che creeranno quindi il codice necessario per te.

La conversione di JSON in strutture rapide richiede un sacco di codice boilerplate. Certo è leggibile e facile da creare quel codice, ma è piuttosto noioso e richiede tempo. Una perdita di tempo quando uno strumento automatico può svolgere il lavoro.

Detto questo, SOAP e WSDL si stanno estinguendo, e penso che gran parte del perché abbia a che fare con il codice che gli strumenti automatizzati creano ... Il codice generato di per sé è di solito difficile da leggere e un problema da aggiornare manualmente .

Ovviamente l'intero punto del codice generato automaticamente è che non hai avere per aggiornarlo, ma avere quel pezzo di codice spazzatura nel mezzo della tua base incontaminata è difficile da sopportare.

A volte l'estetica è più importante dell'efficienza.

    
risposta data 28.05.2016 - 15:08
fonte
0

Ti piacerebbe essere in grado di aggiungere in modo dinamico nuovi contenuti e funzionalità al tuo client senza doverli modificare? Se vai con Json API (e in effetti sfruttalo ), puoi realizzare esattamente questo.

Diciamo che la v1 della tua risorsa book assomiglia a questa

links: { 
         self: "/books/1"
          next: "/books/2"
}
author: { 
            links: {
                 self: "/authors/1"
            }
            name: "John",
            lastname: "Appleseed",
            id: 1
        },
title: "Some great novel",
publisher: {
               name: "Something"     
           }

Quindi decidi di aggiungere la possibilità di acquistare.

links: { 
         self: "/books/1"
          next: "/books/2"
          purchase: "/books/1/purchase"
}

Se hai creato i tuoi client per visualizzare solo tutte le azioni possibili ( link ), hai appena aggiunto la funzionalità di acquisto a tutti i tuoi clienti, semplicemente aggiornando ciò che viene restituito dal tuo server.

Consiglio vivamente di guardare il discorso di Stefen Tilkov: REST: non penso che significhi ciò che pensi .

    
risposta data 28.05.2016 - 19:20
fonte

Leggi altre domande sui tag