Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ REST ΠΈ GraphQL API Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈ throttling β ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΡΡΠ»ΡΠ³Π° Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π±ΠΈΠ·Π½Π΅ΡΠ°
Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΡΠΈΡΡΠΎΠ²ΠΎΠΌ ΠΌΠΈΡΠ΅ API ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠ΅ΡΠ΄ΡΠ΅ΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΡ ΡΡΠ»ΡΠ³Ρ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ REST ΠΈ GraphQL API Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΎΠ² throttling (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²) Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ Π²Π°ΡΠΈΡ
ΡΠΈΡΡΠ΅ΠΌ.
ΠΠ°ΡΠ΅ΠΌ Π²Π°ΡΠ΅ΠΌΡ Π±ΠΈΠ·Π½Π΅ΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ API?
API (Application Programming Interface) β ΡΡΠΎ ΠΌΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ. ΠΠ°Π΄Π΅ΠΆΠ½ΡΠΉ API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ, ΡΡΠΊΠΎΡΡΠ΅Ρ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². REST ΠΈ GraphQL β ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ API, ΠΏΡΠΈΠ·Π½Π°Π½Π½ΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΌΠΈΡΠ΅ Π·Π° Π³ΠΈΠ±ΠΊΠΎΡΡΡ, ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ Π²Π°ΠΆΠ½Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈ throttling?
- ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ β Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ. ΠΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (OAuth2, JWT), Π΄Π²ΡΡ
ΡΠ°ΠΊΡΠΎΡΠ½ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°.
- Throttling (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²) β Π·Π°ΡΠΈΡΠ°Π΅Ρ Π²Π°Ρ API ΠΎΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΎΠΊ, Π°ΡΠ°ΠΊ ΠΈ Π½Π΅ΡΠ°Π½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ ΠΈ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΠΏΠΈΠΊΠΎΠ²ΡΡ
Π½Π°Π³ΡΡΠ·ΠΊΠ°Ρ
.
ΠΠ°ΡΠΈ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ API Π½Π° ΡΠ°ΠΌΡΡ
ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡ
: Node.js, Python (Django Rest Framework, FastAPI), PHP (Laravel), Go, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ GraphQL Π½Π° Apollo ΠΈΠ»ΠΈ Hasura. ΠΠ½Π΅Π΄ΡΡΠ΅ΠΌ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΈΠ»ΠΈ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΠΌ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ SSO ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ throttling β ΠΊΠ°ΠΊ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ (API Gateway, Nginx, Cloudflare).
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²Π° Ρ Π½Π°ΠΌΠΈ
- ΠΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄: Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π°ΡΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ API.
- ΠΡΡΠΎΠΊΠ°Ρ ΡΡΠ΅ΠΏΠ΅Π½Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ: ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π·Π°ΡΠΈΡΡ ΠΎΡ Π²Π·Π»ΠΎΠΌΠ°, SQL-ΠΈΠ½ΡΠ΅ΠΊΡΠΈΠΉ, XSS, CSRF ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΡΠ³ΡΠΎΠ·.
- ΠΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ: ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΠ΅ΠΌ API Ρ ΡΡΠ΅ΡΠΎΠΌ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠ° ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ.
- ΠΡΠΎΠ·ΡΠ°ΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Swagger/OpenAPI ΠΈΠ»ΠΈ GraphQL schema Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ.
ΠΡΠ°ΠΏΡ ΡΠ°Π±ΠΎΡΡ
- ΠΠ½Π°Π»ΠΈΠ· Π²Π°ΡΠΈΡ
Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ
- ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ API
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ throttling
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π°ΡΠ΄ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
- ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅
ΠΠ»Ρ ΠΊΠΎΠ³ΠΎ ΡΡΠ° ΡΡΠ»ΡΠ³Π°?
- Π‘ΡΠ°ΡΡΠ°ΠΏΡ, Π±ΡΡΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΡΡΠΈΠ΅ MVP Π½Π° ΡΡΠ½ΠΎΠΊ ΠΈ Π½ΡΠΆΠ΄Π°ΡΡΠΈΠ΅ΡΡ Π² Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΌ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΌ API.
- ΠΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ.
- ΠΠ»Π°Π΄Π΅Π»ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ² ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ.
ΠΠΎΡΠ΅ΠΌΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π½Π°Ρ?
ΠΠ°Ρ ΠΎΠΏΡΡ β Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ ΠΈΠ· ΡΠ°Π·Π½ΡΡ
ΠΎΡΡΠ°ΡΠ»Π΅ΠΉ. ΠΡ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΈ Π·Π°ΡΠΈΡΡΠ½Π½ΡΠΉ API, Π½ΠΎ ΠΈ Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π²Π°ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ² Π±Π΅ΡΠΏΠ΅ΡΠ΅Π±ΠΎΠΉΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ.
ΠΠ°ΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ REST ΠΈΠ»ΠΈ GraphQL API Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈ throttling ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ!
ΠΡΡΠ°Π²ΡΡΠ΅ Π·Π°ΡΠ²ΠΊΡ β ΠΈ Π½Π°ΡΠΈ ΡΠΊΡΠΏΠ΅ΡΡΡ ΡΠ²ΡΠΆΡΡΡΡ Ρ Π²Π°ΠΌΠΈ Π΄Π»Ρ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΠΈ ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΊΠΎΠ² ΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ.