[ΠΠ»Π΅Π± Π£ΡΠΈΡΠ΅Π»Ρ] [Stepik] ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ (API / Π±ΡΠΎΠΊΠ΅ΡΡ) ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² (2023)
[ΠΠ»Π΅Π± Π£ΡΠΈΡΠ΅Π»Ρ] [Stepik] ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ (API / Π±ΡΠΎΠΊΠ΅ΡΡ) ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² (2023)
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ (API / Π±ΡΠΎΠΊΠ΅ΡΡ) ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² [Stepik, ΠΠ»Π΅Π± Π£ΡΠΈΡΠ΅Π»Ρ]
Π§Π΅ΠΌΡ Π²Ρ Π½Π°ΡΡΠΈΡΠ΅ΡΡ:
ΠΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΈ Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ
ΠΡΠ±ΠΎΡ Π»ΡΡΡΠ΅Π³ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠ°
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Ρ ΡΡΠ΅ΡΠΎΠΌ CAP-ΡΠ΅ΠΎΡΠ΅ΠΌΡ, ACID ΠΈ BASE
ΠΡΠ½ΠΎΠ²Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ NoSQL Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΈ ΡΡΠΈΠ»Π΅ΠΉ
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΠΎ API ΠΈ Ρ Π±ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² UML
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡ - ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ
ΠΡΠ±ΠΎΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ API Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ cURL, Postman, SOAP UI, Chrome DevTools
ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²Π°ΡΠ΅ΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Swagger ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ²ΠΎΠ΅Π³ΠΎ API Π½Π° Python
ΠΡ Π»Π΅Π³ΠΊΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΡΠ²ΠΎΠΈΡΠ΅ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ API ΠΈ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ:
ΠΠΎΠ΄Π΅Π»Ρ TCP/IP ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ - HTTP, TCP, UDP, TLS, HTTPS
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ, Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠΌ, API ΠΈ SDK
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ API - cURL, Postman, SOAP UI, Chrome DevTools
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΡΠΌΠ°ΡΠ°Ρ - JSON, XML, YAML
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API Π² ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡ - JSON-RPC, SOAP, GraphQL, gRPC, REST. Π Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ - HTTP Async (Callback, Polling, Long Polling), Webhooks, WebSockets, Server Sent Events.
ΠΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ, ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API Π² OpenRPC, ΡΡ Π΅ΠΌΠ°Ρ XSD+WSDL / SDL / Proto, OpenApi Swagger, AsyncAPI Spec
Api First ΠΈ Code First ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ API Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² - ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²
Π Π°Π±ΠΎΡΠ° ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π² API: ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°, ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ, ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ
Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΈ MIME-ΡΠΈΠΏΡ
ΠΡΠ½ΠΎΠ²Ρ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΠΈ: Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠ»ΡΡΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡ
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. Π ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: Api-Key, ΡΠΎΠΊΠ΅Π½Ρ Π΄ΠΎΡΡΡΠΏΠ°, mTLS, JWT, oAuth2 + OpenID Connect
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ: Π·Π°ΡΠΈΡΠ° Π²Π°ΡΠ΅Π³ΠΎ API ΠΎΡ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ²
Π‘Π΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ API: ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, batch-Π·Π°ΠΏΡΠΎΡΡ, chunked-Π·Π°ΠΏΡΠΎΡΡ, rate limiting, retry, timeout
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Π½ΡΠ»Ρ - ΡΠ±ΠΎΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² UML
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· Π±ΡΠΎΠΊΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ½ΡΡΠΈΡ, ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ
ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ: RabbitMQ, Apache Kafka
Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ: Request-Reply, Publish-Subscribe, Point-to-Point
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ , Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
ΠΠ°ΡΠ°Π½ΡΠΈΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΎΡΠ΅ΡΡΠ΄Π½ΠΎΡΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ
ΠΡΡΠ³ΠΈΠ΅ ΡΡΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ (ΡΠ°ΠΉΠ»Ρ, ΠΎΠ±ΡΠ°Ρ ΠΠ)
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ API Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π° Π½Π° Python
ΠΡ Π»Π΅Π³ΠΊΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΡΠ²ΠΎΠΈΡΠ΅ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ:
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² - ΡΡΠΎ ΡΡΠΎ?
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈ (ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ, ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ, SOA ΠΈ Ρ.Π΄.)
Π’ΠΈΠΏΡ ΠΌΠ΅ΠΆΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ (ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ)
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ: API Gateway, Backend for Frontend, Servise Mesh ΠΈ Π΄Ρ.
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ (ΡΡΡΠΎΠ³Π°Ρ ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΡΡΠ΅)
Π’Π΅ΠΎΡΠ΅ΠΌΡ CAP / BASE / ACID ΠΈ ΠΈΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (ΠΎΠΏΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΡΡ ΠΈ ΠΏΠ΅ΡΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΡΡ ) ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ
ΠΡΠ±ΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ - ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠ΅ SQL / NoSQL
Π¨Π°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
Low coupling ΠΈ High cohesion, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° N+1
Π’Π΅Ρ Π½ΠΈΠΊΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ / Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)
ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ΅Π΄Π΅)
ΠΡΠ΅Π½ΠΊΠ° ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π² C4 ΠΈ Π΄ΡΡΠ³ΠΈΡ Π½ΠΎΡΠ°ΡΠΈΡΡ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠ°
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ (API / Π±ΡΠΎΠΊΠ΅ΡΡ) ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² [Stepik, ΠΠ»Π΅Π± Π£ΡΠΈΡΠ΅Π»Ρ]
Π§Π΅ΠΌΡ Π²Ρ Π½Π°ΡΡΠΈΡΠ΅ΡΡ:
ΠΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΈ Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ
ΠΡΠ±ΠΎΡ Π»ΡΡΡΠ΅Π³ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠ°
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Ρ ΡΡΠ΅ΡΠΎΠΌ CAP-ΡΠ΅ΠΎΡΠ΅ΠΌΡ, ACID ΠΈ BASE
ΠΡΠ½ΠΎΠ²Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ NoSQL Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΈ ΡΡΠΈΠ»Π΅ΠΉ
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΠΎ API ΠΈ Ρ Π±ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² UML
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡ - ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ
ΠΡΠ±ΠΎΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ API Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ cURL, Postman, SOAP UI, Chrome DevTools
ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²Π°ΡΠ΅ΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Swagger ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ²ΠΎΠ΅Π³ΠΎ API Π½Π° Python
ΠΡ Π»Π΅Π³ΠΊΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΡΠ²ΠΎΠΈΡΠ΅ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ API ΠΈ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ:
ΠΠΎΠ΄Π΅Π»Ρ TCP/IP ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ - HTTP, TCP, UDP, TLS, HTTPS
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ, Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠΌ, API ΠΈ SDK
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ API - cURL, Postman, SOAP UI, Chrome DevTools
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΡΠΌΠ°ΡΠ°Ρ - JSON, XML, YAML
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API Π² ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡ - JSON-RPC, SOAP, GraphQL, gRPC, REST. Π Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ - HTTP Async (Callback, Polling, Long Polling), Webhooks, WebSockets, Server Sent Events.
ΠΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ, ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API Π² OpenRPC, ΡΡ Π΅ΠΌΠ°Ρ XSD+WSDL / SDL / Proto, OpenApi Swagger, AsyncAPI Spec
Api First ΠΈ Code First ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ API Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² - ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²
Π Π°Π±ΠΎΡΠ° ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π² API: ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°, ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ, ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ
Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΈ MIME-ΡΠΈΠΏΡ
ΠΡΠ½ΠΎΠ²Ρ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΠΈ: Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠ»ΡΡΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡ
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. Π ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: Api-Key, ΡΠΎΠΊΠ΅Π½Ρ Π΄ΠΎΡΡΡΠΏΠ°, mTLS, JWT, oAuth2 + OpenID Connect
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ: Π·Π°ΡΠΈΡΠ° Π²Π°ΡΠ΅Π³ΠΎ API ΠΎΡ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ²
Π‘Π΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ API: ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, batch-Π·Π°ΠΏΡΠΎΡΡ, chunked-Π·Π°ΠΏΡΠΎΡΡ, rate limiting, retry, timeout
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Π½ΡΠ»Ρ - ΡΠ±ΠΎΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² UML
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· Π±ΡΠΎΠΊΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ½ΡΡΠΈΡ, ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ
ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ: RabbitMQ, Apache Kafka
Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ: Request-Reply, Publish-Subscribe, Point-to-Point
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ , Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
ΠΠ°ΡΠ°Π½ΡΠΈΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΎΡΠ΅ΡΡΠ΄Π½ΠΎΡΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ
ΠΡΡΠ³ΠΈΠ΅ ΡΡΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ (ΡΠ°ΠΉΠ»Ρ, ΠΎΠ±ΡΠ°Ρ ΠΠ)
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ API Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π° Π½Π° Python
ΠΡ Π»Π΅Π³ΠΊΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΡΠ²ΠΎΠΈΡΠ΅ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ:
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² - ΡΡΠΎ ΡΡΠΎ?
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈ (ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ, ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ, SOA ΠΈ Ρ.Π΄.)
Π’ΠΈΠΏΡ ΠΌΠ΅ΠΆΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ (ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ)
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ: API Gateway, Backend for Frontend, Servise Mesh ΠΈ Π΄Ρ.
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ (ΡΡΡΠΎΠ³Π°Ρ ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΡΡΠ΅)
Π’Π΅ΠΎΡΠ΅ΠΌΡ CAP / BASE / ACID ΠΈ ΠΈΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (ΠΎΠΏΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΡΡ ΠΈ ΠΏΠ΅ΡΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΡΡ ) ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ
ΠΡΠ±ΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ - ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠ΅ SQL / NoSQL
Π¨Π°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
Low coupling ΠΈ High cohesion, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° N+1
Π’Π΅Ρ Π½ΠΈΠΊΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ / Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)
ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ΅Π΄Π΅)
ΠΡΠ΅Π½ΠΊΠ° ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π² C4 ΠΈ Π΄ΡΡΠ³ΠΈΡ Π½ΠΎΡΠ°ΡΠΈΡΡ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠ°
favorite
0
star
0
