O pagină de produs spune că are un API, iar ședința de integrare se blochează la a doua întrebare. Ce operație, asupra cărui obiect, apelată de cine și ce contează drept succes? Răspunsul la aceste patru întrebări înainte de a compara produse elimină de obicei jumătate dintre candidați. Transformă și comparația rămasă în ceva ce un test poate soluționa.

Înlocuiește „are un API” cu o singură operație

Un API este un transport, nu o capabilitate. Un endpoint REST, un socket local și un înveliș de linie de comandă pot fi toate numite API, și nu oferă operații echivalente.

Scrie operația ca o propoziție înainte de a te uita la documentație.

Pornirea unei conexiuni locale este o acțiune pe partea clientului, cu un utilizator în fața ei. Emiterea unui profil de dispozitiv este o acțiune de pregătire, cu un inventar în spate. Dezactivarea accesului unui utilizator este o acțiune administrativă, cu o urmă de audit. Aceste trei stau de obicei în componente diferite, deținute de echipe diferite, cu autoritate diferită.

Patru câmpuri care fac contractul testabil

Completează patru câmpuri pentru fiecare operație: obiectul, acțiunea, apelantul și condiția de succes. Un contract cu un câmp lipsă este o dorință.

Tabelul este întreaga fișă de lucru:

FieldQuestionExample
ObjectWhat is being acted on?One enrolled device
ActionObserve, create, change, start, stop, or revoke?Revoke
CallerWhich identity calls it?Deployment service
SuccessWhat observable state proves it?Future sign-in denied

Condiția de succes este câmpul pe care oamenii îl sar, și tocmai ea decide dacă integrarea funcționează. O setare salvată nu este un tunel activ, iar un cont dezactivat nu este o sesiune încheiată.

Dacă două operații au nevoie de apelanți diferiți, sunt două integrări. Împachetarea lor într-un singur cont de serviciu înseamnă de obicei acordarea mai multă autoritate decât are nevoie oricare dintre ele.

Potrivește interfața cu stratul căruia îi aparține cu adevărat

Interfața de administrare din comunitatea OpenVPN vorbește cu un daemon prin TCP sau un socket Unix. Comenzile ei includ observarea stării și semnale către daemon.

Asta o face un canal de control al daemonului, nu un API de abonament găzduit sau un serviciu de înregistrare a utilizatorilor. Citirea atentă a documentației te scutește de a construi pe un strat care nu deține obiectul.

Documentația spune și că protocolul nu are criptare proprie. Cine poate ajunge la socket poate controla daemonul, așa că tratează-l ca pe un control sensibil, nu ca pe un flux de metrici. Leagă-l de loopback sau de un socket Unix și pune-l în spatele unei aranjament restricționat dacă un apelant la distanță are nevoie. Expunerea lui la internet pentru comoditate transformă un canal de control într-un incident.

Specifică comportamentul după apel

Acceptarea nu este același lucru cu finalizarea. Daemonul poate răspunde înainte ca tunelul să fie sus, așa că așteaptă evenimentul documentat de finalizare sau eșec și leagă-l de cererea pe care ai trimis-o.

Decide ce face apelantul dacă răspunsul se pierde. Repetarea orbească a unei creări sau a unei reconectări nu este același lucru cu verificarea dacă prima cerere a avut deja efect.

Eliminarea accesului reprezintă cel puțin trei acțiuni diferite: blocarea autentificării viitoare, încheierea unei sesiuni active și revocarea acreditării. Cere-le pe cele pe care politica le impune cu adevărat și spune în contract care este care. Nu eticheta o actualizare reușită de cont drept revocare completă fără dovezi. Diferența contează în timpul unui incident, când ceasul aleargă.

Verifică contractul cu un pilot

Un pilot mic aprobat ar trebui să acopere succesul, respingerea, întreruperea și reîncercarea, urmate de operația aplicației care ar trebui permisă sau refuzată.

Pentru o interfață la nivel de daemon, două comenzi exersează observarea și un semnal:

echo state | nc -w 2 127.0.0.1 7505
echo signal SIGTERM | nc -w 2 127.0.0.1 7505

Acordă doar autoritatea pe care o cere operația. Ține secretele în afara jurnalelor de rutină și înregistrează destule detalii private pentru a spune ce țintă a fost afectată și cum s-a încheiat.

Notează calea de recuperare pentru cazul în care API-ul de control însuși este căzut. Alege interfața care deține obiectul și ciclul lui de viață; pretențiile de automatizare de pe o pagină de produs nu sunt un substitut.

Articole similare