Definite l'operazione VPN prima di confrontare le API
Il controllo delle connessioni, il provisioning dei profili, l'amministrazione degli utenti e l'osservazione sono API diverse. Nominate prima l'oggetto, l'azione e la condizione di successo.
Una pagina prodotto afferma che esiste un'API, e la riunione di integrazione si blocca sulla seconda domanda. Quale operazione, su quale oggetto, chiamata da chi, e cosa conta come successo? Rispondere a queste quattro prima di confrontare i prodotti di solito elimina metà dei candidati. Trasforma anche il confronto rimanente in qualcosa che un test può risolvere.
Sostituite l'affermazione di avere un'API con una sola operazione
Un'API è un trasporto, non una capacità. Un endpoint REST, un socket locale e un wrapper da riga di comando possono tutti chiamarsi API, e non offrono operazioni equivalenti.
Scrivete l'operazione come frase prima di aprire la documentazione.
Avviare una connessione locale è un'azione lato client con un utente davanti. Emettere un profilo di dispositivo è un'azione di provisioning con un inventario dietro. Disabilitare l'accesso di un utente è un'azione amministrativa con una traccia di controllo. Queste tre di solito vivono in componenti diversi, posseduti da team diversi, con autorità diverse.
Quattro campi che rendono il contratto verificabile
Compilate quattro campi per ogni operazione: l'oggetto, l'azione, il chiamante e la condizione di successo. Un contratto a cui manca un campo è un desiderio.
La tabella è l'intero foglio di lavoro:
| Field | Question | Example |
|---|---|---|
| Object | What is being acted on? | One enrolled device |
| Action | Observe, create, change, start, stop, or revoke? | Revoke |
| Caller | Which identity calls it? | Deployment service |
| Success | What observable state proves it? | Future sign-in denied |
La condizione di successo è il campo che le persone saltano, ed è quella che decide se l'integrazione funziona. Un'impostazione salvata non è un tunnel attivo, e un account disabilitato non è una sessione terminata.
Se due operazioni richiedono chiamanti diversi, sono due integrazioni. Riunirle in un unico account di servizio di solito significa concedere più autorità di quanta ne serva a ciascuna.
Allineate l'interfaccia al suo livello reale
L'interfaccia di gestione della community di OpenVPN dialoga con un daemon via TCP o un socket Unix. I suoi comandi includono l'osservazione dello stato e i segnali al daemon.
Ciò la rende un canale di controllo del daemon, non un'API di sottoscrizione ospitata né un servizio di registrazione utenti. Leggere con cura la sua documentazione evita di costruire contro uno strato che non possiede l'oggetto.
La stessa documentazione dice che il protocollo non porta crittografia propria. Chiunque raggiunga il socket può controllare il daemon, quindi trattatelo come controllo sensibile e non come flusso di metriche. Vincolatelo a loopback o a un socket Unix, e mettetelo dietro un assetto ristretto se un chiamante remoto ne ha bisogno. Esporlo a internet per comodità trasforma un canale di controllo in un incidente.
Specificate il comportamento dopo la chiamata
L'accettazione non è la stessa cosa del completamento. Il daemon può tornare prima che il tunnel sia attivo, quindi attendete l'evento documentato di completamento o di errore e collegatelo alla richiesta inviata.
Decidete cosa fa il chiamante se la risposta va persa. Ripetere alla cieca una creazione o una riconnessione non è lo stesso che verificare se la prima richiesta ha già avuto effetto.
Rimuovere l'accesso sono almeno tre azioni diverse: bloccare l'accesso futuro, terminare una sessione attiva e revocare la credenziale. Chiedete quelle che la politica richiede davvero, e dite nel contratto quale è quale. Non etichettate un aggiornamento di account riuscito come revoca completa senza prove. La differenza conta durante un incidente, quando l'orologio corre.
Verificate il contratto con un pilota
Un piccolo pilota approvato dovrebbe coprire successo, rifiuto, interruzione e nuovo tentativo, seguito dall'operazione applicativa che dovrebbe essere consentita o negata.
Per un'interfaccia a livello di daemon, due comandi esercitano l'osservazione e un segnale:
echo state | nc -w 2 127.0.0.1 7505
echo signal SIGTERM | nc -w 2 127.0.0.1 7505Concedete solo l'autorità richiesta dall'operazione. Tenete i segreti fuori dai log di routine e registrate abbastanza dettagli privati per dire quale obiettivo è stato colpito e come è finita.
Scrivete il percorso di ripristino per il caso in cui l'API di controllo stessa sia inattiva. Scegliete l'interfaccia che possiede l'oggetto e il suo ciclo di vita; le promesse di automazione su una pagina prodotto non sono un sostituto.