Bosh sahifa Wiki Response type

Response type

Response type — xizmat yoki dastur chaqiruvining natijasi qanday ma’lumot shakli va semantik variantda qaytishini ifodalovchi tushuncha. Veb API’da u JSON obyekt, HTML, fayl, oqim yoki xato representationi bo‘lishi mumkin; dasturlash tilida esa funksiya return type’i yoki muvaffaqiyat-xato variantlarini qamrab olgan algebraik type bo‘lishi mumkin. Aniq response type producer va consumer o‘rtasidagi shartnomani mustahkamlaydi.

HTTP representation

HTTP’da media type Content-Type header orqali e’lon qilinadi. application/json, text/html, image/png va application/pdf clientga baytlarni qanday talqin qilishni bildiradi. Charset matn kodlashini aniqlaydi. Noto‘g‘ri content type brauzerning mazmunni taxmin qilishiga va ayrim holatda xavfsizlik muammosiga olib kelishi mumkin; X-Content-Type-Options: nosniff taxminni cheklaydi.

Client Accept header bilan qabul qiladigan response type’larni va ularning afzalligini ko‘rsatishi mumkin. Server mos variant topmasa 406 Not Acceptable qaytaradi yoki hujjatlashtirilgan defaultni tanlaydi. Bir URL HTML va JSON qaytarsa cache Vary: Accept orqali variantlarni ajratadi.

API schema

Typed API’da muvaffaqiyatli body modeli maydon, type va required qoidalar bilan aniqlanadi. Masalan, UserResponse ichki database modelining aynan nusxasi bo‘lmasligi kerak; password hash, internal flag va audit ustunlari tashqariga chiqmaydi. Response DTO public contractni domain obyektidan ajratadi.

Turli statuslar turli schema qaytarishi mumkin: 200 resurs, 400 validation problem, 404 not-found problem. OpenAPI har status va media type uchun schema ko‘rsatadi. Faqat “object” yoki erkin dictionary deb belgilash client generator va static tekshiruv foydasini kamaytiradi.

Dasturlash tilidagi model

Oddiy funksiya bitta return type beradi, exception esa alohida nazorat oqimi bo‘lishi mumkin. Result<Success, Error> kabi union muvaffaqiyat va kutiladigan xatoni type darajasida ifodalaydi. Caller barcha variantni pattern matching bilan ko‘rib chiqadi. nullni hamma xato uchun ishlatish sababni yo‘qotadi.

Generic response wrapper’da data, error va meta bo‘lishi mumkin. U izchillik beradi, lekin fayl yoki streaming response’ni majburan JSON envelope’ga solmaslik kerak. HTTP status va headerdagi ma’lumotni body’da qarama-qarshi takrorlash clientni qaysi manbaga ishonishda qiynaydi.

Oqim va binary natija

Katta faylni to‘liq xotirada qurish o‘rniga streaming response bo‘laklab yuboriladi. Return type stream yoki async iterator bo‘lishi mumkin. Content length noma’lum bo‘lsa protocol framing ishlatiladi. Client cancellation server generatoriga uzatilmasa keraksiz I/O davom etadi.

Range request media va katta downloadning bir qismini olish imkonini beradi. Response type byte oqimi bo‘lsa filename, content disposition, checksum va media type alohida headerlarda beriladi. JSON xato boshlang‘ich binary response ichiga qo‘shib yuborilmaydi; stream boshlanishidan oldingi xatolar standard status bilan qaytariladi.

Evolyutsiya

Yangi optional field odatda backward-compatible, ammo consumer unknown fieldni qabul qilishi kerak. Field type’ini stringdan numberga almashtirish, nullabilityni o‘zgartirish yoki enumga kutilmagan qiymat qo‘shish clientni buzishi mumkin. Contract test real provider javobini consumer kutgan schema bilan solishtiradi.

Brauzer clientidagi talqin

Fetch javobini json(), text(), blob() yoki arrayBuffer() bilan o‘qish consumer tanlovidir. Server xato holatida HTML qaytarib, client uni JSON deb parse qilsa asl sabab sintaksis xatosi ortida yashirinadi. Client avval status va Content-Typeni tekshiradi, keyin mos decoder chaqiradi. Bir body oqimini odatda faqat bir marta o‘qish mumkin; logging uchun clone ishlatilsa hajm xarajati hisobga olinadi.

Bog‘liq tushunchalar

Media type, Content negotiation, Data Transfer Object, API schema, Return type, Serialization, OpenAPI