Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π²Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π»Π° Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΡΠ°Π½ΠΈΡ, ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ²ΡΠΈΡΡ Π² ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². API Service SL (Service Layer) Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π² ΡΠΎΠ»ΠΈ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΡΡΠ°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ. ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ»ΠΎΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΡ Π²ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²ΡΡΠΎΠΊΠΈΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΠΈ.
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΠΎΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ ΡΡΠΊΠΎΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°ΡΡΠΎ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ Π²Π°ΠΆΠ½ΠΎΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ endpoints, ΡΡΠΎ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΠ΅Ρ API Service SL Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ . ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅ ΠΎ ΡΠΎΠ½ΠΊΠΎΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°ΡΠΈΠΊΠ° ΠΈ ΡΠΏΠΎΡΠΎΠ±Π°Ρ Π·Π°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΡ
Π‘Π΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΡΠ»ΠΎΠΉ Π² API β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π° ΡΡΡΠΎΠ³ΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΠΏΡΠ°Π²Π»ΡΡΡΠ°Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . Service Layer Π°Π±ΡΡΡΠ°Π³ΠΈΡΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠΈΡΡΡΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΌΠ΅Π½Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠ΄ΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ RESTful ΠΈΠ»ΠΈ GraphQL ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² Π½Π° ΡΡΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³ΠΈΠ±ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΡΠΎΡΡΠ΅ ΡΠΈΡΠ»Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΏΠ°Π΄Π°Π»Π° ΠΏΠΎΠ΄ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ. ΠΠ»ΡΡΠ΅Π²ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π½Π°Π΄Π΅ΠΆΠ½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°:
- πΉ ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ: ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ HTTP-Π·Π°ΠΏΡΠΎΡΡ ΠΈ Π΄Π΅Π»Π΅Π³ΠΈΡΡΡΡ ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
- πΉ Π‘Π΅ΡΠ²ΠΈΡΡ: ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- πΉ Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ: ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ .
- πΉ DTO (Data Transfer Objects): ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»ΠΎΡΠΌΠΈ.
ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ API Service SL ΡΠ°ΡΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ·ΠΊΠΈΠΌ Π³ΠΎΡΠ»ΡΡΠΊΠΎΠΌ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΏΡΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅Π· proper caching ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΆΠ΅Π»ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π°Π½ΠΎΠ²ΠΎ. ΠΡΠΎ Π½Π°ΠΏΡΡΠΌΡΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π²ΡΠ΅ΠΌΡ ΠΎΡΠΊΠ»ΠΈΠΊΠ° (latency) ΠΈ ΠΎΠ±ΡΠ΅Π΅ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ.
- REST
- GraphQL
- gRPC
- SOAP
- RPC
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ β ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½ΠΎΠΌΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ API. API Service SL Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΡΡΠΎΠ³ΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ² JWT (JSON Web Tokens).
ΠΡΠΎΡΠ΅ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΡΠ»ΠΎΠΉ. Middleware ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡΡΠ΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΡΠΎΠΊΠ΅Π½Π°. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅ ΠΏΡΠΎΠΉΠ΄Π΅Π½Π°, Π·Π°ΠΏΡΠΎΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π΅ΡΠ΅ Π΄ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π·Π°ΡΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ:
- π OAuth 2.0: ΡΡΠ°Π½Π΄Π°ΡΡ Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ°.
- π API Keys: ΠΏΡΠΎΡΡΡΠ΅ ΠΊΠ»ΡΡΠΈ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².
- π Rate Limiting: ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π·Π°ΠΏΡΠΎΡΠΎΠ² Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ DDoS.
- π HTTPS/TLS: ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΡ API ΠΈΠ»ΠΈ ΠΏΠ°ΡΠΎΠ»ΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ secure vaults Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Role-Based Access Control (RBAC) Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π³ΠΈΠ±ΠΊΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠ°Π²Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ endpoints Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ»ΠΈ, ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΡΠ°Π½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ β ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ Π»ΡΠ±ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°. API Service SL Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ Π΄Π°ΠΆΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡ. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ HTTP ΠΊΠΎΠ΄Ρ ΡΡΠ°ΡΡΡΠ° (400, 401, 403, 404, 500) Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π±ΡΡΡΡΠΎ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅. ΠΠ°ΠΆΠ½ΠΎ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΊΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½ΠΎ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½Π° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π°: ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΈ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π»ΠΎΠ³ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠΈΠΏΠΈΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ° ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
| ΠΠΎΠ»Π΅ | Π’ΠΈΠΏ Π΄Π°Π½Π½ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|---|
| error_code | String | Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ |
| message | String | Π§Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ |
| details | Object | ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) |
| timestamp | ISO 8601 | ΠΡΠ΅ΠΌΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ° |
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (Global Exception Handler) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²ΡΠ΅ΠΌΠΈ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ. ΠΡΠΎ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΈΡΠ°ΡΡ Π±Π»ΠΎΠΊΠΈ try-catch Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΈΡΠ΅, Π° ΡΠ΅Π°ΠΊΡΠΈΠΈ Π½Π° ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ ΡΠ±ΠΎΠ΅Π² β ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, NestJS ΠΈΠ»ΠΈ Spring Boot) ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ ΠΈΠ»ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π²ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π²ΡΠ±ΡΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠΌ ΡΠ»ΠΎΠ΅ΠΌ, ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π² Π΅Π΄ΠΈΠ½ΡΠΉ JSON-ΠΎΡΠ²Π΅Ρ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
Π‘ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠΊΠ»ΠΈΠΊΠ° API Π½Π°ΠΏΡΡΠΌΡΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠΏΡΡ. API Service SL ΡΠ°ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ. ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠ΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΡΡΠ΅ΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Redis ΠΈΠ»ΠΈ Memcached. ΠΠ°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΠΈ ΡΠ΅Π΄ΠΊΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΡΠ΅ΡΠ²ΠΈΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΊΡΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π΅Π³ΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ (Cache Miss) ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
- β‘ Cache-Aside: ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π·Π°ΠΏΠΈΡΡΡ Π² ΠΊΡΡ.
- β‘ Write-Through: Π΄Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΠΊΡΡ ΠΈ ΠΠ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ.
- β‘ TTL (Time To Live): Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΊΠ° ΠΆΠΈΠ·Π½ΠΈ Π·Π°ΠΏΠΈΡΠΈ.
- β‘ Invalidation: ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΡΠΈΡΡΠΊΠ° ΠΊΡΡΠ° ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ .
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡε‘εΏ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ (ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ) ΠΊΡΡΠ° Π½Π°ΡΡΡΠΎΠ΅Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΠΈΠ½Π°ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΆΠ°ΡΠΈΡ Gzip ΠΈΠ»ΠΈ Brotli ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΠΊΠ° Π΄ΠΎ 70%. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ ΠΈ Π²ΡΠ±ΠΎΡΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠΎΠ»Π΅ΠΉ (field filtering) ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΡΠ΅ΡΡ ΠΈ ΠΏΠ°ΡΡΠ΅Ρ JSON Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ETag (Entity Tag) Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π±ΡΠ°ΡΠ·Π΅ΡΡ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΡΠ΅ΡΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API
ΠΡΠΎΡΠ΅ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ API Service SL Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ ΡΠ»ΠΎΠΌΠ°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. Π Π°Π·Π»ΠΈΡΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ (Unit), ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΡΡ ΠΈ ΡΠ΅ΡΡΡ end-to-end.
ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ API ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π²ΡΠΎΠ΄Π΅ Postman, Swagger ΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ "ΡΡΠ°ΡΡΠ»ΠΈΠ²ΡΠ΅ ΠΏΡΡΠΈ" (Happy Path), Π½ΠΎ ΠΈ Π³ΡΠ°Π½ΠΈΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΈ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
Π§Π΅ΠΊ-Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅Π»ΠΈΠ·ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ API:
- β ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ (Backward Compatibility).
- β ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ Π²ΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΡ Π΅ΠΌ Π΄Π°Π½Π½ΡΡ .
- β ΠΠ°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ ΠΏΠΈΠΊΠΎΠ²ΡΠΌ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ.
- β ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΎΡΠΊΠ°ΡΠ° (Rollback).
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ β Π½Π΅ΠΎΡΡΠ΅ΠΌΠ»Π΅ΠΌΠ°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ. OpenAPI Specification (ΡΠ°Π½Π΅Π΅ Swagger) ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π΄Π΅-ΡΠ°ΠΊΡΠΎ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ REST API. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ SDK ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
# ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΠ΅Π· CLI
npm run test:api -- --coverage --env=production
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅
ΠΠΎΡΠ»Π΅ deployments ΡΠ°Π±ΠΎΡΠ° Ρ API Service SL Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΠΎΡΡΠΎΡΠ½Π½ΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΌΠ΅ΡΡΠΈΠΊ Π·Π΄ΠΎΡΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΠ²Π»ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΠ°Π½ΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄Π»Ρ Π±ΠΈΠ·Π½Π΅ΡΠ°. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΠΊΠ°ΠΊ RPS (Requests Per Second), latency ΠΈ error rate.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ (Distributed Tracing) ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΠ½ΡΡΡ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π²ΡΠΎΠ΄Π΅ Jaeger ΠΈΠ»ΠΈ Zipkin Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΡΡΡ ΠΏΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° ΡΠ΅ΡΠ΅Π· Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΈΠ²Π°Ρ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ°.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π°Π»Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠ³Π° ΠΎΡΠΈΠ±ΠΎΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, >1% 5xx ΠΎΡΠΈΠ±ΠΎΠΊ Π·Π° 1 ΠΌΠΈΠ½ΡΡΡ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ.
Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠΉ Π°ΡΠ΄ΠΈΡ Π»ΠΎΠ³ΠΎΠ² ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. API Service SL Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ²ΠΎΠ»ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΎΡΡΠΎΠΌ Π±ΠΈΠ·Π½Π΅ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π»Π΅Π³ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ REST ΠΈ GraphQL Π΄Π»Ρ ΠΌΠΎΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°?
ΠΡΠ±ΠΎΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². REST ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ CRUD ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. GraphQL Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½ΡΠΆΠ½Ρ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π²ΡΠ±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π° ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΡΠΎΡ, ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ΅Π²ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ API Service SL Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°ΠΉΠΌΠ°ΡΡ?
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π»ΠΎΠ³ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (deadlocks), ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° CPU ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π§Π°ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠ² ΠΈΠ»ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ SQL-Π·Π°ΠΏΡΠΎΡΠΎΠ².
ΠΡΠΆΠ½ΠΎ Π»ΠΈ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ API?
ΠΠ°, Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΠ΅ΡΠ΅Π· URL /v1/, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ) ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ Π²Π½ΠΎΡΠΈΡΡ breaking changes Π² Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡΡ , Π½Π΅ Π»ΠΎΠΌΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡ API.