Sto costruendo una libreria client che utilizza una raccolta di servizi API OpenStack. So che con il passare del tempo verranno aggiunti altri servizi, quindi voglio creare un modo pulito e pulito di strutturare la mia libreria client per ridurre al minimo i tempi di sviluppo (per futuri nuovi servizi) ed evitare la duplicazione.
Finora ho pensato a due soluzioni:
-
Implementa il codice userland da zero. Ogni servizio utilizza un client HTTP sottostante e per ogni operazione API esiste un metodo concreto in una classe concreta che incapsula la logica. Questa è la tua applicazione standard in cui tutto esiste in codice concreto. I vantaggi sono che è semplice ed evidente per i nuovi contributori; svantaggi è che la scrittura del codice è lenta e c'è il rischio di duplicare il codice di codice.
-
Implementa un qualche tipo di livello di descrizione del servizio - simile a WADLs ma più leggero e scritto in JSON. Ogni documento descrittivo agirebbe in modo analogo a API Discovery di Google in cui le risorse dell'API sono definite utilizzando JSON Schemas ; Le operazioni HTTP sono definite con tutti i loro parametri, URI, tipi di verbo, codici di stato attesi, ecc .; anche l'autenticazione è definita. I vantaggi sono che richiede meno tempo per scrivere, evita la duplicazione e forma un contratto esplicito utile per la documentazione dell'utente finale. Gli svantaggi sono che è abbastanza meta-come e difficile da capire per i nuovi arrivati.
Esistono numerose librerie client popolari che utilizzano questo tipo di schema schema, ma sto cercando di valutare i suoi aspetti positivi e negativi. Sono propenso a utilizzare gli schemi perché penso che faranno risparmiare tempo sviluppando ed evitando duplicazioni. Anche le API di OpenStack si stanno muovendo verso lo schema json.
Ci sono motivi validi per cui affidarsi agli schemi è una cattiva idea per una libreria client e / o perché il codice userland è un approccio migliore?