πŸ•Έ 21 Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ваши Π½Π°Π²Ρ‹ΠΊΠΈ проСктирования API Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² уТасном API ΠΈ Π½Π΅ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² ΡƒΠ³Π°Π΄Π°ΠΉΠΊΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡˆΠ°Π³Ρƒ, стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ извСстныС ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. Рассмотрим ΠΈΡ… Π² нСбольшом ΠΎΠ±Π·ΠΎΡ€Π΅.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ публикуСтся с сокращСниями, Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Mohammad Faisal.

НСмного Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Π›ΡŽΠ±ΠΎΠΉ API слСдуСт Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌΡƒ рСсурсно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ ΠΈ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ.

  • рСсурс: Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, User;
  • коллСкция: Π³Ρ€ΡƒΠΏΠΏΠ° рСсурсов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, List of users;
  • URL: мСстополоТСниС рСсурса ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /user.

1. Kebab-case для URL-адрСсов

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π·Π°ΠΊΠ°Π·ΠΎΠ².

ΠŸΠ»ΠΎΡ…ΠΎ:

/systemOrders ΠΈΠ»ΠΈ /system_orders

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

/system-orders

2. CamelCase для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°.

ΠŸΠ»ΠΎΡ…ΠΎ:

/system-orders/{order_id} ΠΈΠ»ΠΈ /system-orders/{OrderId}

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

/system-orders/{orderId}

3. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ число, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π½Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ систСмы.

ΠŸΠ»ΠΎΡ…ΠΎ:

GET /user ΠΈΠ»ΠΈ GET /User

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

GET /users

4. URL начинаСтся с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ заканчиваСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ.

ΠŸΠ»ΠΎΡ…ΠΎ:

GET /shops/:shopId/category/:categoryId/price

Π­Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ здСсь описано свойство, Π° Π½Π΅ рСсурс.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

GET /shops/:shopId/ ΠΈΠ»ΠΈ GET /category/:categoryId

5. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³Π»Π°Π³ΠΎΠ»Ρ‹ Π² URL рСсурса

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³Π»Π°Π³ΠΎΠ»Ρ‹ Π² URL для выраТСния дСйствий. ВмСсто этого ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ описанныС Π½ΠΈΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠŸΠ»ΠΎΡ…ΠΎ:

POST /updateuser/{userId} ΠΈΠ»ΠΈ GET /getusers

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

PUT /user/{userId}

6. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³Π»Π°Π³ΠΎΠ»Ρ‹ Π² URL для Non-Resource

Π£ вас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄, Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»Π°Π³ΠΎΠ»Ρ‹. НапримСр, для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ прСдупрСТдСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

POST /alerts/245743/resend

7. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ camelCase для свойства JSON

Если Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ запроса ΠΈΠ»ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π² JSON, ΠΈΠΌΠ΅Π½Π° свойств Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² camelCase.

ΠŸΠ»ΠΎΡ…ΠΎ:

{
   user_name: Β«Programmer's libraryΒ»
   user_id: Β«1Β»
}

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

{

   userName: Β«Programmer's libraryΒ»

   userId: Β«1Β»

}

8. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

Π‘Π»ΡƒΠΆΠ±Ρ‹ HTTP RESTful Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ API /health, /version ΠΈ /metrics, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

  • /health – ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° запросы с ΠΊΠΎΠ΄ΠΎΠΌ состояния 200 OK;
  • /version – ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° запрос Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ вСрсии;
  • /metrics – эта конСчная Ρ‚ΠΎΡ‡ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, срСднСС врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°.

ΠΠ°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ /debug ΠΈ /status.

9. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ table_name для ΠΈΠΌΠ΅Π½ΠΈ рСсурса

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ рСсурса. Π’ долгосрочной пСрспСктивС такая лСнь ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.

ΠŸΠ»ΠΎΡ…ΠΎ:

product_order

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

product-orders

10. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ инструмСнты проСктирования

БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… инструмСнтов проСктирования API:

  • API Blueprint
  • Swagger

НаличиС Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ обСспСчиваСт ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ клиСнтский ΠΎΠΏΡ‹Ρ‚ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ API.

11. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ порядковый Π½ΠΎΠΌΠ΅Ρ€ Π² качСствС вСрсии

ВсСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ вСрсии для API. НомСр вСрсии Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ v1, v2 ΠΈ Ρ‚. Π΄.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

