GetAnalyst - ΠΠ°Π²ΡΠΊΠΈ β’ Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· β’ ΠΠΈΠ·Π½Π΅Ρ-Π°Π½Π°Π»ΠΈΠ·
Π Π°Π·Π±ΠΎΡ Π·Π°Π΄Π°Ρ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌ π ΠΠ°Π½Π°Π» Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΎΠ², Π±ΠΈΠ·Π½Π΅Ρ-Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΎΠ², ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ² ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΠ΄ΠΌΠΈΠ½ @getanalyst Π‘Π°ΠΉΡ https://getanalyst.ru Π§Π°Ρ t.me/getanalystchat ΠΠ°ΡΠΈΠ½Π°ΡΡΠΈΠΌ Π² IT @getanalyststart
Ko'proq ko'rsatishπ Telegram kanali GetAnalyst - ΠΠ°Π²ΡΠΊΠΈ β’ Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· β’ ΠΠΈΠ·Π½Π΅Ρ-Π°Π½Π°Π»ΠΈΠ· analitikasi
GetAnalyst - ΠΠ°Π²ΡΠΊΠΈ β’ Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· β’ ΠΠΈΠ·Π½Π΅Ρ-Π°Π½Π°Π»ΠΈΠ· (@getanalysts) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 22 668 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 5 839-o'rinni va Rossiya mintaqasida 28 992-o'rinni egallagan.
π Auditoriya koβrsatkichlari va dinamika
Π½Π΅Π²ΡΠ΄ΠΎΠΌΠΎ sanasidan buyon loyiha tez oβsib, 22 668 obunachiga ega boβldi.
26 Oktabr, 2026 dagi oxirgi maβlumotlarga koβra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 151 ga, soβnggi 24 soatda esa 13 ga oβzgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya oβrtacha 13.26% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 7.76% ini tashkil etuvchi reaksiyalarni toβplaydi.
- Post qamrovi: Har bir post oβrtacha 3 005 marta koβriladi; birinchi sutkada odatda 1 758 ta koβrish yigβiladi.
- Reaksiyalar va oβzaro taβsir: Auditoriya faol: har bir postga oβrtacha 38 ta reaksiya keladi.
- Tematik yoβnalishlar: Kontent api, Π±ΡΠΎΠΊΠ΅Ρ, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°, oauth, ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² kabi asosiy mavzularga jamlangan.
π Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida taβriflaydi:
βΠ Π°Π·Π±ΠΎΡ Π·Π°Π΄Π°Ρ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌ π ΠΠ°Π½Π°Π» Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΎΠ², Π±ΠΈΠ·Π½Π΅Ρ-Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΎΠ², ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ² ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
ΠΠ΄ΠΌΠΈΠ½ @getanalyst
Π‘Π°ΠΉΡ https://getanalyst.ru
Π§Π°Ρ t.me/getanalystchat
ΠΠ°ΡΠΈΠ½Π°ΡΡΠΈΠΌ Π² IT @getanalyststartβ
Yuqori yangilanish chastotasi (oxirgi maβlumot 27 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli boβlib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim taβsir nuqtasiga aylantirishini koβrsatadi.
ΠΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ°?! Π― ΡΠ°ΠΏΠΎΠΆΠ½ΠΈΠΊ Π±Π΅Π· ΡΠ°ΠΏΠΎΠ³!!! ΠΠ»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Ρ Ρ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ΠΌ ΠΈΡΡΠ»Π΅Π΄ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Ρ ΠΈΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ Π°Π³Π΅Π½ΡΠΎΠ². ΠΠ½Π΅ Π·Π° ΡΡΠΎ ΠΏΠ»Π°ΡΡΡ π€ Π ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΈΠ½Ρ, Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅: Β«Π‘Π΅ΠΉΡΠ°Ρ Π±ΡΡΡΡΠ΅Π΅ ΡΠ΄Π΅Π»Π°Ρ Π²ΡΡΡΠ½ΡΡ, Π° Π°Π³Π΅Π½ΡΠ° Π½Π°ΡΡΡΠΎΡ ΠΏΠΎΡΠΎΠΌΒ».Π ΡΡΠΎ Β«ΠΏΠΎΡΠΎΠΌΒ» ΠΌΠΎΠΆΠ΅Ρ Π΄Π»ΠΈΡΡΡΡ ΠΌΠ΅ΡΡΡΠ°ΠΌΠΈ π π ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΌΠ΅Π½Ρ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ° ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ Ρ ΠΎΡΡ Π±Ρ ΡΠ°Π· Π² ΠΌΠ΅ΡΡΡ, Ρ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ½ΠΎΠ²Π° Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡ, Π° ΡΠ½Π°ΡΠ°Π»Π° Π΄ΡΠΌΠ°Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°ΡΡ Π΅Ρ AI-Π°Π³Π΅Π½ΡΡ. Π ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΏΠ°ΡΡ Π½Π΅Π΄Π΅Π»Ρ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°Π΄Π°ΡΠΊΡ Π½Π° 4 ΡΠ°ΡΠ°, Ρ ΡΡΠ°ΡΠΈΠ»Π° Π²ΡΠ΅ 8-12: 1. ΡΠ°Π·Π±ΠΈΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎ ΡΠ°Π³Π°ΠΌ 2. ΡΠΎΠ±ΠΈΡΠ°Ρ AI-Π°Π³Π΅Π½ΡΠ° ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ 3. ΡΠ΅ΡΡΠΈΡΡΡ, Π½Π°Ρ ΠΎΠΆΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΡΠ²Π°Ρ Π Π½Π΅Ρ, ΡΡΠ°Π·Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ. ΠΠ°ΠΎΠ±ΠΎΡΠΎΡ, ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅. ΠΠ°ΡΠΎ! ΠΠ°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΌΠ°Π΅ Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π»Π° Π΄ΠΎΠ²Π΅ΡΠΈΡΡ AI, ΡΠ΅ΠΉΡΠ°Ρ Π°Π³Π΅Π½ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ. βΌοΈ Π Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ»ΠΎΠΆΠΈΡΡ ΡΠ΅ΠΊΡΡΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΡΠ½ΡΡΡ ΡΠ΅Π±Ρ Π½Π°Π³ΡΡΠ·ΠΊΡ, ΡΡΠΎΠ±Ρ Π΄Π΅Π»Π°ΡΡ AI-Π°Π³Π΅Π½ΡΠΎΠ². Π― ΡΡΠ°ΡΡ Π½Π° ΡΡΠΎ Π»ΠΈΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. ΠΠΈΠ½ΡΡ ΡΠΎΠ½, ΠΌΠΈΠ½ΡΡ Π·Π°Π», ΠΌΠΈΠ½ΡΡ ΠΎΡΠ΄ΡΡ π€¬π‘π ΠΠΎΠΉ ΡΠΈΡΠ½Π΅Ρ-Π±ΡΠ°ΡΠ»Π΅Ρ Π²Π΅ΡΡ ΠΊΡΠ°ΡΠ½ΠΎ-ΠΆΡΠ»ΡΡΠΉ ΠΏΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (ΡΡΠΎ ΠΏΠ»ΠΎΡ ΠΎ), Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΡΠ½Π° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π²ΠΎΡΠΏΠΎΠ»Π½ΡΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅. ΠΠ΅Ρ, ΡΡΠΎ Π½Π΅ ΡΠ° ΡΠ°ΡΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ. ΠΠΎ Π±Π»ΠΈΠ½. ΠΠ΅ΡΠΈΡ. ΠΠ½Π°ΡΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΎΡΡ. ΠΡΠΎΠ³ΠΎ, Π΄Π΅Π»Π°Ρ Π³Π»Π°Π²Π½ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ: β«οΈ Π‘Π°ΠΌΠΎΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ β Π½Π΅ Π²ΡΠ±ΡΠ°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠΌΠΏΡ ΠΈΠ»ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π°Π³Π΅Π½ΡΠ°Ρ . β«οΈ Π‘Π°ΠΌΠΎΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ β Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΠΈ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈ Π½Π°ΠΉΡΠΈ Π½Π° ΡΡΠΎ Π²ΡΠ΅ΠΌΡ+Π²Π΄ΠΎΡ Π½ΠΎΠ²Π΅Π½ΠΈΠ΅. ΠΠ»Ρ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΈΠΌ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΠΎΠ½Π½ΡΠΌ ΠΏΠΈΠ½ΠΊΠΎΠΌ ΡΡΠ°Π»Π° ΡΡΡΠ±Π° Π² Π£Π½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ΅ ΠΠΆΠΎΠ½ΡΠ° Π₯ΠΎΠΏΠΊΠΈΠ½ΡΠ° π Π‘Π΅ΠΉΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π³Π΅Π½ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°Ρ ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΏΡΡΠΌΠΎ Π²Π½ΡΡΡΠΈ ChatGPT ΠΈΠ»ΠΈ Claude. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠΎΡΠ΅. ΠΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°ΠΏ - ΡΠΎΠ·Π΄Π°ΡΡ CEO-Π°Π³Π΅Π½ΡΠ°: ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ Π°Π³Π΅Π½ΡΠΎΠ² π ΠΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡ ΡΡΠΎΡ ΡΡΠΌΠ°ΡΡΠ΅Π΄ΡΠΈΠΉ ΠΌΠ΅ΡΡΡ, Π² ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ΅ΡΠΈΠ»Π° Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ. ΠΠ° ΡΡΠΎΠΌ ΠΏΠΎΡΡ Π½ΡΡΡΡ ΠΎΠΊΠΎΠ½ΡΠ΅Π½. ΠΡΡΠ°Π²Π°ΠΉΡΠ΅ΡΡ, ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΡΡ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΎΠΊΡΠΏΠΈΠ»ΠΈΡΡ Π»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π΅Π½Π΅Π³ Π² ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ β ΠΈ Π½Π°ΡΠ°Π»Π° Π»ΠΈ Ρ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ π₯²π π± Tg | π ΠΠ | π¬ Max
ΠΠ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ Π΄ΡΠΌΠ°ΡΡ. ΠΠΎ Π°Π½Π°Π»ΠΈΡΠΈΠΊ Ρ ΠΠ Π±ΡΠ΄Π΅Ρ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Π½Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΊΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π²ΡΡ Π΄Π΅Π»Π°ΡΡ Π²ΡΡΡΠ½ΡΡ πΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡΠ΅ΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π½Π΅Π΄Π΅Π»Π΅! π± Tg | π ΠΠ | π¬ Max
GET /documents/4831
ΠΡΠ²Π΅Ρ:
HTTP/1.1 200 OK
ETag: "17"
Content-Type: application/json
{
"name": "ΠΠ΅ΡΡΠΈΡ 0",
"number": "123/9364",
"text": "Π’ΡΡ ΡΠ΅ΠΊΡΡ ...."
}
ΠΠ±Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π²Π΅ΡΡΠΈΠΈ ETag: "17".
π ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ETag Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ If-Match, Π² ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
ΠΠ°ΠΏΡΠΎΡ:
PATCH /documents/4831
If-Match: "17"
Content-Type: application/json
{
"name": "ΠΠ΅ΡΡΠΈΡ ΠΎΡ ΠΠ΅ΡΠΈ",
"number": "123/9364",
"text": "Π’ΡΡ ΡΠ΅ΠΊΡΡ ...."
}
Π‘Π΅ΡΠ²Π΅Ρ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ API Π·Π°ΠΏΡΠΎΡΠ°:
1οΈβ£ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π² API, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ ETag=17
2οΈβ£ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π² ΠΠ, ΡΡΠΎ ETag ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°
3οΈβ£ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΠ
4οΈβ£ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ Π½Π° Π·Π°ΠΏΡΠΎΡ Ρ Π½ΠΎΠ²ΡΠΌ ETag:
HTTP/1.1 204 No Content
ETag: "18"
ΠΈ ΡΠ΅Π»ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ°, ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
π ΠΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, Π½ΠΎ ΡΠΆΠ΅ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡ
ΠΠ³ΠΎ Π·Π°ΠΏΡΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ETag Π²ΡΡ Π΅ΡΡ 17, Ρ
ΠΎΡΡ ΠΏΠΎ ΡΠ°ΠΊΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΆΠ΅ ΠΏΡΠΈΠ½ΡΡΠΎ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΈ.
ΠΠ°ΠΏΡΠΎΡ:
PATCH /documents/4831
If-Match: "17"
Content-Type: application/json
{
"name": "ΠΠ΅ΡΡΠΈΡ ΠΎΡ ΠΠ°ΡΡΠΈ",
"number": "123/9364",
"text": "Π’ΡΡ ΡΠ΅ΠΊΡΡ ...."
}
ΠΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ETag: "18" ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (ΠΠ΅ΡΠΈ).
Π‘Π΅ΡΠ²Π΅Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π‘Π΅ΡΠ²Π΅Ρ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ API Π·Π°ΠΏΡΠΎΡΠ°:
1οΈβ£ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π² API, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ ETag=17
2οΈβ£ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠΎ ΠΠ ΡΠ΅ΠΊΡΡΡΡ Π²Π΅ΡΡΠΈΡ, Π° ΡΠ°ΠΌ ΡΠΆΠ΅ 18
3οΈβ£ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ:
HTTP/1.1 412 Precondition Failed
Content-Type: application/json
{
"errorCode": "VERSION_CONFLICT",
"message": "ΠΠΎΠΊΡΠΌΠ΅Π½Ρ Π±ΡΠ» ΠΈΠ·ΠΌΠ΅Π½ΡΠ½ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.",
"traceId": "2a48c7..."
}
ΠΠ»ΠΈΠ΅Π½ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π°Π΄ΠΎ:
1. ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° GET /documents/4831
2. ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°Π²Π½ΠΈΡΡ Π²Π΅ΡΡΠΈΠΈ: ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π½Π°ΡΠ°ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π½ΠΎΠ²ΠΎ
βοΈ ΠΠ΅Π»ΡΠ·Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ
Ρ ETag=18 ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ Π½ΠΎΠ²ΡΠΌ ETag: ΡΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΠ΅ΡΠ΅ΡΡ ΡΡΠΆΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅.
π ΠΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
β
If-Match ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ETag
β Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Π΅ΡΠ½ΡΡΡ Π½ΠΎΠ²ΡΠΉ ETag
β If-Match Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ
β Π²Π΅ΡΠ½ΡΡΡ 412 Precondition Failed ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ΅ΡΡΡΡ
β οΈ If-Match ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, Ρ
ΠΎΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ
β ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ 428 Precondition Required, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠΌ API
Π‘Π°ΠΌΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ETag Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°: Π΅Π³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ Π²ΡΡΠΈΡΠ»ΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ GET /resources/{id} ΠΈ Π²Π΅ΡΠ½ΡΡΡ Π΅Π³ΠΎ Π² If-Match Π΄Π»Ρ PATCH /resources/{id} Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
π ΠΠΎΡΠ΅ΠΌΡ Π·Π΄Π΅ΡΡ HTTP-412, Π° Π½Π΅ HTTP-409?
412 Precondition Failed ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΎΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° If-Match.
409 Conflict ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ»ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠ°Π²ΠΈΠ», Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
π ΠΠ΄Π΅ Ρ
ΡΠ°Π½ΠΈΡΡΡ ETag Π² ΠΠ?
Π‘Π°ΠΌ ETag ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π² ΠΠ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ ETag: "18".
Π ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠ° Ρ
ΡΠ°Π½ΠΈΡΡΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π²Π΅ΡΡΠΈΠΈ:
ΡΠ°Π±Π»ΠΈΡΠ° document
βββ
id: 4831
name: ΠΠ΅ΡΡΠΈΡ 0
version: 17
updated_at: ...
βββ
Π ΠΏΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΡΠ΅ΠΊ-Π»ΠΈΡΡ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΏΠΈΠ»ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² ΠΎΡ GetAnalyst π€
#RestApiGARange
ΠΠΎ ΡΡΠΎ Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅.
π ΠΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ°ΠΉΠ»Π°
ΠΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°:
GET /files/4831/content
Π‘Π΅ΡΠ²Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΡΠ°Π²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠΈΡΠ°ΡΡ ΡΠ°ΠΉΠ» ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π±Π°ΠΉΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ.
ΠΠΌΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π²Π΅ΡΡ ΡΠ°ΠΉΠ» Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ²Π΅Ρ.
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="report.pdf"
Content-Length: 5242880
%PDF-1.7...
ΠΠ»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΡΠ½ΡΠΉ HTTP-ΠΎΡΠ²Π΅Ρ ΡΠΎ Π²ΡΠ΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΡΠ°ΠΉΠ»Π°.
ΠΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΈΡΠ°Π΅Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠΎ Π½Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΎΡΠ²Π΅ΡΠ° ΠΈ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΉΠ» ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΡΠ°ΡΡΡΠΌΠΈ.
π ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ HTTP-ΠΎΡΠ²Π΅Ρ ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅Π·Π°Π²Π΅ΡΡΡΠ½Π½ΡΠΌ, Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ β Π°ΠΊΡΠΈΠ²Π½ΡΠΌ, ΠΏΠΎΠΊΠ° ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²Π΅ΡΡ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π½Π΅ ΠΏΡΠ΅ΡΠ²ΡΡΡΡ.
π ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΡΠ°ΡΡΡΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Range
ΠΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π°, ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Range:
GET /files/4831/content
Range: bytes=0-1048575
Π’Π°ΠΊΠΎΠΉ Π·Π°ΠΏΡΠΎΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ:
π‘ Π²Π΅ΡΠ½ΡΡΡ Π±Π°ΠΉΡΡ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 0 ΠΏΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΡ 1048575.
Π‘Π΅ΡΠ²Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ Π²Π΅ΡΡ ΡΠ°ΠΉΠ», Π° ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:
HTTP/1.1 206 Partial Content
Content-Type: application/pdf
Content-Disposition: attachment; filename="report.pdf"
Accept-Ranges: bytes
Content-Range: bytes 0-1048575/5242880
Content-Length: 1048576
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° headers:
β«οΈ 206 Partial Content β Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π°
β«οΈ Accept-Ranges: bytes β ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ Π±Π°ΠΉΡΠΎΠ²
β«οΈ Content-Range β ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π³ΡΠ°Π½ΠΈΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΡΠ½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΈ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°
β«οΈ Content-Length β ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΡΠ°ΡΡΠΈ, Π° Π½Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Range Π½ΡΠΆΠ½Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ:
β«οΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅ΡΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ
β«οΈ ΠΏΠ΅ΡΠ΅ΠΌΠΎΡΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ Π°ΡΠ΄ΠΈΠΎ
β«οΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΡΡΠ΅ΠΉ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
β«οΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ
π Π§ΡΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅
ΠΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΠΎΡΠΈΠ» Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΡΠ°ΠΉΠ»Π΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ:
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */5242880
Π§ΠΈΡΠ»ΠΎ ΠΏΠΎΡΠ»Π΅ / ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π»ΡΠ·Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ Π±Π°ΠΉΡΡ Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 6000000, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ 5242880 Π±Π°ΠΉΡ.
π ΠΠ°ΠΊΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π½Π°Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ
Content-Type β ΡΠΎΡΠΌΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
Content-Type: application/pdf
Content-Disposition β ΠΊΠ°ΠΊ Π±ΡΠ°ΡΠ·Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΉΠ»:
Content-Disposition: attachment; filename="report.pdf"
attachment ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΊΠ°ΡΠ°ΡΡ ΡΠ°ΠΉΠ».
ΠΡΠ»ΠΈ ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠΊΡΡΠ²Π°ΡΡΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
Content-Disposition: inline; filename="report.pdf"
Content-Length β ΡΠ°Π·ΠΌΠ΅Ρ Π²ΡΠ΅Π³ΠΎ ΠΎΡΠ²Π΅ΡΠ° Π² Π±Π°ΠΉΡΠ°Ρ
:
Content-Length: 5242880
Π ΠΎΡΠ²Π΅ΡΠ΅ 206 Partial Content ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠ°ΠΉΠ»Π°.
Accept-Ranges β ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΡΠ°ΡΡΡΠΌΠΈ:
Accept-Ranges: bytes
Content-Range β ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΡΠ½:
Content-Range: bytes 0-1048575/5242880
π ΠΠ°ΠΊ ΠΎΠΏΠΈΡΠ°ΡΡ Π² Π·Π°Π΄Π°ΡΠ΅
ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΡ:
ΠΠ΅ΡΠΎΠ΄ GET /files/{fileId}/content Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΠ°Π²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Range Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½, ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° Ρ ΠΊΠΎΠ΄ΠΎΠΌ 200 OK. Π‘Π΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΈΡΠ°ΡΡ ΡΠ°ΠΉΠ» ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Ρ ΡΠ°ΠΉΠ» ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ.
ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Range, ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±Π°ΠΉΡΠΎΠ² Ρ ΠΊΠΎΠ΄ΠΎΠΌ 206 Partial Content.
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 416 Range Not Satisfiable.
π ΠΡΠΈΠΌΠ΅Ρ Amazon S3 GetObject
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΏΠΎΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π»Ρ ΠΏΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π΄Π°Ρ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΅ΡΠ΅Π· REST API π©΅
#RestApiGA | Tg | ΠΠ | Max
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="report.pdf"
%PDF-1.7...
ΠΡΠ»ΠΈ ΡΠ°ΠΉΠ» Π±ΠΎΠ»ΡΡΠΎΠΉ, ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠ°ΡΡΡΠΌΠΈ, Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Ρ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ - ΡΡΠΎ ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ°.
π ΠΡΠΈΠΌΠ΅Ρ Google Drive
π 2. Π€Π°ΠΉΠ» Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² Base64
ΠΠ΄Π΅ΡΡ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π±Π°ΠΉΡΡ PDF-ΡΠ°ΠΉΠ»Π° Π² ΡΡΡΠΎΠΊΡ Base64, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΅Ρ Π² JSON.
HTTP/1.1 200 OK
Content-Type: application/json
{
"fileName": "report.pdf",
"contentType": "application/pdf",
"content": "JVBERi0xLjcKJ..."
}
ΠΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½:
β«οΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ JSON
β«οΈ ΠΈΠ·Π²Π»Π΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ content
β«οΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Base64 ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² Π±Π°ΠΉΡΡ
β«οΈ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π±Π°ΠΉΡΡ Π² ΡΠ°ΠΉΠ» Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°
πΊ Base64 Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π»ΡΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ: ΠΎΠ±ΡΡΠΌ Π΄Π°Π½Π½ΡΡ
ΡΠ²Π΅Π»ΠΈΡΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π½Π° ΡΡΠ΅ΡΡ, Π° ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
π ΠΡΠΈΠΌΠ΅Ρ GitHub
π 3. ΠΠ΅ΡΠ½ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΡΠ»ΠΊΡ
ΠΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, S3.
API ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΡΠ°Π²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠ»ΠΊΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠΊΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°:
{
"downloadUrl": "https://storage.example.com/...",
"expiresAt": "2026-10-20T12:00:00Z"
}
Π ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ
Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ:
β«οΈ ΡΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΡΠ»ΠΊΠΈ
β«οΈ Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ HTTP-ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠ½Π° Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ
β«οΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ
β«οΈ Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΡ Π²ΡΠ΄Π°ΡΠΈ ΡΡΡΠ»ΠΊΠΈ, Π½Π΅ ΡΠΎΡ
ΡΠ°Π½ΡΡ ΡΠ°ΠΌ URL
π ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Dropbox
π 4. Π Π°Π·Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°
ΠΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°ΠΉΠ»Π΅, Π° ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
Π‘ΠΎΡΠ΅ΡΠ°Π΅ΡΡΡ Ρ Π»ΡΠ±ΡΠΌ ΠΈΠ· ΡΡΡΡ
ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π²ΡΡΠ΅.
GET /files/{fileId}
ΠΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅:
{
"id": "4831",
"name": "report.pdf",
"mediaType": "application/pdf",
"size": 5242880,
"status": "READY"
}
Π‘Π°ΠΌ ΡΠ°ΠΉΠ» Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄:
GET /files/{fileId}/content
ΠΡΠΈΠΌΠ΅ΡΡ Box API:
π ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ°ΠΉΠ»Π΅ (ΡΡΡ ΠΈ URL Π½Π° ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅)
π ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
π 5. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΡΠ°ΡΡΡΠΌΠΈ
ΠΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ², Π²ΠΈΠ΄Π΅ΠΎ, Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅ΡΠ²Π°Π½Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ.
ΠΠ»ΠΈΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±Π°ΠΉΡΠΎΠ²:
GET /files/4831/content
Range: bytes=0-1048575
Π‘Π΅ΡΠ²Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΡ ΡΠ°ΡΡΡ:
HTTP/1.1 206 Partial Content
Content-Type: application/pdf
Accept-Ranges: bytes
Content-Range: bytes 0-1048575/5242880
Content-Length: 1048576
π ΠΡΠΈΠΌΠ΅Ρ Amazon S3 GetObject
ΠΠ°ΠΆΠ½ΠΎ: ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈ Range β Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅.
ΠΡΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΠ°Π΅Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ», Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Ρ Π΅Π³ΠΎ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΠ»ΠΈΠ΅Π½Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ 200 OK.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Range ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ°ΠΌ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ°ΡΡΡ ΡΠ°ΠΉΠ»Π°, Π° ΡΠ΅ΡΠ²Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 206 Partial Content.
Π‘ΠΎΡ
ΡΠ°Π½ΡΠΉΡΠ΅ ΠΏΠΎΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡΠΏΠ°ΡΠ³Π°Π»ΠΊΡ, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅ΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π² REST API π€
#RestApiGA | Tg | ΠΠ | Max
SELECT
c.full_name,
COUNT(DISTINCT o.id) AS orders_count,
SUM(oi.quantity) AS items_count,
COUNT(DISTINCT p.category_id) AS categories_count,
SUM(oi.quantity * oi.unit_price) AS total_spent
FROM customer c
JOIN "order" o ON o.customer_id = c.id
JOIN order_item oi ON oi.order_id = o.id
JOIN product p ON p.id = oi.product_id
WHERE o.status = 'PAID'
AND o.created_at >= DATE '2026-01-01'
AND o.created_at < DATE '2027-01-01'
GROUP BY c.id, c.full_name
HAVING COUNT(DISTINCT o.id) >= 3
AND COUNT(DISTINCT p.category_id) >= 2
AND SUM(oi.quantity * oi.unit_price) > 20000
ORDER BY total_spent DESC;
ΠΠ»Π°Π²Π½ΡΠΉ ΠΏΠΎΠ΄Π²ΠΎΡ
β COUNT(DISTINCT o.id): ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠΎΠ²Π°ΡΠ°ΠΌΠΈ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΊΠ°Π· ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ.
#ΠΠ_ΠΈ_SQL_GAGET /products?city=spb&priceFrom=1000&priceTo=5000&sort=rating...
ΠΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ:
+ GET - ΠΏΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
.
+ ΠΌΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΠΌ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΠΌ, ΠΏΡΠΎΡΡΠΎ ΡΠΈΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅.
ΠΠΎ Ρ GET Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΡΠ»ΠΈ ΡΠΈΠ»ΡΡΡΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ:
β«οΈ URL ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌ
β«οΈ ΠΏΡΠΎΠΊΡΠΈ, Π±ΡΠ°ΡΠ·Π΅ΡΡ ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ΅Π·Π°ΡΡ Π΄Π»ΠΈΠ½Π½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ°
β«οΈ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ JSON-ΡΠΈΠ»ΡΡΡΡ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΡΡΠΎΠΊΡ
β«οΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π·Π°ΡΠΎΡΡΡΡ Π»ΠΎΠ³ΠΈ
ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° GET ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ.
ΠΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° β ΡΠΆΠ΅ Π½Π΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ GET
β POST Ρ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ Π² ΡΠ΅Π»Π΅ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠΎΠΆΠ½ΠΎ ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΈΠ»ΡΡΡ Π² JSON:
POST /products/search
{
"city": "spb",
"priceFrom": 1000,
"priceTo": 5000,
"categories": ["hotel", "apartment"],
"sort": "rating,asc"
}
ΠΠΎ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
β«οΈ Π½Π΅ΡΠ΅Π»Π΅Π²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅: POST - ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
, Π° Π½Π΅ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ
β«οΈ ΠΎΠ½ Π½Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΡΠΉ: ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
β«οΈ Π΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ
ΠΡΠΈΠΌΠ΅Ρ POST
ΠΠΎΠ²ΡΠΉ ΠΎΡΠ²Π΅Ρ:
β
QUERY Ρ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ Π² ΡΠ΅Π»Π΅ Π·Π°ΠΏΡΠΎΡΠ°
ΠΠ½ Π·Π°Π±ΠΈΡΠ°Π΅Ρ Π»ΡΡΡΠ΅Π΅ Ρ Π΄Π²ΡΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ²:
π’ ΠΡ POST ΠΎΠ½ Π±Π΅ΡΡΡ ΡΠ΅Π»ΠΎ Π·Π°ΠΏΡΠΎΡΠ°
Π’ΠΎ Π΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠΈΠ»ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² JSON:
QUERY /products/search
Content-Type: application/json
{
"city": "spb",
"priceFrom": 1000,
"priceTo": 5000,
"categories": ["hotel", "apartment"],
"sort": "rating, asc"
}
π’ Π ΠΏΠΎ ΡΠΌΡΡΠ»Ρ QUERY Π±Π»ΠΈΠΆΠ΅ ΠΊ GET
ΠΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ Π²ΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΏΠΎ ΠΏΡΡΠΈ: ΡΡΠΎΡ Π·Π°ΠΏΡΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°.
ΠΠ· ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΡΡ Π΄Π²Π° Π²Π°ΠΆΠ½ΡΡ
ΡΠ²ΠΎΠΉΡΡΠ²Π°:
π 1. QUERY ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ
ΠΡΠ»ΠΈ ΡΠ΅ΡΡ ΠΎΠ±ΠΎΡΠ²Π°Π»Π°ΡΡ, ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡ.
ΠΠ΅ΡΠΎΠ΄ Π·Π°ΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΡΠΉ.
π 2. ΠΡΠ²Π΅Ρ Π½Π° QUERY ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ
ΠΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎ URL.
ΠΠ»ΡΡ ΠΊΡΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠΈΡΡΠ²Π°ΡΡ:
β«οΈ Π°Π΄ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠ°
β«οΈ ΡΠ΅Π»ΠΎ Π·Π°ΠΏΡΠΎΡΠ°
β«οΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅
Π’ΠΎ Π΅ΡΡΡ:
ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ URL + ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠ»ΡΡΡ = ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΈΠ· ΠΊΡΡΠ°.
Π Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠ»ΡΡΡ Π² body = Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»ΡΡ ΠΊΡΡΠ°.
ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΡΡΠΆΡΠ»ΡΡ
ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π²ΡΠ±ΠΎΡΠΎΠΊ.
βοΈ ΠΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ 2026 Π΄Π»Ρ HTTP QUERY
Π₯ΠΎΡΡ QUERY ΡΠΆΠ΅ Π΅ΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ HTTP, ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° Π΅ΡΡ Π΄ΠΎΠ³ΠΎΠ½ΡΠ΅Ρ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ:
β«οΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄
β«οΈ API Gateway ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡΠΉ ΡΠΈΠΏ Π·Π°ΠΏΡΠΎΡΠ°
β«οΈ CDN ΠΌΠΎΠΆΠ΅Ρ Π΅ΡΡ Π½Π΅ ΡΠΌΠ΅ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΡΠ²Π΅ΡΡ
β«οΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π΅ Π·Π½Π°ΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ OPEN API)
β«οΈ Π² Postman ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ
ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ QUERY ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½
β«οΈ SDK Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄
β«οΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΠΎΡΠΎΠΌ
ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠΊΠ° Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ QUERY Π»ΡΡΡΠ΅ Π½Π΅ ΡΠΎΡΠΎΠΏΠΈΡΡΡΡ.
π ΠΠ°ΠΊ Π²Π½Π΅Π΄ΡΡΡΡ:
β«οΈ Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
API (ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ, Π΄Π»Ρ Π²Π°ΡΠΈΡ
Π²Π΅Π±- ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ) β ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
β«οΈ Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ
API (ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Π²Π°ΠΌ ΠΏΠ°ΡΡΠ½Π΅ΡΠΎΠ², ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠΈΡΡΠ°ΠΌΠΈ) β Π»ΡΡΡΠ΅ ΠΏΠΎΠΊΠ° ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ.
ΠΠ΅ΡΠ΅Π΄ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π² ΡΡΠ΅ΠΊΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Ρ
, ΡΠ»ΡΠ·Π°Ρ
, ΠΊΡΡΠ°Ρ
ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ
ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°.
Π’Π°ΠΊ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π² HTTP:
π GET, POST, PUT, PATCH, DELETE, QUERY
OPTIONS, HEAD, TRACE, CONNECT
π ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ Π»ΠΎΠ³ΠΈΠΊΡ:
β«οΈ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠΎΠΈΡΠΊ β GET
β«οΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ β POST
β«οΈ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Ρ body β QUERY
Π‘ΡΠ°Π½Π΄Π°ΡΡ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΆΠ΄ΡΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΌΠ°ΡΡΠΎΠ²ΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΡΡΡ.
β€οΈβπ₯ ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ΡΡ Π½Π° GetAnalyst, ΡΡΠΎΠ±Ρ Π±ΡΡΡ Π² ΠΊΡΡΡΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ
ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ IT, Π²Π°ΠΆΠ½ΡΡ
Π΄Π»Ρ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΎΠ²
#ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈGA #RestApiGA