πŸ›  ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ постов-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΎΠΊ ΠΈΠ· LinkedIn ΠΎΡ‚ Alex Xu.



БСгодня обсудим 8 ΠΊΡ€Π°Ρ‚ΠΊΠΈΡ… совСтов ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ эффСктивного API:



πŸ”Ή Π”ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ (Domain Model Driven)

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ структуры URL для RESTful API ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° Π΄ΠΎΠΌΠ΅Π½Π½ΡƒΡŽ модСль.



πŸ”Ή Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ подходящиС HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ API. НапримСр, использованиС PATCH ΠΌΠΎΠΆΠ΅Ρ‚ часто ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для ΠΊΠΎΠΌΠ°Π½Π΄ (интСрСсный ΠΌΠΎΠΌΠ΅Π½Ρ‚ кстати, ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ PATCH ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ, Π½ΠΎ понимаю, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ трудности с ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ использованиСм - Π½ΡƒΠΆΠ½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π”Π° ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ классичСскиС, Ρ‚ΠΎΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠΎΠ³Π»Π°ΡˆΡƒΡΡŒ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ…ΠΎΠ»ΠΈΠ²Π°Ρ€ΠΈΡ‚ΡŒ Π² коммСнтариях).



πŸ”Ή ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ рСализация идСмпотСнтности

ΠŸΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° идСмпотСнтности ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ API. НапримСр, ΠΌΠ΅Ρ‚ΠΎΠ΄ GET всСгда ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Ρ‹ΠΉ, Π½ΠΎ POST часто Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ стал ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Ρ‹ΠΌ.



πŸ”Ή Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ подходящиС HTTP-ΠΊΠΎΠ΄Ρ‹

Π›ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ HTTP-ΠΊΠΎΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ прилоТСния.



πŸ”Ή ВСрсионированиС

ИспользованиС вСрсий API ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ процСсс ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ.



πŸ”Ή Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° Π² URL

ИспользованиС сСмантичСских URL позволяСт ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ API, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² API-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. НапримСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ имя рСсурса вмСсто Π³Π»Π°Π³ΠΎΠ»Π° ΠΈ мноТСствСнныС числа ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… (Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ).



πŸ”Ή ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ слова "batch" / "bulk" Π² ΠΊΠΎΠ½Ρ†Π΅ строки URL для обозначСния массовых дСйствий.



πŸ”Ή Query-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

ИспользованиС Π½Π°Π±ΠΎΡ€Π° ΡƒΡΡ‚ΠΎΡΠ²ΡˆΠΈΡ…ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² URL Π΄Π΅Π»Π°Π΅Ρ‚ API Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ. НапримСр, пагинация, сортировка, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈ Π΄Ρ€.