http://api.domain.com/v1/shops/3/products

Если API ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ внСшними сущностями, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, поэтому использованиС вСрсий ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

12. Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ ΠΎΠ±Ρ‰Π΅Π΅ количСство рСсурсов

Если API Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², всСгда Π²ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ‰Π΅Π΅ количСство рСсурсов Π² ΠΎΡ‚Π²Π΅Ρ‚.

ΠŸΠ»ΠΎΡ…ΠΎ:

{

ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ: [ .

..

]

}

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

{

ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ: [ .

..

],

всСго: 34

}

13. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ограничСния ΠΈ смСщСния

ВсСгда ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ограничСния ΠΈ смСщСния Π² опСрациях GET.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

GET /shops?offset=5&limit=5

Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠΈ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅.

14. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ поля ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запроса

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ объСм Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ fields, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ поля ΠΈΠ· вашСго API.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, адрСс ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ².

GET /shops?fields=id,name,address,contact

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚Π°.

15. НС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π² URL Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ плохая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ URL часто Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· нСобходимости.

ΠŸΠ»ΠΎΡ…ΠΎ:

GET /shops/123?token=some_kind_of_authenticaiton_token

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

ВмСсто этого ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΈΡ… Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅:

Authorization: Bearer xxxxxx, Extra yyyyy

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π΄ΠΎΠ»Π³ΠΎΠ²Π΅Ρ‡Π½Ρ‹ΠΌΠΈ.

16. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Content-Type

Π‘Π΅Ρ€Π²Π΅Ρ€ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ content-type. НапримСр, Ссли Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ application/x-www-form-urlencoded, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ простой запрос POST.

ВсСгда Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, Π° Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ content-type ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ application/json.

17. ИспользованиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² HTTP для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ CRUD

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ слуТат для описания CRUD-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

  • GET: ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ прСдставлСния рСсурса.
  • POST: созданиС Π½ΠΎΠ²Ρ‹Ρ… рСсурсов ΠΈ подрСсурсов.
  • PUT: ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСсурсов.
  • PATCH: ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСсурсов, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ описаны (ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ).
  • DELETE: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСсурсов.

18. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ Π² URL для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… рСсурсов

Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ практичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • GET /shops/2/products: ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈΠ· ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° 2.
  • GET /shops/2/products/31: ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ 31, ΠΈΠ· ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° 2.
  • DELETE /shops/2/products/31: ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ 31 ΠΈΠ· ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° 2.
  • PUT /shops/2/products/31: ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ 31 (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ URL рСсурса, Π° Π½Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ).
  • POST /shops: ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ свСдСния ΠΎ Π½Π΅ΠΌ.

19. CORS

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ CORS (Cross-Origin Resource Sharing) для всСх общСдоступных API.

РассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ CORS-источника Β« * Β» ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OAuth-Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ объСдинСния ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ происхоТдСния.

20. Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» HTTPS (Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ TLS) ΠΊΠΎ всСм ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ, рСсурсам ΠΈ слуТбам.

HTTPS Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρƒ всСх ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ², эндпоинтов, push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈ Π²Π΅Π±-Ρ…ΡƒΠΊΠΎΠ².

21. Ошибки

Ошибки Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ запрос ΠΊ слуТбС ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ слуТбС Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ‚Π° отклоняСт запрос. ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, нСизвСстныС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ вСрсий ΠΈ Ρ‚. Π΄.

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΈ запроса ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ошибок слуТбы Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΊΠΎΠ΄Ρ‹ HTTP – 4xx.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ΠΎΡ‚ ΠΈ всС – поздравляСм, Ссли Π²Ρ‹ зашли Ρ‚Π°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ! НадССмся, Π²Ρ‹ ΠΊΠΎΠ΅-Ρ‡Π΅ΠΌΡƒ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π£Π΄Π°Ρ‡ΠΈ!

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
30 июня 2018

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования Π² Python: для ΡΡ‚ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

МногиС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования встроСны Π² Python ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
25 сСнтября 2017

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π΅Π³ΠΎ 11 ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ программирования, ΠΌΡ‹ рассмотрим исходн...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
27 ΠΌΠ°Ρ€Ρ‚Π° 2017

4 Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΊΠ½ΠΈΠ³ ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… проСктирования

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… проСктирования, рассчитанныС ΠΊΠ°ΠΊ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², Ρ‚Π°ΠΊ ...