Старонка прадукту сцвярджае, што ў яго ёсць API, і нарада па інтэграцыі захрасае на другім пытанні. Якая аперацыя, над якім аб'ектам, кім выклікаецца і што лічыцца поспехам? Адказы на гэтыя чатыры пытанні перад параўнаннем прадуктаў звычайна адсякаюць палову кандыдатаў. Яны таксама робяць тое параўнанне, што засталося, чымсьці, што можа вырашыць тэст.

Замяніце сцвярджэнне пра наяўнасць API адной аперацыяй

API — гэта транспарт, а не магчымасць. REST-кропка, лакальны сокет і абгортка каманднага радка могуць называцца API, але яны не прапануюць эквівалентных аперацый.

Запішыце аперацыю як сказ, перш чым адкрыць дакументацыю.

Запуск лакальнага злучэння — гэта дзеянне на баку кліента, перад якім стаіць карыстальнік. Выдача профілю прылады — гэта дзеянне забеспячэння, за якім стаіць інвентар. Адключэнне доступу карыстальніка — гэта адміністрацыйнае дзеянне з журналам аўдыту. Гэтыя тры звычайна жывуць у розных кампанентах, якімі валодаюць розныя каманды, з рознымі паўнамоцтвамі.

Чатыры палі, якія робяць кантракт правераным

Запоўніце чатыры палі для кожнай аперацыі: аб'ект, дзеянне, выклікальнік і ўмова поспеху. Кантракт без поля — гэта жаданне.

Табліца — гэта ўвесь працоўны аркуш:

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

Умова поспеху — гэта поле, якое людзі прапускаюць, і менавіта яно вырашае, ці будзе інтэграцыя працаваць. Захаваная налада — не актыўны тунель, а адключаны акаўнт — не завершаная сесія.

Калі дзве аперацыі патрабуюць розных выклікальнікаў, гэта дзве інтэграцыі. Аб'яднанне іх у адзін сэрвісны акаўнт звычайна азначае выдачу большых паўнамоцтваў, чым патрэбна любой з іх.

Суаднясіце інтэрфейс з яго рэальным узроўнем

Грамадскі інтэрфейс кіравання OpenVPN размаўляе з дэманам праз TCP або Unix-сокет. Яго каманды ўключаюць назіранне за станам і сігналы дэману.

Гэта робіць яго каналам кіравання дэманам, а не хост-API падпіскі ці сэрвісам рэгістрацыі карыстальнікаў. Уважлівае чытанне яго дакументацыі ратуе ад зборкі на ўзроўні, які не валодае аб'ектам.

Тая ж дакументацыя кажа, што пратакол не мае ўласнага шыфравання. Хто можа дасягнуць сокета, той можа кіраваць дэманам, таму стаўцеся да яго як да адчувальнага кіравання, а не як да струменя метрык. Прывязайце яго да loopback або Unix-сокета і змясціце за абмежавальную схему, калі аддаленаму выклікальніку гэта патрэбна. Экспазіцыя ў інтэрнэт дзеля зручнасці ператварае канал кіравання ў інцыдэнт.

Апішыце паводзіны пасля выкліку

Прыняцце — не тое самае, што завяршэнне. Дэман можа вярнуцца раней, чым тунель падымецца, таму чакайце дакументаванай падзеі завяршэння або збою і звяжыце яе з запытам, які вы адправілі.

Вырашыце, што робіць выклікальнік, калі адказ згубіўся. Сляпое паўтарэнне стварэння ці перападключэння — не тое самае, што праверка, ці ўжо падзейнічаў першы запыт.

Выдаленне доступу — гэта як мінімум тры розныя дзеянні: заблакаваць будучы ўваход, спыніць актыўную сесію і адклікаць пасведчанне. Прасіце тое, што рэальна патрабуе палітыка, і ўкажыце ў кантракце, што ёсць што. Не называйце адно паспяховае абнаўленне акаўнта поўным адкліканнем без доказаў. Розніца важная падчас інцыдэнту, калі ідзе час.

Праверце кантракт пілотам

Невялікі ўзгоднены пілот павінен ахапіць поспех, адмову, перапыненне і паўтор, а затым аперацыю праграмы, якая павінна быць дазволена або адмоўлена.

Для інтэрфейсу ўзроўню дэмана дзве каманды адпрацоўваюць назіранне і сігнал:

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

Дайце толькі тыя паўнамоцтвы, якіх патрабуе аперацыя. Трымайце сакрэты па-за звычайнымі журналамі і запісвайце дастаткова прыватных дэталяў, каб сказаць, якая мэта была закранута і чым гэта скончылася.

Запішыце шлях аднаўлення для выпадку, калі сам API кіравання недаступны. Выбірайце інтэрфейс, які валодае аб'ектам і яго жыццёвым цыклам; заявы пра аўтаматызацыю на старонцы прадукту не заменяць гэтага.

Падобныя артыкулы