Перейти до основного вмісту

Формування URL для REST API

У цьому розділі ми поговоримо про правильне найменування ресурсів для API. Коли ресурси названі правильно, API інтуїтивно зрозумілий та простий у використанні. Часто кінцеві URL за запитом ресурсу називають endpoints API

Що є хорошою практикою для правильного іменування?

Ну по перше необхідно використовувати для опису базових URL іменники у множині - users, contacts. Також треба використовувати більше конкретні та чіткі імена news, videos, а не абстрактні items або elements. Складну логіку для URL необхідно описувати за рахунок додаткових властивостей, тобто, ховати за знаком ?. Приклад використання пагінації /users?limit=25&offset=50, фільтрація відповіді /friends?fields=id,name,picture

Виходячи зі сказаного наступні назви будуть поганою практикою

/api/users/13/remove
/api/getusers
/api/v1/users-get

Тут ми використовуємо дієслова, вказуємо видалення для /api/users/13/remove, а необхідно просто використовувати HTTP метод DELETE

Давайте розглянемо хороші практики іменування URL для різноманітних ситуацій

Додавання нового клієнта до системи:

HTTP метод: POST
URL: http://www.example.com/customers

Отримати дані клієнта з ідентифікатором клієнта ID 112233:

HTTP метод: GET
URL: http://www.example.com/customers/112233

Той самий URL ми використовуємо для HTTP методів PUT та DELETE для оновлення та видалення відповідно.

Створення нового продукту:

HTTP метод: POST
URL: http://www.example.com/products

Для читання, оновлення, видалення продукту з ID 432111, відповідно:

HTTP метод: GET, PUT, DELETE
URL: http://www.example.com/products/432111

Створення нового замовлення для клієнта поза контекстом клієнта

HTTP метод: POST
URL: http://www.example.com/orders

Створення того ж замовлення, але в контексті конкретного клієнта з ID 332244

HTTP метод: POST
URL: http://www.example.com/customers/332244/orders

Список замовлень, що належать клієнту ID 332244:

HTTP метод: GET
URL: http://www.example.com/customers/332244/orders

Нехай необхідний URL для додавання нової позиції на замовлення з ID 1234, для клієнта з ID 332244:

HTTP метод: POST
URL: http://www.example.com/customers/332244/orders/1234/lineorders

Отримання списку замовлення за ID замовлення без знання ID конкретного клиента

HTTP метод: GET
URL: http://www.example.com/orders/8769

Пагінація проводиться через query рядок за допомогою параметра offset - це початковий номер позиції, та параметр limit - максимальна кількість елементів, що повертаються. Вони можуть називатися і інакше, наприклад skip, limit

HTTP метод: GET
URL: http://api.example.com/resources?offset=0&limit=25

Складна фільтрація за значеннями. Можна використовувати роздільник подвійна двокрапка ::, яке відокремлює ім'я властивості від значення порівняння

HTTP метод: GET
URL: http://www.example.com/users?filter="name::sam|city::denver"

Сортування. Один із способів, коли для кожної переданої властивості проводиться сортування в порядку зростання, а для кожної властивості, з префіксним тире ("-") сортування проводиться у порядку зменшення. Сепаратор для кожного імені властивості вертикальна смуга ("|")

HTTP метод: GET
URL: http://www.example.com/users?sort=lastName|firstName|-birthdate

Сподіваюся з цих прикладів вам стало відомо, як потрібно називати ресурси для вашого API