Ei produktside seier at ho har eit API, og integreringsmøtet stoppar på det andre spørsmålet. Kva operasjon, mot kva objekt, kalla av kven, og kva blir rekna som suksess? Å svare på desse fire før du samanliknar produktar fjernar vanlegvis halvparten av kandidatane. Det gjer òg den gjenverande samanlikninga til noko ein test kan avgjere.

Byt ut «har eit API» med éin operasjon

Eit API er ein transport, ikkje ei evne. Eit REST-endepunkt, ein lokal socket og ei innpakning for kommandolinja kan alle kallast eit API, og dei tilbyr ikkje likeverdige operasjonar.

Skriv operasjonen som ei setning før du ser på dokumentasjonen.

Å starte ei lokal tilkopling er ei handling på klientsida med ein brukar framfor seg. Å utstede ein einheitsprofil er ei klargjeringshandling med ein inventarliste bak seg. Å deaktivere tilgangen til ein brukar er ei administrativ handling med eit revisjonsspor. Desse tre ligg vanlegvis i ulike komponentar, eigde av ulike team, med ulik myndigheit.

Fire felt som gjer kontrakten testbar

Fyll ut fire felt for kvar operasjon: objektet, handlinga, den som kallar, og suksesskriteriet. Ein kontrakt med eit manglande felt er eit ønske.

Tabellen er heile arbeidsarket:

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

Suksesskriteriet er feltet folk hoppar over, og det er nettopp det som avgjer om integrasjonen fungerer. Ei lagra innstilling er ikkje ein aktiv tunnel, og ein deaktivert konto er ikkje ei avslutta økt.

Viss to operasjonar treng ulike kallarar, er dei to integrasjonar. Å slå dei saman i éin tenestekonto betyr vanlegvis å gi meir myndigheit enn nokon av dei treng.

Tilpass grensesnittet til laget det faktisk høyrer til

OpenVPN-fellesskapets administrasjonsgrensesnitt snakkar med ein daemon over TCP eller ein Unix-socket. Kommandoane omfattar tilstandsobservasjonar og signal til daemonen.

Det gjer det til ein kontrollkanal for daemonen, ikkje eit drifta abonnements-API eller ei teneste for brukarregistrering. Å lese dokumentasjonen nøye sparer deg for å byggje mot eit lag som ikkje eig objektet.

Dokumentasjonen seier òg at protokollen ikkje har eigen kryptering. Den som kan nå socketen, kan styre daemonen, så handsam det som sensitiv kontroll, ikkje som ein metrikkestraum. Bind det til loopback eller ein Unix-socket, og set det bak ei avgrensa ordning viss ein ekstern kallar treng det. Å eksponere det mot internett for enkelheits skuld gjer ein kontrollkanal til ein hending.

Spesifiser åtferda etter kallet

Aksept er ikkje det same som fullføring. Daemonen kan svare før tunnelen er oppe, så vent på den dokumenterte fullførings- eller feilhendinga og knyt ho til førespurnaden du sende.

Avgjer kva den som kallar gjer viss svaret går tapt. Å blindt gjenta ein oppretting eller ei gjenoppkopling er ikkje det same som å sjekke om den første førespurnaden allereie verka.

Fjerning av tilgang er minst tre ulike handlingar: blokkere framtidig pålogging, avslutte ei aktiv økt og tilbakekalle legitimasjonen. Be om dei policyen faktisk krev, og sei i kontrakten kva som er kva. Ikkje merk éi vellukka kontooppdatering som fullstendig tilbakekalling utan prov. Skilnaden betyr noko under ei hending, når klokka går.

Kontroller kontrakten med ein pilot

Ein liten godkjend pilot bør dekkje suksess, avvising, avbrot og nytt forsøk, etterfølgd av applikasjonsoperasjonen som skal tillatast eller avvisast.

For eit grensesnitt på daemonnivå utfører to kommandoar observasjon og eit signal:

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

Gi berre den myndigheita operasjonen krev. Hald hemmelegheiter unna rutineloggar, og logg nok private detaljar til å seie kva mål som vart råka og korleis det enda.

Skriv ned gjenopprettingsvegen for tilfellet der sjølve kontroll-API-et er nede. Vel grensesnittet som eig objektet og livssyklusen; automatiseringspåstandar på ei produktside er inga erstatning.

Relaterte artiklar