API testlar yozgani yana bir qiziq narsa topib oldim. Bu yerda turli request related automationlar va testlar yozish mumkin. Sodda dialekt va nisbatan qulay user expirence.
Hurl: https://hurl.dev/
Ammo manashu mavzuda boshqa muammolar ko'ryabman.
Code alohida
test alohida
benchmark alohida
nu bazida doc alohida
Deyarli hamma ekotizimda manashu masalalarda end to end solutionlar yo'q. Lekin o'ylab qarasa bularni eplash mumkin.
Maslan manda uje tayyor api code bor juda ko'p holda maximum swagger generate qilib bera olaman. Ammo qani edi man birdan swagger generate qilolsam, test cover qilolsam.
Apilar doyim ham bitta stepli bo'lmaydi masalan A->B dan kegin C or D ko'rinishida ketmaketlik asosida bo'lishi mumkin bazida esa concurrency tog'ri ishlaganini ham test qilish kerak bo'ladi. Bular o'ziga yarasha nuansli masalalar. Bazi narsalar esa async ishlaydi, buni ham avtomatlashtirish qiyin chunki aniqroq constant tiime qo'ya olmaysiz.
Ammo servant bilan bunga potensial yechimlar qilsa bo'ladi. Masalan 10 yillar oldin servant-js kabi narsalar chiqib bo'lgan bu orqali apidan biratola js api callar generate qilishgan, bu haqida yozgan edim. Manashu g'oyani kengaytirish kerak, apidan avtomatik tarzda testlar va unga mos loading request ham generate qilib ko'rish kerak. O'ylaymanki tez orada manashu mavzuga ham yetib boraman ozgina zerikarli ammo juda qiziq mavzu.
System design haqida gap ketganda qiziq narsa bor.
Ko'pchilik turli yechimlarni ko'rib buni train qilish kerak deb o'ylaydi. Masalan bitta narsa qanday ishlashini o'rganish, tushunish uncha qiyin emasdek ko'rinadi. Juda ko'p holda muammoni katta qismini infrastructure levelda hal etiladi.
Masalan:
Transactional processing system - misolida olsak, bizga kerak bo'ladigan narsa qanaqadir event sourcing uchun muhit. Eventlarni saqlash va process qilishga yechimlar. Aytaylik kafka + kql da consistency qilsak event handlerlarni esa kafka + app levelda qivoramiz. Masalan consumer groups bilan concurrent handlerlar qilishimiz mumkin. Endi manashuni kengaytirish kerak bo'lsa shunchaki saga pattern kabi yechimlar qilamiz, aytaylik har bir servisda o'zini eventlarini process qiladigan yoki eventlarni ochrestrate qiladigan yechimlar qilishimiz mumkin. Agar 2ta servis birxil data saqalasa shunchaki transactional outbox kabi narsa kerak.
Yani bu keysda technical narsalar ancha kam asosiy masala domain aspectlarda bo'ladi. Aytilgan narsalarni katta qismiga infratuzulma darajasidagi yechimlar yetarli. Masalan appingizda load ko'paysa kubernetesga tiqib autoscaling setup qilasiz tamam. Kafkani ham tog'ri setup qilsangiz juda ko'p holda sizni muammoni cover qiladigan yechimlar tayyor bo'ladi.
Shunga ko'p gapiraman internetda aytilgan system design degan narsalar sizga vaybdan boshqa hechvaqo bermaydi. Realityda muammoni katta qismi operational levelda hal bo'ladi. Enterpraysda esa sizni technical skilldan ko'ra non technical skill usunroq. Yani senior bo'lishingiz uchun biror dasturlash tilini yaxshi bilganingizdan ko'ra ko'proq odamlar bilan gaplasha olishingiz muhimroq. Chunki agar raxbar yoki manageringizni so'kib qo'ysangiz biroz noqulay bo'ladi 😃
Real engineering problems sal boshqacharoq bo'ladi. U yerda doyim ham million foydalanuvchi uchun ishlaydigan crud yozmaysiz. Juda ham sodda aytganda shunchaki davomli fuckery qilasiz, davomli itariladi miyyangiz. Sababi doyim ham tayyor yechimlar bo'lmaydi yoki tayyori sizga mos kemaydi. Tayyorini modify qilishingiz kuchaytirishingiz kerak bo'ladi. Bushqa tomondan esa sizni kimdir perfomance tomondan itaradi kimdir esa abstraction tomondan. Ko'proq code yozish kerak bo'ladi biror technical scopeda yaxshi background qilish kerak bo'ladi. Hullas ishingiz kechirmaydi skill issuelarni. Doyim ham yaxshi gapirib qutilib ketolmaysiz, sizga comfort bo'lmagan odamlar bo'lishi mumkin atrofingizda.
Juda sodda aytsak enterpraysda siz mexanizmni bir qismi bo'lishingiz kerak, shunda trik qolasiz. Agar raxbarga yoqmasangiz chopilasiz.
Rostmana muxandis bo'lsangiz avtoritet bo'lishingiz kerak shunda trik qolasiz. Agar sal kalla qo'ysangiz avtoritet minus bo'ladi va davom etaversangiz uje chopilasiz.