Diciamo che c'è un'applicazione di successo open source (scritta in PHP se è importante), che offre ai suoi utenti diversi modi per estenderla (pensa a qualcosa come Drupal o Wordpress, molti plugin personalizzati, ecc.). Ora diciamo che sfortunatamente non esiste una definizione formale di ciò che costituisce l'API pubblica per questa applicazione, e vogliamo definire tale API pubblica, in modo che possiamo a) controllare lo sviluppo e il refactoring delle applicazioni e sapere che non roviniamo le estensioni con la prossima versione eb) dà agli estensori un'idea su cosa possono tranquillamente utilizzare e su cosa non usare meglio. Quindi la domanda è: come è meglio avvicinarsi a questo e cosa dovrebbe essere lì? Ad esempio, alcune domande specifiche:
- Tutte le classi dovrebbero far parte dell'API pubblica o dovremmo contrassegnarle come pubbliche o contrassegnare quelle che non lo sono?
- I metodi protetti devono far parte dell'API (se qualcuno crea una classe derivata personalizzata, se ne faranno affidamento) e in tal caso - dovremmo contrassegnare in modo esplicito quelli che non vogliamo che gli altri usino, o quelli che noi " ri permettere di usare?
- Anche le proprietà pubbliche dovrebbero far parte dell'API? Che ne dici di quelli protetti?
- Se vogliamo apportare modifiche / refactoring che non possono essere retrocompatibili (ad esempio la vecchia API era troppo buggata o non si adattava più all'app), come ci si avvicina di più?
- Se vogliamo rimuovere completamente qualche classe / metodo, quale dovrebbe essere il processo? Immagino che vogliamo prima renderlo deprecato e poi rimuoverlo nelle versioni successive, ma per esempio dovremmo dare qualche avvertimento quando deprecato, ma viene comunque chiamata la funzionalità esistente? Il problema qui è che non possiamo avvisare in modo aggressivo in quanto potrebbe interrompere l'applicazione, ma se non siamo aggressivi, le persone ignorerebbero il marchio deprecato fino a quando non rimuoveremo il vecchio pezzo API e quindi subirebbero gravi danni.
Qualsiasi altro consiglio è ben accetto, e riferimenti per buoni documenti / esempi / ecc. sull'argomento.