ΠΡΠ»ΠΈ ΡΡ ΠΏΠΈΡΠ΅ΡΡ Π±Π΅ΠΊΠ΅Π½Π΄, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠ΅ΡΡ ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΎΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΎΡ REST ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΡΡ Π½Π° gRPC, β ΡΡΠ° ΡΡΠ°ΡΡΡ Π΄Π»Ρ ΡΠ΅Π±Ρ.
ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ΡΡ Π½Π° ΠΌΠΎΠΉ ΠΊΠ°Π½Π°Π» Π² Π’Π΅Π»Π΅Π³ΡΠ°ΠΌΠΌ, ΡΡΠΎΠ±Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ.
ΠΡ ΠΈΠ»ΠΈ Π½Π° ΠΊΠ°Π½Π°Π» Π² VK, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ°ΡΡΠΈ Ρ ΡΠ΅Π±Ρ Π² Π»Π΅Π½ΡΠ΅.
π Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ gRPC
gRPC (ΡΠΈΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ "Π΄ΠΆΠΈ-Π°Ρ-ΠΏΠΈ-ΡΠΈ") β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΠ²ΠΈΡ Β«Π²ΡΠ·Π²Π°Π»Β» ΠΌΠ΅ΡΠΎΠ΄ Π΄ΡΡΠ³ΠΎΠ³ΠΎ β ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΠ½ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ, Ρ ΠΎΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π³Π΄Π΅ ΡΠ³ΠΎΠ΄Π½ΠΎ (Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ΅ ΠΈ Π΄Π°ΠΆΠ΅ Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΡΡΠ°Π½Π΅).
ΠΠ»Π°Π²Π½ΡΠ΅ ΡΠΈΡΠΊΠΈ:
- Π Π°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ²Π΅ΡΡ HTTP/2 (Π±ΡΡΡΡΠΎ!)
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Protobuf (ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎ!)
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ (ΡΠ΄ΠΎΠ±Π½ΠΎ!)
π gRPC vs REST: Π² ΡΡΠΌ ΡΠ°Π·Π½ΠΈΡΠ°
REST Π·Π½Π°ΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠΌ: ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΠ΅ HTTP-Π·Π°ΠΏΡΠΎΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, GET ΠΈΠ»ΠΈ POST) ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΎΡΠ²Π΅Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON. ΠΡΡ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, ΡΠΈΡΠ°Π΅ΠΌΠΎ, Π½ΠΎ:
- ΠΠ°Π½Π½ΡΠ΅ Π² JSON ΠΌΠΎΠ³ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° (ΡΡΠΎ ΡΠ΅ΠΊΡΡ)
- REST ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ²Π΅ΡΡ HTTP/1.1, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ
- ΠΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ β ΡΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
gRPC ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ:
- ΠΡΠΎΡΠΎΠΊΠΎΠ» HTTP/2 β ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΈ ΡΡΠΎ Π±ΡΡΡΡΠ΅Π΅
- Π€ΠΎΡΠΌΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ Protocol Buffers (Protobuf) β ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ, ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ ΠΈ ΡΡΠΏΠ΅ΡΠ±ΡΡΡΡΡΠΉ ΡΠΎΡΠΌΠ°Ρ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ : Python, Go, Java, C#, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ
π ΠΠ°ΠΊ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Π’Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡ API Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ .proto-ΡΠ°ΠΉΠ»Π΅ (ΠΊΠ°ΠΊ "ΡΠ΅ΡΡΡΠΆ" ΠΈΠ»ΠΈ "ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ"), ΠΈ Π½Π° Π±Π°Π·Π΅ Π½Π΅Π³ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ.
π Π’ΠΈΠΏΡ RPC ΠΈ ΠΊΠ°ΠΊ Ρ ΡΡΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ
gRPC ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΉ. Π Π°Π·Π±Π΅ΡΡΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ :
1οΈβ£ Unary RPC β ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΡΠΎΡ, ΠΎΠ΄ΠΈΠ½ ΠΎΡΠ²Π΅Ρ
ΠΡΡΠΌΠΎΠΉ Π°Π½Π°Π»ΠΎΠ³ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ HTTP POST. ΠΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆ Π½Π° REST-Π·Π°ΠΏΡΠΎΡ:
π ΠΠ»ΠΈΠ΅Π½Ρ β Π‘Π΅ΡΠ²Π΅Ρ β ΠΡΠ²Π΅Ρ
ΠΡΠΈΠΌΠ΅Ρ:
2οΈβ£ Server streaming β ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΡΠΎΡ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠΎΠ²
ΠΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ.
π ΠΠ»ΠΈΠ΅Π½Ρ β Π‘Π΅ΡΠ²Π΅Ρ β ΠΡΠ²Π΅Ρ1 β ΠΡΠ²Π΅Ρ2 β ΠΡΠ²Π΅Ρ3...
ΠΡΠΈΠΌΠ΅Ρ:
3οΈβ£ Client streaming β ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΎΠ΄ΠΈΠ½ ΠΎΡΠ²Π΅Ρ
ΠΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
π ΠΠ°ΠΏΡΠΎΡ1 β ΠΠ°ΠΏΡΠΎΡ2 β ΠΠ°ΠΏΡΠΎΡ3 β Π‘Π΅ΡΠ²Π΅Ρ β ΠΡΠ²Π΅Ρ
ΠΡΠΈΠΌΠ΅Ρ:
4οΈβ£ Bidirectional streaming β Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΏΠΎΡΠΎΠΊ
Π ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠ³ΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΠ³Π΄Π° Π·Π°Ρ ΠΎΡΡΡ.
π ΠΠ»ΠΈΠ΅Π½Ρ β Π‘Π΅ΡΠ²Π΅Ρ β ΠΠ»ΠΈΠ΅Π½Ρ β Π‘Π΅ΡΠ²Π΅Ρ...
ΠΡΠΈΠΌΠ΅Ρ:
π ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ
gRPC ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ:
- SSL/TLS β Π΄Π»Ρ Π·Π°ΡΠΈΡΡΠ½Π½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ²
- ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ (ΠΊΠ°ΠΊ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ)
- ΠΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊΠΈ (interceptors) β Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
- Status-ΠΊΠΎΠ΄Ρ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ:
π§ͺ ΠΠ°ΠΊ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ gRPC
gRPC Ρ ΠΎΡΠΎΡΠΎ ΡΠ΅ΡΡΠΈΡΡΠ΅ΡΡΡ, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ²ΠΎΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ²:
π§° grpcurl β ΠΊΠ°ΠΊ curl, Π½ΠΎ Π΄Π»Ρ gRPC
ΠΡΠΈΠΌΠ΅Ρ:
π― ΠΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π±Π΅Π· ΠΊΠΎΠ΄Π°.
π§° Postman (ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΌΠ΅Π΅Ρ gRPC)
- ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡ .proto ΡΠ°ΠΉΠ»
- Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡ Π°Π΄ΡΠ΅Ρ, Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡ Π½ΡΠΆΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
- ΠΠ²ΠΎΠ΄ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² JSON-ΡΡΠΈΠ»Π΅
- ΠΠΌΡΡΡ Β«SendΒ»
ΠΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ.
π§ͺ Pytest + gRPC
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ½ΠΈΡ-ΡΠ΅ΡΡΠ°:
π§© Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Protobuf?
Protocol Buffers (Protobuf) β ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ½ ΡΠΈΠ»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ JSON, Π±ΡΡΡΡΠ΅Π΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΡΡΡ, ΠΈ ΠΏΠΎΡΡΠΈ Π½Π΅ ΡΠ°ΡΡ ΠΎΠ΄ΡΠ΅Ρ ΡΡΠ°ΡΠΈΠΊ.
ΠΡΠΈΠΌΠ΅Ρ:
- JSON:
β 50 Π±Π°ΠΉΡ
- Protobuf:
β 10 Π±Π°ΠΉΡ
Π Π°Π·Π½ΠΈΡΠ° β Π² 5 ΡΠ°Π·!
β ΠΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
- π¬ Netflix ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ gRPC Π²Π½ΡΡΡΠΈ Π²ΡΠ΅ΠΉ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
- π Uber ΡΡΡΠΎΠΈΡ ΠΌΠ°ΡΡΡΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΡΡΠΊΠΎΠ² ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΡΠ΅ΡΠ΅Π· gRPC
- π OZON ΠΈ Avito β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ gRPC-API ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ
- π± ΠΠΎΠ±ΠΈΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ? gRPC ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌ, Π³Π΄Π΅ Π½ΡΠΆΠ½Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠΊΠ»ΠΈΠΊ ΠΈ Π½ΠΈΠ·ΠΊΠΎΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠ°
βοΈ ΠΠ°ΠΊ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΈΠ· .proto-ΡΠ°ΠΉΠ»Π°
ΠΠ΄ΠΈΠ½ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ ΠΏΠ»ΡΡΠΎΠ² gRPC β ΡΡΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π°. Π’Ρ Π½Π΅ ΠΏΠΈΡΠ΅ΡΡ ΡΡΠΊΠ°ΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ β Π²ΡΡ Π΄Π΅Π»Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ (.proto).
Π Π°Π·Π±Π΅ΡΡΠΌΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Python.
π Π¨Π°Π³ 1. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈ Π½ΡΠΆΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ:
ΠΡΠ»ΠΈ ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡ Python, Π²ΡΡ ΠΏΡΠΎΡΡΠΎ:
ΠΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ:
- ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ gRPC
- ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ protobuf (ΠΏΡΠΎΡΠΎΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ)
- Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠ΄Π°
π§± Π¨Π°Π³ 2. Π‘ΠΎΠ·Π΄Π°ΠΉ proto-ΡΠ°ΠΉΠ»
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠ» greeter.proto:
π§ͺ Π¨Π°Π³ 3. Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉ ΠΊΠΎΠ΄
ΠΠ°ΠΏΡΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Π Π°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ°:
- -I. β ΠΏΡΡΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Ρ .proto-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ
- --python_out=. β Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΡΠ½ΡΠ΅ protobuf-ΠΌΠΎΠ΄Π΅Π»ΠΈ
- --grpc_python_out=. β Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ gRPC stub (ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ)
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΠΎΡΠ²ΡΡΡΡ Π΄Π²Π° ΡΠ°ΠΉΠ»Π°:
- greeter_pb2.py β ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ (HelloRequest, HelloReply)
- greeter_pb2_grpc.py β ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (GreeterServicer, GreeterStub)
π» Π¨Π°Π³ 4. Π‘ΠΎΠ·Π΄Π°ΠΉ ΡΠ΅ΡΠ²Π΅Ρ (ΠΏΡΠΈΠΌΠ΅Ρ)*
π Π¨Π°Π³ 5. Π‘ΠΎΠ·Π΄Π°ΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°*
π ΠΡΡ! π Π£ ΡΠ΅Π±Ρ Π΅ΡΡΡ:
- ΠΡΠΎΡΠΎΡΠ°ΠΉΠ» Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠΌ
- ΠΠ΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄
- Π‘Π΅ΡΠ²Π΅Ρ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· gRPC
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
* ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΈΡΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΠ»ΠΈ. gRPC β ΡΡΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ.
ΠΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΡ ΠΌΠΎΠΆΠ΅ΡΡ Π΄Π΅ΡΠΆΠ°ΡΡ ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
β ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠΈΠ½ΡΡΡ gRPC
1. β ΠΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Β«ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈΒ» Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ
gRPC ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ²Π΅ΡΡ HTTP/2, Π° Π±ΡΠ°ΡΠ·Π΅ΡΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ HTTP/2 API ΠΈΠ· JavaScript (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, WebSocket ΠΈΠ»ΠΈ fetch Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ Β«Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΊΠ°Π½Π°Π»ΡΒ»).
π§ Π Π΅ΡΠ΅Π½ΠΈΡ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ gRPC-Web β ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΊΡΠΈ-ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΡ (Envoy, grpc-web-proxy ΠΈ Ρ. Π΄.), ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅Ρ gRPC-Π·Π°ΠΏΡΠΎΡΡ Π² HTTP 1.1 ΠΈΠ»ΠΈ JSON ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ.
- ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°: REST API + gRPC Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
β ΠΠ΅Π· ΠΏΡΠΎΠΊΡΠΈ gRPC Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅!
2. π§ ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ
gRPC ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ:
- .proto ΡΠ°ΠΉΠ»ΠΎΠ²
- Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°
- Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ protoc
- ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Protobuf-ΡΠΎΡΠΌΠ°ΡΠ°
ΠΠ»Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ² ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π·ΠΊΠΈΠΌ Β«ΠΏΠΎΡΠΎΠ³ΠΎΠΌ Π²Ρ ΠΎΠ΄Π°Β».
π¨βπ§ ΠΡΠ»ΠΈ ΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ CRUD-ΡΠ΅ΡΠ²ΠΈΡ, REST Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ΅ Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ.
3. π§° Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅
Π‘ gRPC Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΎΡΡΠΎ Β«ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ curl-Π·Π°ΠΏΡΠΎΡΒ» ΠΊΠ°ΠΊ Ρ REST:
β ΠΠ΅Π»ΡΠ·Ρ Β«Π²ΡΡΠ°Π²ΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΒ» ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ.
β
ΠΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π²ΡΠΎΠ΄Π΅ grpcurl, Postman (Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ), BloomRPC ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ Π²ΡΡΡΠ½ΡΡ.
Π’Π°ΠΊΠΆΠ΅ ΡΠΎΡΠΌΠ°Ρ ΠΎΡΠ²Π΅ΡΠ° β Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ Protobuf, Π° Π½Π΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΡΠΈΡΠ°Π΅ΠΌΡΠΉ JSON.
4. π¦ ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ Π²ΡΠ±ΠΎΡ middleware ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
Π₯ΠΎΡΡ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ°Π·Π²ΠΈΡΠ°, Π²ΡΡ ΠΆΠ΅:
- ΠΠΎΠ»ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ middleware ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π»Ρ REST (Π»ΠΎΠ³Π³Π΅ΡΡ, ΡΡΠ΅ΠΉΡΠΈΠ½Π³, ΠΊΠ΅ΡΠΈ ΠΈ Ρ.βΠΏ.)
- gRPC-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΏΡΠΎΡΡ ΠΈ ΠΎΠ±ΡΡΡΠΊΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΠΎΠΌΡ
5. π ΠΠ΅ Π²ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ ΠΎΡΠΎΡΠΎ
Π₯ΠΎΡΡ gRPC ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Go, Java, Python, C++ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
- Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Python gRPC ΡΡΡΡΠΏΠ°Π΅Ρ Go ΠΈΠ»ΠΈ C++ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ;
- ΠΠ° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ gRPC Lite/gRPC-Web ΠΈΠ»ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
6. π§ͺ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ ΡΡΡΠ½ΡΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ gRPC ΡΡΠ΅Π±ΡΠ΅Ρ:
- Π·Π½Π°Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ .proto
- Π½Π°Π»ΠΈΡΠΈΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ stubs
- Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²
π¨βπ» REST ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² Postman Β«Π² Π»ΠΎΠ±Β», Π±Π΅Π· ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ. Π‘ gRPC ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ.
7. πΊ ΠΠ΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ
Π REST ΠΌΡ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΠΊ Swagger/OpenAPI β ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ API, UI, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
β‘οΈ Π£ gRPC Π½Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ UI Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π΄Π»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ (gRPC-Gateway + Swagger Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, Π½ΠΎ ΡΡΠΎ Β«ΠΊΠΎΡΡΡΠ»ΡΒ»).
π§ Π₯ΠΎΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ (Buf, grpcdoc, grpcui), Π²ΡΡ ΠΆΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ API β Π½Π΅ ΡΠ°ΠΊΠ°Ρ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½Π°Ρ, ΠΊΠ°ΠΊ Π² REST.
8. πΆ ΠΠΎΠ²ΡΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅
- gRPC ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ HTTP/2, ΠΏΠΎΡΡΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ
- ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈΠ»ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ nginx, ELB) ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ gRPC ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π±ΠΎΠ»ΡΡΠ°Ρ Β«ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΒ» ΠΏΠΎΠ΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ, Π½ΠΎ Π² ΡΠ»Π°Π±ΡΡ ΡΠ΅ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 2G/3G) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ΅ΡΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ
π‘ ΠΠΎΠ³Π΄Π° gRPC β Π½Π΅ Π»ΡΡΡΠΈΠΉ Π²ΡΠ±ΠΎΡ?
- ΠΡΠ»ΠΈ ΠΏΠΈΡΠ΅ΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ΅ API Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ β ΡΡΠΎΠ½ΡΠ΅Π½Π΄ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅)
- ΠΡΠ»ΠΈ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊ/ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Protobuf/gRPC
- ΠΡΠ»ΠΈ MVP ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ, Π³Π΄Π΅ ΠΏΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JSON/HTTP 1.1
- ΠΡΠ»ΠΈ Π²Π°ΠΆΠ½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌΠΈ REST-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ
π’ ΠΠΎΠ³Π΄Π° Π²ΡΡ-ΡΠ°ΠΊΠΈ ΡΡΠΎΠΈΡ Π²ΡΠ±ΡΠ°ΡΡ gRPC
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΌΠΈΠ½ΡΡΡ, gRPC ΠΎΡΡΠ°ΡΡΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ, Π΅ΡΠ»ΠΈ:
β
Π£ Π²Π°Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°
β
ΠΡΠΆΠ½Π° Π²ΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ
β
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ (multi-language)
β
ΠΠ»ΠΈΠ΅Π½ΡΡ β ΡΡΠΎ backend ΡΠ΅ΡΠ²ΠΈΡΡ, Π° Π½Π΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ
π ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
gRPC β ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π±ΡΡΡΡΡΡ API, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ. ΠΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΡΡΠ°ΡΠΈΠΊ Π·Π° ΡΡΡΡ Protobuf ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ β ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΡΡΠΈΠΌΠΈΠ½Π³ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π°.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ Π΅Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ : Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, Π½Π΅ΠΏΡΡΠΌΠ°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΎΡΠ»Π°Π΄ΠΊΠ΅.
ΠΡΠ»ΠΈ ΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΠΉ Π±ΡΠΊΠ΅Π½Π΄, Π³Π΄Π΅ Π²Π°ΠΆΠ½Π° ΡΠΊΠΎΡΠΎΡΡΡ, Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ β gRPC ΡΡΠ°Π½Π΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ. Π Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ API REST, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, ΠΎΡΡΠ°ΡΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΡΠ»ΠΈ ΡΡ Π΅ΡΡ Π½Π΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» gRPC β ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉ.
β ΠΡΠ»ΠΈ Π²Π°ΠΌ Π±ΡΠ»ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ β ΡΡΠ°Π²ΡΡΠ΅ π ΠΈ Π΄Π΅Π»ΠΈΡΠ΅ΡΡ Ρ Π΄ΡΡΠ·ΡΡΠΌΠΈ!
β ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π²ΠΎΠΏΡΠΎΡΡ β ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ!
ΠΠΎ Π²ΡΡΡΠ΅ΡΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ π