Questa domanda è nel contesto delle applicazioni basate sul web. Un server web esposizione di un API HTTP per i client (ad esempio, l'esecuzione in un browser, ma non necessariamente). Di solito il server web sarebbe connesso a qualche tipo di DataStorage.
La mia preoccupazione è l'API esposta dal server HTTP e come progettarla.
Trovo che, spesso, una grande parte di API esposta al cliente sia solo una Interfaccia CRUD al datastorage. Ad esempio, l'api quasi sempre contiene cose come:
- get_all_users()
- get_this_user(id)
- create_new_user(name, email, phone, password)
- update_user(id, name?, email?, phone?, password?)
- delete_user(id)
Questo non è tutto ciò che fa l'API, ma è qualcosa che è comune a molto di API con cui ho lavorato.
A seconda di ciò di cui il cliente ha bisogno, spesso finisco sempre di più cose nell'API come queste:
- get_user_by_email(email)
- get_all_users_along_with_number_of_lincenses_for_each()
- delete_all_these_users_at_once(array [])
- get_users_whose_profile_is(profile_name)
- get_names_of_users_who_are_admin_profiles()
- .... etc
In altre parole, il client spesso ha bisogno di fare join, filtrare e ordinare il file dati in tutti i modi.
Che mi ha portato a utilizzare API eccessivamente gonfie (proprio come quella sopra) supportare tutti i tipi di opzioni per filtrare, ordinare e unirsi a dati da altre tabelle.
L'API risultante è troppo complessa per essere utilizzata e appresa da entrambi i client e per il server da mantenere e testare.
(IMO l'abl di Zabbix HTTP soffre di questa sindrome).
Domande:
-
Hai esperienza simile?
-
Hai qualche indicazione su come trovare un buon equilibrio tra Completezza e complessità dell'API.
PS. Sono a conoscenza di REST, ma non trovo che risolva il problema, l'api fornito è ancora molto semplice e non risolve il problema get_users_along_with_number_of_licenses () o il get_names_of_users_which_are_admin () chiamate api.;