API nima?
Ilovangizda ob-havo ma'lumoti kerak. Siz meteorologiya bazasi qurmaysiz — mavjud ob-havo servisidan ma'lumot olasiz. Buning uchun o'sha servis sizga API beradi.
API (Application Programming Interface) — dasturlar o'rtasidagi shartnoma. U "qanday so'rov yuborish kerak va qanday javob keladi" degan qoidalarni belgilaydi.
Restoran analogiyasi: siz oshpazga to'g'ridan-to'g'ri kirmaysiz. Ofitsiant (API) sizning buyurtmangizni qabul qiladi, oshpazga (server/baza) yetkazadi va taomni olib keladi. Siz oshxonadagi jarayonni bilmasangiz ham bo'laveradi.
REST nima?
Bugungi kunda eng keng tarqalgan API uslubi — REST (Representational State Transfer). Bu HTTP protokoli ustidagi qoidalar to'plami.
REST da har bir narsa resurs. Resurs — URL orqali manzillanadi:
/users → foydalanuvchilar
/users/42 → 42-foydalanuvchi
/users/42/posts → 42-foydalanuvchining postlari
/products → mahsulotlar
/products/7 → 7-mahsulot
Resurs ustida nima qilish kerakligini esa HTTP metodi belgilaydi.
HTTP metodlari
| Metod | Nima qiladi | Misol |
|---|---|---|
GET |
Ma'lumot olish | Foydalanuvchilar ro'yxatini olib keling |
POST |
Yangi yozuv yaratish | Yangi foydalanuvchi qo'shing |
PUT |
Yozuvni to'liq yangilash | Foydalanuvchini qayta yozing |
PATCH |
Yozuvni qisman yangilash | Faqat emailni o'zgartiring |
DELETE |
Yozuvni o'chirish | Foydalanuvchini o'chiring |
Bir xil URL, turli metodlar — turli amallar:
GET /users → barcha foydalanuvchilarni olish
POST /users → yangi foydalanuvchi yaratish
GET /users/42 → 42-foydalanuvchini olish
PUT /users/42 → 42-foydalanuvchini yangilash
DELETE /users/42 → 42-foydalanuvchini o'chirish
HTTP status kodlari
Server javobining birinchi satridagi raqam — status kodi. U so'rov muvaffaqiyatli bo'lganligini bildiradi.
| Diapazon | Nima | Misollar |
|---|---|---|
2xx |
Muvaffaqiyat | 200 OK, 201 Created, 204 No Content |
3xx |
Yo'naltirish | 301 Moved Permanently, 302 Found |
4xx |
Klient xatosi | 400 Bad Request, 401 Unauthorized, 404 Not Found |
5xx |
Server xatosi | 500 Internal Server Error, 503 Service Unavailable |
Eng ko'p ishlatilganlar:
200 OK → So'rov bajarildi
201 Created → Yangi resurs yaratildi (POST dan keyin)
204 No Content → Bajarildi, javob tanasi yo'q (DELETE dan keyin)
400 Bad Request → So'rov noto'g'ri (validatsiya xatosi)
401 Unauthorized → Autentifikatsiya talab qilinadi
403 Forbidden → Ruxsat yo'q
404 Not Found → Resurs topilmadi
500 Internal Server Error → Serverdagi kutilmagan xato
JSON — API tili
REST API lar ma'lumotni odatda JSON (JavaScript Object Notation) formatida uzatadi. JSON matn formatida, lekin tuzilgan:
{
"id": 42,
"ism": "Ali Karimov",
"email": "[email protected]",
"faol": true,
"yosh": 28
}
Ro'yxat:
JSON deyarli barcha dasturlash tillari tomonidan qo'llab-quvvatlanadi. Go'da encoding/json paketi JSON bilan ishlashni ta'minlaydi.
Go'da oddiy API server
Dasturni ishga tushirib, http://localhost:8080/users ga kirsangiz:
Ikki yangi narsa:
w.Header().Set("Content-Type", "application/json") — klientga javob JSON formatida ekanligini bildiradi. Brauzer va boshqa dasturlar bu sarlavhaga qarab ma'lumotni qanday qayta ishlashni biladi.
json.NewEncoder(w).Encode(users) — Go strukturasini JSON ga aylantirib, to'g'ridan-to'g'ri javobga yozadi.
Metodga qarab ishlash
Bir yo'l (/users) turli metodlarga turlicha javob berishi kerak:
GET /users — ro'yxatni qaytaradi.
POST /users — tanadan yangi foydalanuvchini o'qib, qo'shadi va 201 Created qaytaradi.
Boshqa metodlar — 405 Method Not Allowed.
Note
http.Error(w, "xabar", statusKod) — xato javobini yuborish uchun qulay funksiya. U status kodini va matnni birga yozadi.
Sarlavhalar (Headers)
Sarlavhalar — so'rov va javob haqida meta-ma'lumot. Tanadan alohida yuboriladi.
Ko'p uchraydigan sarlavhalar:
Content-Type: application/json → tananing formati
Authorization: Bearer <token> → autentifikatsiya
Accept: application/json → klient qanday format qabul qiladi
Cache-Control: no-cache → kesh sozlamalari
Go'da so'rov sarlavhasini o'qish:
Javobga sarlavha qo'shish:
API vs Web server
Farq nima?
| Web server | API server |
|---|---|
| HTML sahifalar qaytaradi | JSON ma'lumot qaytaradi |
| Brauzer uchun | Dastur uchun (brauzer, mobil, boshqa server) |
| Foydalanuvchi ko'radi | Dastur qayta ishlaydi |
Ko'p zamonaviy ilovalar ikkalasini birlashtiradi: frontend (React, Vue) alohida ishlaydi, backend faqat API qaytaradi. Bu SPA + API arxitekturasi.
Keyingi qadam
Bu darsda API ning asosiy tushunchalari — resurs, metod, status kodi, JSON — ko'rildi. Keyingi darslarda Go'da to'liqroq router (gorilla/mux), JSON validatsiya, autentifikatsiya va boshqalarni ko'ramiz.