Engineering Notes
2.56K subscribers
149 photos
5 files
217 links
Kanalda asosan backend engineeringga oid postlar yozib boriladi.

Ba'zi postlarda xatoliklar bor.
Postlar foydali bo’lgan bo’lsa adminni duo qilib qo’ying. Rahmat.

Contact: @Bobosher_Musurmonov
LinkedIn: https://www.linkedin.com/in/bobosher-musurmonov
Download Telegram
#savol

FastAPI nima?
U ham REST APIning bir qismimi?
Ikkalasining farqi nima?
Engineering Notes
#savol FastAPI nima? U ham REST APIning bir qismimi? Ikkalasining farqi nima?
#javob

Tushunarliroq qilishga harakat qilaman:

Bilasiz, API (boshlanishiga, faqat web APIlar haqida gaplashamiz) bizga ikki xil dastur/application orasida ma'lumot almashish uchun kerak. Masalan, frontend backend bilan ma'lumot almashishi uchun API ishlatamiz.

API ishlatish uchun esa ikkala taraf ham tushunadigan usulda ma'lumot almashish kerak. Masalan, siz Xitoy tilini bilmaysiz, u esa O'zbek tilini bilmaydi. Lekin ikkalangiz ham ingliz tilini bilsangiz bir-biringiz bilan gaplasha olasizlar.

Qaysi tilda va qanday usulda, qanday qoidalar asosida "gaplashish"ga qarab API ko'plab turlarga bo'linadi.

Web APIlar orasida eng keng tarqalgan turlaridan biri REST turidagi APIlar. RESTda ma'lumot almashish uchun JSON formatidan foydalaniladi. Va ma'lumotlarni qanday ko'rsatish va hokazo kabi bir qancha qoidalarni o'z ichiga oladi.
E'tibor bering, REST aynan bir dastur emas, balki API turi, aniqrog'i, qoidalar to'plami. Shu qoidalar asosida ishlaydigan APIlar esa REST API deyiladi.

Web uchun ishlatiladigan ko'plab dasturlash tillarida REST APIlar qurish va ulardan foydalana olish uchun texnologiyalar qurilgan. Pythonda ham bu bo'yicha yetarlicha librarylar bor.

