10-modul · 3-dars: External API

Daraja: Ilg'or

External API. Advanced backend bo‘yicha nazariya, amaliy namuna va mustaqil mashq.

Tushuntirish

## Dars maqsadi External API tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.

## Nazariya External API boshqa tizim ma'lumot yoki xizmatidan foydalanishdir. Tashqi server javob bermasligi, sekinlashishi, 429/5xx qaytarishi yoki noto'g'ri JSON berishi mumkin. Connection/read timeout, aniq response modeli, xato klassifikatsiyasi va kuzatuv bo'lmasa bitta dependency sizning request poolingizni tugatishi mumkin. RestTemplate sinxron HTTP client uslubini, WebClient reaktiv va non-blocking oqimni beradi. Zamonaviy Springda RestClient sinxron fluent variantdir; qaysi API qo'llanishi loyiha versiyasiga bog'liq. OpenFeign deklarativ interface asosidagi integratsiya, Traverson esa hypermedia link relationlarini kuzatishga xizmat qiladi. WebClientga darhol block qo'shish uni amalda sinxron qiladi. Retry faqat vaqtinchalik xato va xavfsiz/idempotent amal uchun bounded bo'lsin. Backoff va jitter qo'shing, Retry-Afterga hurmat qiling. POSTni takrorlash dubl buyurtma yaratishi mumkin. URLni userdan to'liq olib serverdan fetch qilish SSRF xavfi; allowlist va tarmoq cheklovi qo'llang. Tashqi tokenni logga yozmang.

## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/10-module%28Spring%20Boot%20Part%20%7C%7C%29.md) [Rasmiy qo‘llanma](https://docs.spring.io/spring-boot/reference/)

Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.

Kod misoli

var client = java.net.http.HttpClient.newBuilder()
  .connectTimeout(java.time.Duration.ofSeconds(3)).build();
var request = java.net.http.HttpRequest.newBuilder(
  java.net.URI.create("https://example.com"))
  .timeout(java.time.Duration.ofSeconds(5)).GET().build();
// client.send(request, HttpResponse.BodyHandlers.ofString())
// Status, body size va parse xatolarini tekshiring.

Keng tarqalgan xatolar

Mashqlar

Teglar: pdp, modul-10, nazariya

Interaktiv ko'rinish (viktorina, izohlar, tarix)