Difinu la VPN-operacion antaŭ ol kompari API-ojn
Konekta kontrolo, provizado de profiloj, administrado de uzantoj kaj observado estas malsamaj API-oj. Unue nomu la objekton, la agon kaj la sukcesan kondiĉon.
Produkta paĝo diras, ke ĝi havas API-on, kaj la integriĝa kunveno haltas ĉe la dua demando. Kiu operacio, sur kiu objekto, fare de kiu, kaj kio validas kiel sukceso? Respondi tiujn kvar antaŭ kompari produktojn kutime forigas duonon de la kandidatoj. Ĝi ankaŭ igas la restan komparon io, kion testo povas decidi.
Anstataŭigu la aserton havi API-on per unu operacio
API estas transporto, ne kapablo. REST-finpunkto, loka soketo kaj komandlinia ĉirkaŭaĵo ĉiuj povas nomiĝi API, kaj ili ne proponas ekvivalentajn operaciojn.
Skribu la operacion kiel frazon antaŭ ol malfermi la dokumentaron.
Startigi lokan konekton estas klientflanka ago kun uzanto antaŭ ĝi. Eldoni aparatan profilon estas provizada ago kun inventaro malantaŭ ĝi. Malŝalti la aliron de uzanto estas administra ago kun revizia postsigno. Tiuj tri kutime loĝas en malsamaj komponantoj, posedataj de malsamaj teamoj, kun malsamaj rajtigoj.
Kvar kampoj kiuj igas la kontrakton testebla
Plenigu kvar kampojn por ĉiu operacio: la objekton, la agon, la alvokanton kaj la sukcesan kondiĉon. Kontrakto kun mankanta kampo estas deziro.
La tabelo estas la tuta laborfolio:
| 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 sukcesa kondiĉo estas la kampo, kiun homoj preterlasas, kaj ĝi decidas, ĉu la integriĝo funkcias. Konservita agordo ne estas aktiva tunelo, kaj malŝaltita konto ne estas finita seanco.
Se du operacioj bezonas malsamajn alvokantojn, ili estas du integriĝoj. Kunigi ilin en unu servan konton kutime signifas doni pli da rajtigo ol iu ajn el ili bezonas.
Adaptu la interfacon al ĝia reala tavolo
La komunuma administra interfaco de OpenVPN parolas kun demono per TCP aŭ Unix-soketo. Ĝiaj komandoj inkluzivas observojn de stato kaj signalojn al la demono.
Tio faras ĝin kontrolkanalo de la demono, ne gastigita abona API aŭ uzantregistra servo. Atenta legado de ĝia dokumentaro savas vin de konstruado sur tavolo, kiu ne posedas la objekton.
La sama dokumentaro ankaŭ diras, ke la protokolo portas neniun propran ĉifradon. Kiu ajn povas atingi la soketon povas kontroli la demonon, do traktu ĝin kiel senteman kontrolon, ne kiel metrikfluon. Ligu ĝin al loopback aŭ Unix-soketo, kaj metu ĝin malantaŭ limigita aranĝo se fora alvokanto bezonas ĝin. Elmeti ĝin al la interreto pro oportuno igas kontrolkanalon incidento.
Specifu konduton post la alvoko
Akcepto ne estas la sama kiel finiĝo. La demono povas reveni antaŭ ol la tunelo estos supren, do atendu la dokumentitan finiĝan aŭ malsukcesan eventon kaj ligu ĝin al la peto, kiun vi sendis.
Decidu, kion faras la alvokanto se la respondo perdiĝas. Blinde ripeti kreadon aŭ rekonekton ne estas la sama kiel kontroli, ĉu la unua peto jam efikis.
Forigo de aliro estas almenaŭ tri malsamaj agoj: bloki estontan ensaluton, fini vivan seancon kaj revoki la legitimilon. Petu la agojn, kiujn la politiko vere postulas, kaj diru en la kontrakto, kiu estas kiu. Ne etikedu unu sukcesan kontan ĝisdatigon kiel kompletan revokon sen pruvo. La diferenco gravas dum incidento, kiam la horloĝo kuras.
Kontrolu la kontrakton per piloto
Malgranda aprobita piloto devus kovri sukceson, malakcepton, interrompon kaj reprovon, sekvatajn de la aplika operacio, kiu devus esti permesita aŭ malpermesita.
Por interfaco je demona nivelo, du komandoj ekzercas observadon kaj signalon:
echo state | nc -w 2 127.0.0.1 7505
echo signal SIGTERM | nc -w 2 127.0.0.1 7505Donu nur la rajtigon, kiun la operacio postulas. Tenu sekretojn ekster rutinaj protokoloj, kaj registru sufiĉe da privataj detaloj por diri, kiu celo estis trafita kaj kiel ĝi finiĝis.
Skribu la restaŭran vojon por la kazo, kiam la kontrola API mem estas neatingebla. Elektu la interfacon, kiu posedas la objekton kaj ĝian vivociklon; aŭtomatigaj asertoj sur produkta paĝo ne estas anstataŭo.