Django standart holatda server-side renderingdan foydalanadi, REST API ishlatmaydi. Lekin Django bilan REST API qurish uchun Django REST Framework (DRF) nomni library(balki, framework, anig'ini bilmayman) bor. Qisqasi, u djangoda API qurish uchun "adapter" sifatida ishlaydi.

Boshqa python frameworklar esa standart holatda REST APIlar bilan ishlay oladi. Bulardan eng mashhurlari esa Flask va FastAPI. Ya'ni bular REST qoidalaridan foydalangan holda API qura oladigan frameworklar.

REST yagona web API turi emas. Yana eng mashhurlaridan GraphQL nomli API turi bor.
👍18
Forwarded from Uz Python Meetup (Журабек Абриев Т)
Hurmatli kanalimiz kuzatuvchilari, meetup qayerda va qachon bo'lishi haqida eslatib o'tmoqchimiz!

Bosh hamkorimiz: INNO Innovatsion o'quv va ishlab chiqarish texnoparki

Ro'yxatdan o'tish: https://forms.gle/HdHDVzN7Tt6mLnBi6

Manzil : INNO Innovation texnoparki

Batafsil ma'lumot: 👉 @UzPythonMeetup

Bu yangilikni do'stlarga ulashishni unutmang 😉
Forwarded from Uz Python Meetup (Журабек Абриев Т)
Beshinchi mavzuimiz va spikerimiz bilan tanishing

👉 @UzPythonMeetup
#joke

— Why database engineers always have lunch together?
— Because, they like joining tables.
Forwarded from Uz Python Meetup (Журабек Абриев Т)
https://instagram.com/uzpythondeveloperscommunity Manashu Instagram sahifamizda jonli efirdamiz
Cloud texnologiyalari haqida yaxshi ma'lumotlar berib boradigan YouTube kanali ekan:
https://youtube.com/c/BeABetterDev
Creating 3 brand new problems instead of dealing with one problem and calling this a solution.
This is what engineering is all about.
👍7
Forwarded from Sardor Dushamov | PHP
HTTPS qanday ishlaydi?

Hypertext Transfer Protocol Secure (HTTPS) shifrlangan ma'lumotlarni Transport Layer Security (TLS) yordamida uzatadi.

Ma'lumotlar qanday shifrlanadi va deshifrlanadi?

1-qadam. Client (browser) va server TCP orqali o'rnatadi.

2-qadam. Client serverga "Client Hello" xabarini yuboradi. Xabarda kerakli shifrlash algoritmlari (cipher suites) va u qo'llab-quvvatlashi mumkin bo'lgan so'nggi TLS versiyasi mavjud. Server "Server Hello" javobni beradi, shundan keyin Browser algoritmlar va TLS versiyasini qo'llab-quvvatlashi mumkinligi haqida xabar topadi.

Keyin server clientga SSL sertifikatini yuboradi. Sertifikatda ochiq kalit, host nomi, amal qilish muddati va boshqalar mavjud. Client sertifikatni tasdiqlaydi.

3-qadam. SSL sertifikatini tekshirgandan so'ng, client session key generate qiladi va uni ochiq kalit(public key) yordamida shifrlaydi. Server shifrlangan session keyni oladi va uni private key bilan deshifrlaydi.

4-qadam – Endi client ham, Server ham bir xil session keyga ega (simmetrik shifrlash), shifrlangan maʼlumotlar xavfsiz bi-directional kanalda uzatiladi.

Nima uchun HTTPS ma'lumotlarni uzatishda simmetrik shifrlashga o'tadi? Ikkita asosiy sabab bor:

1. Xavfsizlik: assimetrik shifrlash faqat bitta yo'l bilan amalga oshiriladi. Bu shuni anglatadiki, agar server shifrlangan ma'lumotlarni clientga qaytarib yuborishga harakat qilsa, har kim ochiq kalit(public key) yordamida ma'lumotlarning shifrini ochishi mumkin.

2. Server resurslari: assimetrik shifrlash juda ko'p matematik yuklarni qo'shadi. Bu uzoq seanslarda ma'lumotlarni uzatish uchun mos emas.


Alex Xu sahifasidan olib tarjima qilindi
👍10
Dasturlash olamiga chuqur kirib ketganingda hamma narsa dasturlashga o'xshab qoladi...

P.S. Oddiy bolalar qo'shig'idagi shuncha falsafani qarang 😁
👍6
Dependency injection prinsipiga amal qilib kod yozish testlash jarayonini ancha osonlashtiradi.
Sinab ko'ring.
Forwarded from Engineering Notes
#yaxshi_savol

PostgreSQL bilan ishlaganda, deylik siz bir ma'lumotni UPDATE yoki DELETE qildingiz.
Lekin shu vaqtning o'zida eski qiymat ham tabledan o'chib ketmaydi.

Masalan, sizda
id INT, name VARCHAR
columnlaridan iborat persons table bor.
Deylik, unda 1 ta row: (1, 'John') bor.
Keyin siz uni yangiladingiz:
UPDATE persons
SET name = 'Doe'
WHERE id = 1;


Yoki o'chirib yubordingiz:
DELETE FROM persons
WHERE id = 1;


Lekin ikki holda ham eski qiymat, ya'ni (1, 'John') xotiradan o'sha vaqtning o'zida o'chib ketmaydi.

Savol: Eski qiymatlarni xotirada vaqtinchalik saqlab qolish nima uchun kerak va buning qanday negativ natijalari bo'lishi mumkin?

Javoblarni iloji boricha batafsil yozib, discussionda qoldirishingiz mumkin.
👍3
Forwarded from Engineering Notes
#savol
Webhook nima va qanday qulayliklar yaratib beradi?
Forwarded from Engineering Notes
Telegram botlar qanday ishlashini tushunish uchun polling, webhook nima,
ular nega kerak kabi savollarga javob topsak.

User telegramda botga biror buyruq yuborganda, unga javob qaytishi uchun bu buyruq biz yozgan kodimiz turgan servergacha yetib kelishi kerak va server unga javob qaytarishi kerak. User yuborgan buyruqlar telegramning serveriga borib tushadi. Endi o'sha serverga kelgan buyruqlarni bizning serverimizga yetkazish kerak. Lekin telegram aynan o'sha bot uchun yozilgan bizning kodimiz qayerda turganini qanday biladi?

Telegram botlar uchun HTTP protocolidan foydalanadi. Muammo shundaki, HTTP bir tomonlama ishlaydi(push/promisedan tashqari). Ya'ni faqat bir tomon(client) request yuboradi, ikkinchi taraf(server) uni qabul qilib, response qaytaradi.
Bu degani, server xohlagan paytida clientga response yubora olmaydi. Faqatgina client request yuborgandan keyingina response yuborish mumkin.

Bizning server bilan telegram server orasida ma'lumot almashishning ikki yo'li bor:
1. Bizning server HTTP client, telegram serveri esa HTTP server vazifasini bajaradi.
2. Telegram serveri HTTP client, bizning server esa HTTP server vazifasini bajaradi.


1. Deylik, user telegram botga biror buyruq yubordi. Telegram serveri bu buyruqni to'g'ridan to'g'ri bizning serverga yubora olmaydi. Sababi, yuqorida kelishganimizdek, faqat client birinchi bo'lib ma'lumot yubora oladi. Telegram server esa hozir HTTP server rolini o'ynayapti. Plus, telegram biz qaysi bot haqida so'rayotganimizni ham bilmaydi. Demak, avval client so'rov yuborishi kerak.
Lekin client qachon so'rov yuborish kerakligini(telegramga yangi buyruq kelganini) qanday biladi?
Javob — hech qanday. Shunchaki ma'lum vaqt oraligi bilan telegram serveriga to'xtovsiz request yuborib turadi. Botga yangi buyruq kelsa, telegram keyingi safar bizning serverdan request kelganda uni response qilib yuboradi. Bu taxminan mana bunday bo'ladi:

Client: Falonchi bot uchun yangi buyruq bormi?
Telegram: Yo'q
*ozgina vaqt o'tgach*
C: Bormi?
T: Yo'q
C: Bormi?
T: Ha, mana, ol. *Buyruqni yuboradi*
C: *Buyruqqa javob qaytarib, request shaklida yuboradi*
T: Oldim.
C: Bormi?
T: Yo'q
...

Mana shu usul, ya'ni bizning server ma'lum vaqt oralig'i bilan to'xtovsiz telegramdan so'rab turishi polling deyiladi.


2. Endi bizning server HTTP server vazifasini bajarib, Telegram serveri HTTP client rolini o'ynab beradi. Endi telegram client sifatida buyruqlarni to'g'ridan-to'g'ri bizga yubora oladi. Lekin buning uchun ikkita shart bajarilishi kerak:
1. Telegram bizning serverning manzilini bilishi.
2. Bizning server web server sifatida ishlashi, ya'ni requestlarni qabul qilishi kerak.

Buning uchun boshda Pashka akaning serverlariga "Falonchi botga kelgan buyruqlarning hammasini falonchi adressdagi serverga request qilib yubor" degan ma'noda xabar berib qo'yamiz. O'zimizning serverimizni esa web serverga aylantiramiz.

Endi faqat yangi buyruq kelgandagina telegram bizning serverimizga request yuboradi:

Telegram: Uka, botingga yangi buyruq keldi. Ma, ol.
Bizning server: *qayta ishlab, natijani yuboradi*.
*keyingi safar buyruq kelganda*
Telegram: Yangi buyruq. Ma, ol.
...

Mana bu usul, yani telegram bizning serverga request yuborishi esa webhook deyiladi.
👍24