Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ swagger api
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API Ρ ΠΏΠΎΠΌΠΎΡΡΡ OpenAPI 3 ΠΈ Swagger
ΠΠ΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ API Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½ΠΈΠΌ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Π±ΡΡΡΡΠ΅Π΅ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ. ΠΡΠ»ΠΈ API Π·Π°ΠΊΡΡΡ ΠΎΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ°, ΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠΎΠΈΡ ΡΠ΄Π΅Π»ΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Swagger?
Swagger Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ API Π² Π²ΠΈΠ΄Π΅ json. Π ΠΏΡΠΎΠ΅ΠΊΡ Springdoc ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΉ UI Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Π½ΠΎ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°ΠΏΡΠΎΡΡ, ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΡΠ²Π΅ΡΡ.
Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ API Swagger, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ΅Π½ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠ΄Π° Swagger-Codegen.
Swagger ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π²ΡΠ΅ ΠΊΠ°ΠΊ ΠΌΡ Π»ΡΠ±ΠΈΠΌ. Π Π°Π·ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, DTO.
ΠΡ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΡΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ REST API
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ API, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π΅Π³ΠΎ 😄 ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ.
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΠΈ ΠΎΠ΄Π½ΠΎ DTO. Π‘ΡΡΡ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π»ΠΎΡΠ»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠ»Ρ Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠΎΠ·Π²ΠΎΠ»Ρ ΡΠ΅Π±Π΅ Π²ΠΎΠ»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠ½ΡΠΉ ΡΠ»ΠΎΠΉ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ. Π ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΡΠ°ΠΊ Π½Π΅ Π΄Π΅Π»Π°ΡΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ DTO Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠ»Π°ΡΡ UserDto β ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π£ Π½Π΅Π³ΠΎ ΠΏΡΡΡ ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ 3 ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ:
UserController ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
PointContoller ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π±Π°Π»Π»Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π±Π°Π»ΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ.
ΠΠ΅ΡΠΎΠ΄ destroy Π² SecretContoller ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Swagger
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Swagger Π² Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡ.
Swagger Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ HTTP (DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT).
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅: ΡΡΠ°ΡΡΡ ΠΎΡΠ²Π΅ΡΠ°, ΡΠΈΠΏ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΡΠΎΠΌ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ: localhost:8080/swagger-ui.html
Swagger Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ Ρ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΡΠΊΡΠΎΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠΎΠΊΠ° Ρ Π½Π°Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠΎ.
ΠΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΡΠ°ΡΠΎΡΡ UI Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΡΠΎΠ²
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² API, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊΡΠΎ Π² ΠΎΡΠ²Π΅ΡΠ΅ Π·Π° ΡΡΠΎ Π±Π΅Π·ΠΎΠ±ΡΠ°Π·ΠΈΠ΅ 😄
Π Π°Π·ΠΌΠ΅ΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ²
Π‘ΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΊΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Swagger. ΠΠ½ Π²ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ Π²Π°ΡΠ΅Π³ΠΎ API.
ΠΠ°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΡΠ°Π»Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°.
Π Π°Π·ΠΌΠ΅ΡΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ @Operation ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
Π Π°Π·ΠΌΠ΅ΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°
ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Parameter ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π»Π»Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° required ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅.
Π Π°Π·ΠΌΠ΅ΡΠΊΠ° DTO
Π‘Π²Π°Π³Π³Π΅Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠΎΡΠΌΠ°Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ: enum, Π΄Π°ΡΡ. ΠΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Ρ DTO ΠΈΠΌΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ, ΡΠΎ ΠΏΠΎΠΌΠΎΠ³ΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΡΠΈΠΌΠ΅Ρ.
ΠΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊ:
ΠΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅, Π·Π°ΡΠ΅ΠΌ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΄Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ. ΠΠ° ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. Π‘ΠΊΡΠΎΠ΅ΠΌ ΡΡΠΈ ΠΏΠΎΠ»Ρ ΠΈΠ· swagger Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Schema.AccessMode.READ_ONLY :
ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
Π Π²ΡΠ΅ ΡΡΠΎ Π½Π°ΠΌ Π½Π΅ ΡΡΠΎΠΈΠ»ΠΎ Π½ΠΈ ΠΌΠ°Π»Π΅ΠΉΡΠ΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»ΠΈΡ.
ΠΡΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π²Π°ΠΌ Ρ Π²Π°ΡΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ API Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ½ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΡΠΎ Π²Ρ Π±Π΅Π· ΡΡΡΠ΄Π° ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΎΡΠΊΡΡΠ² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌ ΡΠ²Π°Π³Π³Π΅ΡΠ°.
Swagger β ΡΠΌΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ RESTful web-API β ΠΎΠ±Π·ΠΎΡ Junior back-end developer-Π° Π΄Π»Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ²
ΠΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅
ΠΠΎΠΌΠ°Π½Π΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ΄Π΅Π»Π°Π»Π° ΡΠ²ΠΎΠΈ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π³ΠΈ Π½Π° ΠΏΠΎΠΏΡΠΈΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π·Π°Π½ΠΈΠΌΠ°Π»Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ API ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π½Π° C# (Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π±ΡΠΊΠ²ΠΎΠΉ E), ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π²ΡΠ΅Π³ΠΎ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ ΠΈ Π·Π°ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π²ΡΠ΅Π³ΠΎ ΡΠ΅Π±Ρ Π½Π° ΡΡΠ½ΠΊΠ΅ Ρ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ. Π Π·Π΄Π΅ΡΡ Π²ΡΠΎΠ΄Π΅ Π±Ρ Ρ ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°Π΄Π°Π²Π°Π½Π° ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±Π΅, ΡΡΠΎ ΡΠ°Π½Π΅Π΅ Π²Ρ, ΡΠΊΠΎΡΠ΅ΠΉ Π²ΡΠ΅Π³ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΠΈΡΠ°Π»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ web-API, Π½ΠΎ Π²ΡΡΠ΄ Π»ΠΈ Π΄Π»Ρ ΡΠΈΡΠΎΠΊΠΎΠΉ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠΈ, Π° Π·Π½Π°ΡΠΈΡ ΠΆΠΈΠ»ΠΈ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Β«Π‘Π°ΠΌ ΡΠΎΠ·Π΄Π°Π» β ΡΠ°ΠΌ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΒ», ΠΈ Π΅ΡΠ»ΠΈ Π²Π΄ΡΡΠ³ ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π±Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ API, ΡΠΎ Π²Ρ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, ΠΊΠΈΠ½ΡΠ»ΠΈ Π±Ρ Π΅ΠΌΡ pdf-ΡΠ°ΠΉΠ» Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Ρ Π±Ρ ΡΠ΄Π΅Π»Π°Π»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ). Β«ΠΠ΄Π΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π°ΠΏΠΈΒ» β ΡΠΏΡΠΎΡΠΈΠ»Π° Ρ ΡΠΈΠΌΠ»ΠΈΠ΄Π° ΠΎΠΆΠΈΠ΄Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ. Β«ΠΠ°Π³Π»ΡΠ½ΠΈ Π² SwaggerΒ» β ΠΎΡΠ²Π΅ΡΠΈΠ» ΠΎΠ½.
ΠΠΎΡΡΠΎΠΉ, ΠΊΠ°ΠΊ ΡΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΠ΅Ρ ΡΠΆΠ΅ Π΄Π°Π²Π½ΠΎ, Π° API Π²Ρ ΠΊ Π½Π΅ΠΌΡ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΉΡΠ°Ρ?
ΠΡΠ΅ Π²Π΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ API Ρ E Π΄ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ»Π° ΡΠ΅ΡΠ΅Π· web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π° back-end ΡΠΎΡΡΠΎΡΠ» ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ², Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΠ·Π²Π½Π΅ Π±Π΅Π· ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ, ΡΠΆ Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΌΠΈ ΠΎΠ½ΠΈ Π½Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄ΠΎΠ»Ρ ΡΠΎΡΡΠΎΡΠ»ΠΈ ΠΈΠ· Π»Π΅Π³Π°ΡΠΈ. ΠΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ
ΠΎΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π°ΠΏΡΡΠΌΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π° Π·Π½Π°ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΠΌ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ API. Π§ΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ? ΠΡΠ΅, ΠΎ ΡΠ΅ΠΌ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΡΡΡ ΡΠ°Π½ΡΡΠ΅ β ΡΠ°ΠΌΠΈΠΌ Π²Π·ΡΡΡ ΠΈ Π½Π°Π»Π°Π΄ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΈ ΠΊΡΠ°ΡΠΈΠ²ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΠ΄Π΅Π»Π°Π² ΡΡΠΎ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΈ ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ β ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π₯ΠΎΡΠΎΡΠΎ, ΡΠ°ΠΊ ΡΡΠΎ ΠΆΠ΅ Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠ΅ Swagger ΠΈ Π² ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΡ ΠΌΠΈΡΡ?
ΠΠΎ ΡΡΡΠΈ Swagger β ΡΡΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ RESTful API. ΠΠ³ΠΎ ΠΏΡΠ΅Π»Π΅ΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π½ΠΎ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°ΠΏΡΠΎΡΡ β ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ Swagger UI, Π²ΠΎΡ ΡΠ°ΠΊ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ:
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ β ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΠ΄Ρ ΠΎΡΠ²Π΅ΡΠΎΠ², ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° β Π² ΠΎΠ±ΡΠ΅ΠΌ, Π½Π°Π³Π»ΡΠ΄Π½ΠΎ.
Π ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ?
ΠΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Swagger Π² ASP.NET Core
Ρ Π½ΡΠ»Ρ Π΅ΡΡΡ Π²ΠΎΡ Π² ΡΡΠΎΠΉ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠ΄Π΅Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² API, Π²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
Swagger Codegen
ΠΡΠ»ΠΈ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅ΡΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ API Swagger, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ΅Π½ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠ΄Π° Swagger-Codegen. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π΄ΡΠΌΠ°Ρ, ΠΏΠΎΡΡΠ½ΡΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ:
This is the Swagger Codegen project, which allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec. Currently, the following languages/frameworks are supported:
ΠΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π·Π΄Π΅ΡΡ:
ΠΠ±ΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API Π² Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Swagger ΠΈ OpenAPI 3.0
ΠΠ΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ API Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½ΠΈΠΌ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Π±ΡΡΡΡΠ΅Π΅ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ. ΠΡΠ»ΠΈ API Π·Π°ΠΊΡΡΡ ΠΎΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ°, ΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠΎΠΈΡ ΡΠ΄Π΅Π»ΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ β ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΡΠΈΠΌ Π½ΠΎΠ²ΡΠΌ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ Π±ΡΡΡΡΠ΅Π΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π²ΡΡΡΠ½ΡΡ β ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. Swagger ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΡΡ ΡΠ°Π±ΠΎΡΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Swagger?
Swagger Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ API Π² Π²ΠΈΠ΄Π΅ json. Π ΠΏΡΠΎΠ΅ΠΊΡ Springdoc ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΉ UI Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Π½ΠΎ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°ΠΏΡΠΎΡΡ, ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΡΠ²Π΅ΡΡ.
Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ API Swagger, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ΅Π½ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠ΄Π° Swagger-Codegen.
Swagger ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π²ΡΠ΅ ΠΊΠ°ΠΊ ΠΌΡ Π»ΡΠ±ΠΈΠΌ. Π Π°Π·ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, DTO.
ΠΡ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΡΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ REST API
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ API, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π΅Π³ΠΎ π ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ.
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΠΈ ΠΎΠ΄Π½ΠΎ DTO. Π‘ΡΡΡ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π»ΠΎΡΠ»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠ»Ρ Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠΎΠ·Π²ΠΎΠ»Ρ ΡΠ΅Π±Π΅ Π²ΠΎΠ»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠ½ΡΠΉ ΡΠ»ΠΎΠΉ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ. Π ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΡΠ°ΠΊ Π½Π΅ Π΄Π΅Π»Π°ΡΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ DTO Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠ»Π°ΡΡ UserDto β ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π£ Π½Π΅Π³ΠΎ ΠΏΡΡΡ ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ 3 ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ: ΠΈΠΌΡ, ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΠΏΠΎΠ» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°Π»Π»ΠΎΠ², Π΄Π°ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ
UserController ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
PointContoller ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π±Π°Π»Π»Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π±Π°Π»ΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ.
ΠΠ΅ΡΠΎΠ΄ destroy Π² SecretContoller ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Swagger
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Swagger Π² Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡ.
Swagger Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ HTTP (DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT).
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅: ΡΡΠ°ΡΡΡ ΠΎΡΠ²Π΅ΡΠ°, ΡΠΈΠΏ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΡΠΎΠΌ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ: localhost:8080/swagger-ui.html
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΡΠΊΡΠΎΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠΎΠΊΠ° Ρ Π½Π°Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠΎ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ²Π°Π³Π³Π΅ΡΠ° SwaggerConfig β ΠΈΠΌΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅.
ΠΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΡΠ°ΡΠΎΡΡ UI Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΡΠΎΠ²
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² API, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊΡΠΎ Π² ΠΎΡΠ²Π΅ΡΠ΅ Π·Π° ΡΡΠΎ Π±Π΅Π·ΠΎΠ±ΡΠ°Π·ΠΈΠ΅
Π Π°Π·ΠΌΠ΅ΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ²
Π‘ΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΊΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Swagger. ΠΠ½ Π²ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ Π²Π°ΡΠ΅Π³ΠΎ API.
ΠΠ°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΡΠ°Π»Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°.
Π Π°Π·ΠΌΠ΅ΡΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ @Operation ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
Π Π°Π·ΠΌΠ΅ΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°
ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Parameter ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π»Π»Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° required ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅.
Π Π°Π·ΠΌΠ΅ΡΠΊΠ° DTO
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ°ΡΠ°ΡΡΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π°ΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎ-ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠΉ DTO ΠΈ Π΅Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Schema
Π‘Π²Π°Π³Π³Π΅Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠΎΡΠΌΠ°Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ: enum, Π΄Π°ΡΡ. ΠΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Ρ DTO ΠΈΠΌΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ, ΡΠΎ ΠΏΠΎΠΌΠΎΠ³ΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΡΠΈΠΌΠ΅Ρ.
ΠΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊ:
ΠΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅, Π·Π°ΡΠ΅ΠΌ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΄Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ. ΠΠ° ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. Π‘ΠΊΡΠΎΠ΅ΠΌ ΡΡΠΈ ΠΏΠΎΠ»Ρ ΠΈΠ· swagger Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Schema.AccessMode.READ_ONLY :
ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
Π Π²ΡΠ΅ ΡΡΠΎ Π½Π°ΠΌ Π½Π΅ ΡΡΠΎΠΈΠ»ΠΎ Π½ΠΈ ΠΌΠ°Π»Π΅ΠΉΡΠ΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»ΠΈΡ.
ΠΡΠΈΡ Π·Π½Π°Π½ΠΈΠΉ Π²Π°ΠΌ Ρ Π²Π°ΡΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ API Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ½ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΡΠΎ Π²Ρ Π±Π΅Π· ΡΡΡΠ΄Π° ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΎΡΠΊΡΡΠ² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌ ΡΠ²Π°Π³Π³Π΅ΡΠ°.
Swagger (OpenAPI 3.0)
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. ΠΡΠΎ ΠΌΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΡ Π½Π° Π₯Π°Π±ΡΠ΅ ΠΈ Ρ Ρ ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ Π²Π°ΠΌΠΈ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΠ΅Π±Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°.
ΠΠ½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ΅ΠΌΡ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ΄ΠΎΡ Π½ΠΎΠ²ΠΈΠ²ΡΠΈΡΡ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠΌ ΠΠ²Π³Π΅Π½ΠΈΠΉ ΠΠ°ΡΠ΅Π½ΠΊΠΎΠ²ΡΠΌ, Ρ ΡΠ΅ΡΠΈΠ» Π²ΡΠ±ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΌΡ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ, Ρ ΠΎΠ±Π»Π°Π·ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠ΅ΠΉ ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π΄ΠΎΠ½Π΅ΡΡΠΈ Π½ΡΠΆΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
Π‘Π΅ΠΉΡΠ°Ρ Ρ ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Π΅Ρ Π² Π½Π°Π΄Π΅ΠΆΠ΄Π΅, ΡΡΠΎ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΎΠ½Π° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π² ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ Swagger (OpenApi 3.0)
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π― Π½Π° 99% ΡΠ²Π΅ΡΠ΅Π½ Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΠΈΠ· Π²Π°Ρ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΠΈΡΠΊΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π²Π°ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π΅ΡΠ»ΠΈ ΠΈ Π½Π°Ρ
ΠΎΠ΄ΠΈΠ»ΠΈ Π΅Π΅ Π±ΡΡΡΡΠΎ, Π½ΠΎ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π»ΠΎΡΡ ΡΡΠΎ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π΅Π³ΠΎ ΡΠΆΠ΅ Π½Π΅Ρ.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ Π²Π°ΠΌ Π΄ΠΎΠΊΠ°ΠΆΡ, ΡΡΠΎ Π΅ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈ Π² ΡΡΠΎΠΌ ΠΌΠ½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Open Source framework ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ SmartBear ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Swagger, Π° Ρ 2016 Π³ΠΎΠ΄Π° ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΠ» Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΡΠ°Π» Π½Π°Π·ΡΠ²Π°ΡΡΡΡ OpenAPI Specification.
Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ API Swagger, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Swagger Codegen.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ
Swagger ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΈΡΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ «ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ». ΠΠ°ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΠΏΡΠΎΠ΅ΠΊΡ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ ΡΠΆΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΠΌΠ΅ΡΡ Π½ΡΠΆΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Ρ ΠΎΡΡ ΠΈ Π½Π΅ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊΠΎΡ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ.
ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΡΠΌ ΠΎΡ ΠΎΠ±ΠΈΠ»ΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π² Π½ΠΈΡ .
ΠΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΠΏΠΈΡΠ°Π½Π° Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ (Π²ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² Π½Π΅ΠΊΠΈΠΉ Java Swagger Code)
ΠΠΎΠ΄Ρ ΠΎΠ΄ Π½Π΅ ΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π΅Π³ΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΈΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ ΠΊΠΎΠ΄Π°.
ΠΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π½Π°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Swagger Specification.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΈΡΠ΅ΡΡΡ Π»ΠΈΠ±ΠΎ Π² YAML/JSON ΡΠ°ΠΉΠ»Π΅, Π»ΠΈΠ±ΠΎ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ Swagger Editor.
Swagger Tools
Swagger ΠΈΠ»ΠΈ OpenAPI framework ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 4 ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
Swagger Core
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Swagger Core Π²ΠΎ Π²ΡΠ΅ ΠΎΡΡΠ΄ΠΈΠ΅, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ:
Apache Maven 3.0.3 ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅
Jackson 2.4.5 ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅
Π§ΡΠΎ Π±Ρ Π²Π½Π΅Π΄ΡΠΈΡΡ Π΅Π³ΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ maven ΠΏΠ»Π°Π³ΠΈΠ½, ΡΡΠΎ Π±Ρ Π½Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΡΡ Π² YAML
ΠΠ°Π»ΡΡΠ΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ Π² ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Swagger Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π²Π° Π±ΠΈΠ½Π°. ΠΠ΄Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²Π΅ΡΡΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ API, ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π΄Π°Π½Π½ΡΠ΅ API
ΠΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΡΡ Π½Π°ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Ρ Π½Π°Ρ ΠΏΠΎΡΠ²ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Ρ ΠΊΠΎΠ΄.
ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ :
Swagger Codegen
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ·ΡΠΊΠΈ / ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ:
Java (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured)
Scala (akka, http4s, swagger-async-httpclient)
Node.js (ES5, ES6, AngularJS with Google Closure Compiler annotations)
Haskell (http-client, Servant)
C# (.net 2.0, 3.5 or later)
C++ (cpprest, Qt5, Tizen)
Java (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, RestEasy, Play Framework, PKMST)
C# (ASP.NET Core, NancyFx)
C++ (Pistache, Restbed)
Ruby (Sinatra, Rails5)
API documentation generators:
Π§ΡΠΎ Π±Ρ Π²Π½Π΅Π΄ΡΠΈΡΡ Π΅Π³ΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Swagger:
ΠΈ Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ OpenApi 3.0, ΡΠΎ:
ΠΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ maven ΠΏΠ»Π°Π³ΠΈΠ½, ΠΈ ΡΠΆΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΡΠΆΠ½ΡΠΉ Π΄Π»Ρ Π½Π°Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΊ ΡΠ΅ΡΠ²ΠΈΡΠ°.
Π’Π°ΠΊΠΆΠ΅ Π²ΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΠ°ΠΏΡΡΡΠΈΠ² Π΄ΠΆΠ°ΡΠ½ΠΈΠΊ codegen ΠΈ Π·Π°Π΄Π°Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ help ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌ Swagger Codegen:
ΠΠ»Ρ Π½Π°Ρ ΡΠ°ΠΌΡΠ΅ Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠΎ validate, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΡΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ generate, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Client Π½Π° ΡΠ·ΡΠΊΠ΅ Java
Swagger UI
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Swagger UI ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΠΌΠΎΠ΅Π³ΠΎ pet-project:
ΠΠ°ΠΆΠ°Π²ΡΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «Try it out», ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ Π·Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ ΠΎΡ Π½Π΅Π³ΠΎ:
Swagger Editor
ΠΠ° Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI 3.0 ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ½ΡΡΡΠΈ ΡΡΠΈΡ Π²Π΅ΡΡ Π½Π΅ΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π½ΠΎ Π½Π° Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ:
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Swagger Π Π΅Π΄Π°ΠΊΡΠΎΡ Swagger ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅: ΡΠ»Π΅Π²Π° ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π° ΡΠΏΡΠ°Π²Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ Swagger UI. ΠΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Swagger Π² ΡΡΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅.
Π Π΅Π΄Π°ΠΊΡΠΎΡ Swagger ΠΏΡΠΎΠ²Π΅ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΡΠΊΠ°ΠΆΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠ΅ ΡΡΠΎΠΈΡ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , Π΅ΡΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ X-ΠΌΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅, Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ ΠΈΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°.
ΠΠ΅ΡΠ²ΡΠΌ ΠΈ Π²Π°ΠΆΠ½ΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Π΄Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠΎ openapi. Π ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²Π΅ΡΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI. ΠΠ»Ρ Swagger ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ swagger:
ΠΠ±ΡΠ΅ΠΊΡ info ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π°ΡΠ΅ΠΌ API,Π²ΠΊΠ»ΡΡΠ°Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, Π²Π΅ΡΡΠΈΡ, ΡΡΡΠ»ΠΊΡ Π½Π° Π»ΠΈΡΠ΅Π½Π·ΠΈΡ, ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ²Π»ΡΡΡΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ.
ΠΠ±ΡΠ΅ΠΊΡ components ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΡΡΠ΅Π΄ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI. Π components Ρ ΡΠ°Π½ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. Π Π½Π°ΡΠ΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ API ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Ρ ΡΠ°Π½ΠΈΡΡ Π΄Π΅ΡΠ°Π»ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² parameters ΠΈ responses Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ components
Conclusions
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΡΠ°Π»Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½Π΅ΠΉ Π΄Π»Ρ Π±ΠΈΠ·Π½Π΅Ρ ΡΠ·Π΅ΡΠ° ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ·Π΅ΡΠ°ΠΌ (Swagger UI, Open Specifiation)
ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΡΠΎ Π² Π΄ΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ΅
ΠΠ΅Ρ Π½ΠΈ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΡΠ½Π΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΠ΄ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ
ΠΠ½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΌΠΈ OpenAPI ΠΈ Swagger
OpenAPI ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ REST API. ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ OpenAPI ΠΊΠ°ΠΊ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ DITA. Π DITA ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ XML, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ Π΄Π»Ρ ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ DITA ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π²Π΅Π±-ΡΠ°ΠΉΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
Π OpenAPI Π²ΠΌΠ΅ΡΡΠΎ XML ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² JSON Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡ Π΅ΠΌΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΡ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅. ΠΡΠΎΡ ΡΠ°ΠΉΠ» JSON (ΡΠ°ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² YAML Π²ΠΌΠ΅ΡΡΠΎ JSON) ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ°ΡΡΡ API. ΠΠΏΠΈΡΡΠ²Π°Ρ API Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± API ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π² ΡΡΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
ΠΠ·Π³Π»ΡΠ΄ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ OpenAPI
Π§ΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ OpenAPI, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ΄Π΅ΡΠΆΠΊΠΈ ΠΈΠ· ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. Π£Π³Π»ΡΠ±ΠΈΠΌΡΡ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ .
ΠΡΠΎ ΡΠΎΡΠΌΠ°Ρ YAML, Π²Π·ΡΡ ΠΈΠ· Swagger PetStore
ΠΠΎΡ ΡΡΠΎ Π·Π½Π°ΡΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅:
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ Swagger. Π Π΅Π΄Π°ΠΊΡΠΎΡ Swagger Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ.
ΠΡΠ»ΠΈ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ Swagger, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΅Π΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΆΠ΄Π°ΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΡΡΡΠ°Π½ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
YAML Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠΉ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’Π°ΠΊΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΠΎ-ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ Π΄Π»Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ ΡΠ°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠ².
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ°ΠΉΠ»Π° OpenAPI ΠΈΠ· Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΊΠΎΠ΄Π°
ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI Π²ΡΡΡΠ½ΡΡ, ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΈΠ· Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ», Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
Swagger ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Swagger Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI. ΠΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Swagger Codegen. ΠΠ΅ΡΠΎΠ΄Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Swagger Π΄Π»Ρ Scalatra. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Codegen ΡΠΌ. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° API Π΄Π»Ρ Swagger ΠΏΠΎ API Evangelist. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΌ. Π ΡΠ°Π·Π΄Π΅Π»Π°Ρ Β«ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ SwaggerΒ» ΠΈ Β«ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌΒ».
Π₯ΠΎΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈ Β«Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΡΒ» Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½ΡΠΆΠ½ΠΎ Π΅ΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ (ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Javadoc). ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ (ΠΎΠΏΠΈΡΡΠ²Π°Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ Ρ. Π.).
ΠΡΠ»ΠΈ ΠΈΠ΄ΡΠΈ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΡΡΠΈ, Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ Π΄Π»Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΡΠ΄ΡΡ ΠΏΠΈΡΠ°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ (ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠ»ΠΎΡ ΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ).
ΠΠΎΠ΄Ρ ΠΎΠ΄: ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
Spec-first development ΡΡΠΎ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ API Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ»Π΅Π΄ΡΠ΅ΡΠ΅ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ Β«ΡΠ½Π°ΡΠ°Π»Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΒ», Π²Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΅Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΠΈΡΡΡ ΠΊΠΎΠ΄.
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΊΠ°ΠΊΠΎΠ²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΡΠ²Π΅ΡΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎΡ Β«ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΒ» ΠΈΠ»ΠΈ Β«ΠΏΠ»Π°Π½Β» Π±ΡΠ» ΠΏΡΠΈΠ½ΡΡ, Π‘ΡΠΎΡ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π² ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ (ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ), ΡΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΠΎ Π½Π΅ ΡΡΠΎΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π±Π΅Π· ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
Π‘Π»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π±ΡΡΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΡΡ ΠΊ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ API, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ², Π±Π΅Π· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ API ΡΠΎΠΌΡ, ΡΡΠΎ Ρ ΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΡΠΌΠΈ API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ (Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ), Π΅ΡΡΡ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Β«Π±ΡΡΡΡΡΠΉ ΡΠ±ΠΎΠΉΒ», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊ ΡΠ°ΡΡΠΎ ΠΎΡΠΌΠ΅ΡΠ°ΡΡ agile ΡΠ½ΡΡΠ·ΠΈΠ°ΡΡΡ. ΠΠ΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ Π²ΡΠΏΡΡΡΠΈΡΡ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ API, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅Π»Π°Π΅Ρ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π²ΡΠΏΡΡΠΊΠ°Ρ . ΠΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² API ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΊΠΎΡΠΌΠ°ΡΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Smartbear, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅Π»Π°Π΅Ρ SwaggerHub (ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π°Π΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΌΠΈ API Swagger), Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ°ΡΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΡΡΠ½ΠΎΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π° Π½Π΅ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ. ΠΠΎΠ΄Ρ ΠΎΠ΄ βspec-first developmentβ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π΄ΠΈ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅Π½ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ². ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π»ΡΡΡΠΈΠ΅ API.
ΠΠ°ΠΆΠ΅ Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ API ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΎΠΆΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ° Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ. ΠΠΎΠΊ-ΡΠ΅ΡΠ²Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΎΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΠ½ ΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π½ΠΎ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ Π² ΠΊΠΎΠ΄Π΅, ΠΈ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΡΠΌ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π ΠΎΠ»Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π’ΠΎΠΌΠ° ΠΠΆΠΎΠ½ΡΠΎΠ½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΡΠ»ΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Swagger ΠΈΠ»ΠΈ OpenAPI, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π» Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI Π²ΡΡΡΠ½ΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ ΡΠ°ΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π» Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, ΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ ΡΠ·ΡΠΊ Π±ΡΠ» Π½Π΅ ΡΠΎΠ΄Π½ΡΠΌ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π±ΡΠ»Π° Π΄Π»Ρ Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π΄Π΅Π»ΠΎΠΌ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Π½Π°ΠΌ Π±ΡΠ΄ΡΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ, Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡΠ΅ Ρ Swagger ΠΈΠ»ΠΈ OpenAPI, Π½ΠΎ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ API (ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΡΡ Π΅ΠΌΠ°Ρ , ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΎΠΌΡ ΠΌΡΡΠ»Π΅Π½ΠΈΡ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°ΠΌ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²Π·ΡΡΡ Π½Π° ΡΠ΅Π±Ρ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Ρ, ΡΡΠΎΠ±Ρ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ Π΄Π΅ΡΠ°Π»ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π»ΡΡΡΠΈΠΌ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
Π ΡΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΈΡΠ°ΡΠ΅Π»ΠΈ ΠΈΠ³ΡΠ°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠΎΠ»Ρ Π² ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²Π΅ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ API. ΠΡΠ»ΠΈ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ , ΡΡΠ° ΡΠΎΠ»Ρ (ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ) ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ API Π΄ΠΎ Π΅Π³ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π»ΠΈΡΡΡ Π½Π° ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ, ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠΈΡ ΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΠΏΡΠΎΡΡΠΎΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΠΊΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π»ΠΈΡΡΡ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ API (Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅, ΠΎΠ±ΡΡΠ½ΠΎ, Π½Π΅ Π²Π»ΠΈΡΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΈΡΠ°ΡΠ΅Π»ΠΈ).
ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI Ρ ΠΏΠΎΠΌΠΎΡΡΡ Swagger UI
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ API, ΠΌΠΎΠΆΠ½ΠΎ βΡΠΊΠΎΡΠΌΠΈΡΡβ ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅ ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Petstore.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI, ΡΠ²Π»ΡΠ΅ΡΡΡ Swagger UI. (ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Β«SwaggerΒ» ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ API, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Β«OpenAPIΒ» ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΠΎΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½Π΅ Π·Π°Π²ΠΈΡΡΡΠ΅ΠΉ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°.) ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Swagger Π΅Π³ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Swagger UI Π΅ΡΡΡ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.
ΠΠΎΠ΄ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Swagger Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΊΡΠ°Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ Swagger ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Open API
ΠΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Swagger UI Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ API ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΏΠΎΠ³ΠΎΠ΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΊΡΡΡΠ°.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡ ΠΊΡΠΈΡΠΈΠΊΡΡΡ Π²ΡΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ ΡΠΏΠΈΡΠΊΠΈ Swagger UI ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠΉ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ ΠΈΠ»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π΄Π΅ΡΠ°Π»ΠΈ. ΠΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡ Π²ΡΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°Π·Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²Π΅ΡΡ API. Π’Π°ΠΊΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Π»ΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠΌ Π½Π°ΡΠ°ΡΡ. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Swagger UI ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΡΠ°ΡΠΊΠΈΠΌ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ ΠΏΠΎ API.
👨💻 ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π°Π½ΡΡΠΈΠ΅: ΠΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ API PetStore Π² Swagger UI
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Swagger, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Petstore.
ΠΠΊΠ½ΠΎ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π² Swagger UI
Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ Pet
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Petstore Π·Π°ΠΏΡΠΎΡΠ°
Swagger UI ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ curl. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ» ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ curl:
Π ΡΠ°Π·Π΄Π΅Π»Π΅ βΠΡΠ²Π΅ΡΡβ Swagger UI Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΠ²Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ XML:
ΠΡΠ»ΠΈ Π²ΡΠ±ΡΠ°ΡΡ Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ βResponse content typeβ JSON, ΡΠΎ Π² ΠΎΡΠ²Π΅ΡΠ΅ Π²Π΅ΡΠ½Π΅ΡΡΡ JSON Π²ΠΌΠ΅ΡΡΠΎ XML.
ΠΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΠΎΠΌΠΈΠΌΠΎ Swagger UI Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ OpenAPI. ΠΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²: Restlet Studio, Apiary, Apigee, Lucybot, Gelato, Readme.io, swagger2postman, ΠΎΡΠ·ΡΠ²ΡΠΈΠ²ΡΡ ΡΠ΅ΠΌΡ swagger-ui, Postman Run Buttons ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
ΠΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ Swagger UI
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠΈΡ ΠΏΡΠΎΡΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠ΅ΡΡΡΠ²Π° Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΡΡΠΎΠ±Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Swagger. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π½Π°Π²ΡΠΊΠΈ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ OpenAPI ΠΈ Swagger UI
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Swagger ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Π°ΠΏΠ΅Π»Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊ ΠΆΠ΅Π»Π°Π½ΠΈΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Β«Π΄Π°ΠΉ ΠΌΠ½Π΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡΒ», Ρ Swagger ΠΈ OpenAPI Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ:
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI, ΠΎΠ½ Π²ΡΠ΅ ΠΆΠ΅ Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΅Π΅ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ API. OpenAPI Π±ΡΡΡΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π΄Π»Ρ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΈ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² (ΠΎΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ° Postman Π΄Π»Ρ ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ API), Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½Π°ΡΠ΅ΠΌ API ΠΈ Π΄Π»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π΅Π΅ Π² Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ API Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ².
Swagger UI ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Ρ ΠΎΡΠΎΡΡΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΡΠΎΡΠΌΡ Π΄Π»Ρ API. ΠΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΈ ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΡΠ°ΡΠΊΠΈΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ). ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΠΎΠ½ΡΡΡ ΠΎΡΠ½ΠΎΠ²Ρ Π²Π°ΡΠ΅Π³ΠΎ API.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenAPI ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ API Ρ Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ API. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½Π΅Ρ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ΅ΡΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²: ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Β«ΠΏΡΡΠΈΒ», ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Β«Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Β», ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Β«Π·Π°ΠΏΡΠΎΡΠ°Β» ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Β«ΡΠ΅Π»Π° Π·Π°ΠΏΡΠΎΡΠ°Β». Π’ΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² REST: Β«BooleanΒ», Β«numberΒ», Β«integerΒ» ΠΈΠ»ΠΈ Β«stringΒ». Π ΠΎΡΠ²Π΅ΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Β«objectsΒ», ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Β«stringsΒ» ΠΈΠ»ΠΈ Β«arraysΒ».
ΠΠΎΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π°ΡΡ Π΅ΡΠ΅ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ API, ΠΊΠΎΡΠΎΡΠ°Ρ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ API Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ.
OpenAPI ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ API, Π½ΠΎ Π΅ΡΠ»ΠΈ API ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π±Π΅Π· Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²Π·Π°ΠΈΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ, ΠΈ Π΅ΡΠ»ΠΈ Π½Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ API Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, OpenAPI ΠΈ Swagger UI ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠΎΡΠ½ΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠΎΠΆΠ½ΠΎ Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡ.
Π‘ ΡΠ°ΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ OpenAPI ΠΈ Swagger UI ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ Π½Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π½Π°ΡΠΈΠΌ API. ΠΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΌΠΎΡΠ½ΡΠΉ ΠΎΠΏΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π Π΅ΡΡΡΡΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΡΠ΅Π½ΠΈΡ
ΠΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± OpenAPI ΠΈ Swagger: