Π’ соврСмСнном ΠΌΠΈΡ€Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ тСхничСскиС сокращСния Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡˆΠ°Π³Ρƒ, часто вызывая ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ Ρƒ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… спСциалистов ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ², ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ с Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ. Одной ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ‚ΡƒΠΏΠΈΠΊ ΠΏΡ€ΠΈ поискС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, являСтся запрос API SL, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ стандартизированным ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ, Π½ΠΎ часто Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π² контСкстС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… обсуТдСний.

На самом Π΄Π΅Π»Π΅, здСсь ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Π½Π΅ с Π΅Π΄ΠΈΠ½Ρ‹ΠΌ магичСским стандартом, Π° с пСрСсСчСниСм Π΄Π²ΡƒΡ… Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ: Application Programming Interface (API) ΠΈ Service Layer (SL). ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ эти Π΄Π²Π° элСмСнта Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, критичСски Π²Π°ΠΆΠ½ΠΎ для построСния ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… систСм, способных Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ высокиС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, Ρ‡Ρ‚ΠΎ скрываСтся Π·Π° этим сочСтаниСм Π±ΡƒΠΊΠ², ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° слои являСтся Π·ΠΎΠ»ΠΎΡ‚Ρ‹ΠΌ стандартом индустрии ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ внСшним ΠΌΠΈΡ€ΠΎΠΌ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ процСссами вашСго прилоТСния.

Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹: API ΠΈ Service Layer

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΡƒΡ‚ΡŒ API SL, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ этого Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² экосистСмС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. API (интСрфСйс программирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ) β€” это Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ спСцификаций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, выступая Π² Ρ€ΠΎΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ поставщиком услуг ΠΈ ΠΈΡ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΌ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Service Layer (слой сСрвисов) β€” это Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ прилоТСния ΠΈ инкапсулируСт бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ. Π­Ρ‚ΠΎΡ‚ слой выступаСт посрСдником ΠΌΠ΅ΠΆΠ΄Ρƒ интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ΠΈΠ»ΠΈ внСшним API) ΠΈ слоСм доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, обСспСчивая Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… бизнСс-ΠΏΡ€Π°Π²ΠΈΠ». ИмСнно Π² Service Layer происходит основная "магия" прСобразования сырых Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ†Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ говорят ΠΎΠ± API SL, ΠΎΠ½ΠΈ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ API Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΎΡΡŒ ΠΊ Service Layer, минуя лишниС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ звСнья, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ структуру самого слоя сСрвисов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСтся Ρ‡Π΅Ρ€Π΅Π· API. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ API β€” это Π΄Π²Π΅Ρ€ΡŒ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ входят, Π° Service Layer β€” это ΠΊΠΎΠΌΠ½Π°Ρ‚Π°, Π³Π΄Π΅ происходит основная Ρ€Π°Π±ΠΎΡ‚Π°.

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этих понятий позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΈΠ΅ систСмы, Π³Π΄Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ (Π² слоС сСрвисов) Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пСрСписывания Π²Π½Π΅ΡˆΠ½ΠΈΡ… интСрфСйсов (API), Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² долгосрочной пСрспСктивС.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Никогда Π½Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΠΉΡ‚Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ нСпосрСдствСнно Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… API. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ваш интСрфСйс станСт "толстым" ΠΈ Π½Π΅ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π»ΠΈΠ²Ρ‹ΠΌ, Π° тСстированиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… сцСнариСв прСвратится Π² ΠΊΠΎΡˆΠΌΠ°Ρ€.

АрхитСктурная Ρ€ΠΎΠ»ΡŒ Service Layer Π² соврСмСнных прилоТСниях

Π‘Π»ΠΎΠΉ сСрвисов являСтся сСрдцСм любого ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ³ΠΎ прилоТСния, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Π²Π΅Π±-сСрвис, мобильноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ микросСрвисная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. Π•Π³ΠΎ главная Π·Π°Π΄Π°Ρ‡Π° β€” абстрагированиС бизнСс-ΠΏΡ€Π°Π²ΠΈΠ» ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ способов прСдставлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Π‘Π΅Π· Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ выдСлСния Service Layer ΠΊΠΎΠ΄ быстро прСвращаСтся Π² Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡƒΠ±ΠΎΠΊ зависимостСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

Π’ контСкстС взаимодСйствия Ρ‡Π΅Ρ€Π΅Π· API, слой сСрвисов ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ запросы, провСряСт ΠΈΡ… Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния бизнСс-процСссов, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. НапримСр, ΠΏΡ€ΠΈ Π·Π°ΠΊΠ°Π·Π΅ Ρ‚ΠΎΠ²Π°Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· API, ΠΈΠΌΠ΅Π½Π½ΠΎ сСрвисный слой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π° Π½Π° складС, рассчитаСт ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ скидок ΠΈ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ Π·Π°ΠΊΠ°Π·.

ИспользованиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвис ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° свой Π΄ΠΎΠΌΠ΅Π½: сСрвис ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с профилями, сСрвис Π·Π°ΠΊΠ°Π·ΠΎΠ² β€” с транзакциями, Π° сСрвис ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ β€” с рассылками. API Π² Π΄Π°Π½Π½ΠΎΠΉ схСмС выступаСт лишь фасадом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ входящиС HTTP-запросы ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Service Layer.

πŸ“Š Π“Π΄Π΅ Π²Ρ‹ Ρ‡Π°Ρ‰Π΅ всСго Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ?
  • Π’ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… API
  • Π’ Service Layer
  • Π’ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (Stored Procedures)
  • Π’ клиСнтском ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ слоя сСрвисов ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Π½Π΅ затрагивая ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ части систСмы. Π­Ρ‚ΠΎ особСнно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… инфраструктур, Π³Π΄Π΅ рСсурсы ΠΎΠΏΠ»Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ использования.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ взаимодСйствия API ΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ внСшним интСрфСйсом ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ соблюдСния ряда строгих ΠΏΡ€Π°Π²ΠΈΠ». API Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ максимально "Π³Π»ΡƒΠΏΡ‹ΠΌ" Π² ΠΏΠ»Π°Π½Π΅ бизнСс-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ: Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° β€” ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (валидация синтаксиса) ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Service Layer. ВсС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ дальшС, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ сСрвис.

Рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ сцСнарий: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ отправляСт запрос Π½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π΄Π΅Π½Π΅Π³. API-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, провСряСт, Ρ‡Ρ‚ΠΎ поля "сумма" ΠΈ "ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ" ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. ПослС этого ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ сСрвиса transferMoney. ИмСнно сСрвис провСряСт, Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ Π»ΠΈ Π»ΠΈΠΌΠΈΡ‚, Π΅ΡΡ‚ΡŒ Π»ΠΈ дСньги Π½Π° счСтС ΠΈ Π½Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π»ΠΈ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ получатСля.

  • πŸ”Ή Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒ: Service Layer Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ бизнСс-дСйствия Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π»ΠΈΠ±ΠΎ всС сразу, Π»ΠΈΠ±ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, сохраняя Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ….
  • πŸ”Ή Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π² доступа (Authorization) часто Ρ‚Π°ΠΊΠΆΠ΅ дСлСгируСтся сСрвисному слою ΠΈΠ»ΠΈ спСциализированным middleware, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΠΎΠ³ΠΈΠΊΠ° доступа Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ….
  • πŸ”Ή ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: БСрвисный слой ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ кэшСм, возвращая Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· памяти, Ссли ΠΎΠ½ΠΈ Π½Π΅ измСнились, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ускоряСт ΠΎΡ‚Π²Π΅Ρ‚ API.

Вакая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° позволяСт Π»Π΅Π³ΠΊΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ API (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ с REST Π½Π° GraphQL ΠΈΠ»ΠΈ gRPC) Π±Π΅Π· пСрСписывания основной Π»ΠΎΠ³ΠΈΠΊΠΈ прилоТСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ интСрфСйс взаимодСйствия со слоСм сСрвисов остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ DTO (Data Transfer Objects) для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ API ΠΈ Service Layer. Π­Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ Π²Π°ΡˆΡƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ модСль Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… интСрфСйсах ΠΈ повысит Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° раздСлСния слоСв для ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ

Одним ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… прСимущСств раздСлСния API ΠΈ Service Layer являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСзависимого ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π’ высоконагруТСнных систСмах часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ слой API простаиваСт, ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ позволяСт Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ эффСктивно.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, такая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ тСстированиС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡŽΠ½ΠΈΡ‚-тСсты для бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ, Π½Π΅ поднимая Π²Π΅Π±-сСрвСр ΠΈ Π½Π΅ эмулируя HTTP-запросы. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ тСсты быстрСС ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅. Π’Ρ‹ тСстируСтС Ρ‡ΠΈΡΡ‚ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния, ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΎΡ‚ сСтСвых Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΈ особСнностСй ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ сравнСниС характСристик систСмы с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ слоями ΠΈ систСмы, Π³Π΄Π΅ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠ°Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ слоС (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ "God Object" ΠΈΠ»ΠΈ "Big Ball of Mud"):

Π₯арактСристика Π Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ слои (API + SL) ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ (ВсС Π² ΠΎΠ΄Π½ΠΎΠΌ)
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ Высокая (Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ) Низкая (высокий риск regressii)
Π’Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠžΡ‚Π»ΠΈΡ‡Π½Π°Ρ (ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ тСсты) БлоТная (Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅)
Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Высокая (ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ API нСзависимо) Низкая (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠΌΠ°Π΅Ρ‚ всС)
ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (сСрвисы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°) НСвозмоТно (Π»ΠΎΠ³ΠΈΠΊΠ° завязана Π½Π° HTTP)

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· сравнСния, инвСстиции Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΎΠΊΡƒΠΏΠ°ΡŽΡ‚ΡΡ Π½Π° этапС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ развития ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Service Layer становится Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для создания Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Service Layer

НСсмотря Π½Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ прСимущСства, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ слоя сСрвисов. Одна ΠΈΠ· самых распространСнных β€” созданиС "Π°Π½Π΅ΠΌΠΈΡ‡Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ", Π³Π΄Π΅ сСрвисы ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ просто Π² Π½Π°Π±ΠΎΡ€ getters ΠΈ setters, Π° вся Π»ΠΎΠ³ΠΈΠΊΠ° снова ΡƒΡ‚Π΅ΠΊΠ°Π΅Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ сводит Π½Π° Π½Π΅Ρ‚ вСсь смысл выдСлСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ слоя.

Другая ΠΊΡ€Π°ΠΉΠ½ΠΎΡΡ‚ΡŒ β€” созданиС слишком Π³Ρ€Π°Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… сСрвисов, ΠΊΠΎΠ³Π΄Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ΅Π»ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π°Π·Π΄ΡƒΠ²Π°Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΈ слоТностям Π² Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ. Service Layer Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сфокусирован Π½Π° бизнСс-сущностях ΠΈ процСссах, Π° Π½Π΅ Π½Π° CRUD-опСрациях Π½Π°Π΄ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Service Layer

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ цикличСских зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами. Если БСрвис А зависит ΠΎΡ‚ БСрвиса Π‘, Π° БСрвис Π‘ зависит ΠΎΡ‚ БСрвиса А, это Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² проСктирования ΠΈ нСобходимости Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ сСрвисы лишнСй ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ. БСрвис Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π°Ρ‚ для отобраТСния ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ Π²Π°Π»ΡŽΡ‚ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ€Π΅Π³ΠΈΠΎΠ½Π° β€” это Π·Π°Π΄Π°Ρ‡ΠΈ presentation layer ΠΈΠ»ΠΈ спСциализированных ΡƒΡ‚ΠΈΠ»ΠΈΡ‚. Service Layer Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сущностями Π² ΠΈΡ… каноничСском Π²ΠΈΠ΄Π΅.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ API ΠΈ SL

Рассмотрим практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° псСвдокодС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ…. Π’ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ API лишь ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ запрос ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСрвис, delegating всю Ρ€Π°Π±ΠΎΡ‚Ρƒ.

// ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ (API Layer)

public function createUser(Request $request) {

$dto = $request->toDto();

// Π’Ρ‹Π·ΠΎΠ² Service Layer

$user = $this->userService->registerUser($dto);

return response()->json($user);

}

// БСрвис (Service Layer)

public function registerUser(CreateUserDto $dto) {

if ($this->userRepository->exists($dto->email)) {

throw new UserExistsException();

}

// БизнСс-Π»ΠΎΠ³ΠΈΠΊΠ°

$user = new User($dto);

$user->setVerified(false);

$this->userRepository->save($user);

$this->emailService->sendVerification($user);

return $user;

}

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²ΠΈΠ΄Π½ΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ отвСтствСнности. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ рСгистрируСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, провСряСтся Π»ΠΈ email ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ письма. Он просто ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ процСсс. Service Layer ΠΆΠ΅ содСрТит всю Π²Π°ΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ прилоТСния.

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ссли Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ слоСв?

Если ΡΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ API ΠΈ сСрвисов, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· поднятия Π²Π΅Π±-сСрвСра, слоТно ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΊΠ° ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ нСпрСдсказуСмыС части систСмы.

ИспользованиС Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² позволяСт ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ: Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π΅ API, ΠΏΠΎΠΊΠ° бэкСнд-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² Service Layer. Π­Ρ‚ΠΎ ускоряСт процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ сниТаСт количСство ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ слиянии ΠΊΠΎΠ΄Π°.

FAQ: Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Π’ Ρ‡Π΅ΠΌ главная Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΈ сСрвисом?

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ (API слой) ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° транспорт: ΠΏΡ€ΠΈΠ΅ΠΌ HTTP-запроса, Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ ΠΎΡ‚Π²Π΅Ρ‚Π°. БСрвис (Service Layer) ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° бизнСс-смысл: Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС систСмы.

МоТно Π»ΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· Service Layer Π² малСньком ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅?

ВСхничСски ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ это тСхничСский Π΄ΠΎΠ»Π³ с самого Π½Π°Ρ‡Π°Π»Π°. Π”Π°ΠΆΠ΅ Π² Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ слоя сСрвисов Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ сэкономит часы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π±Π΅Π· пСрСписывания всСго ΠΊΠΎΠ΄Π°.

Как API SL влияСт Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ прилоТСния?

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ позволяСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности Π² сСрвисном слоС. Π”Π°ΠΆΠ΅ Ссли Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΎΠ±ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ API (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· прямой Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ интСрфСйс), бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° Π² Service Layer всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ ΠΏΡ€Π°Π²Π° доступа ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ….

НуТно Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвис для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…?

НСт, это ошибка. БСрвисы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ бизнСс-Π΄ΠΎΠΌΠ΅Π½Ρ‹, Π° Π½Π΅ структуру Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Один сСрвис ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нСсколькими Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, Ссли ΠΎΠ½ΠΈ относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ бизнСс-процСссу, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСрвис "Π—Π°ΠΊΠ°Π·Ρ‹" Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π·Π°ΠΊΠ°Π·ΠΎΠ², ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π·Π°ΠΊΠ°Π·Π° ΠΈ статусов.

πŸ’‘

API β€” это Π»ΠΈΡ†ΠΎ вашСго прилоТСния для внСшнСго ΠΌΠΈΡ€Π°, Π° Service Layer β€” Π΅Π³ΠΎ ΠΌΠΎΠ·Π³. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этих Π·ΠΎΠ½ отвСтствСнности являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.