Формування URL для REST API
При написанні API потрібно давати правильні назви ресурсам. Адже інтуїтивні та прості найменування спрощують використання сервісу.
Кінцеві URL за запитом ресурсу також називають endpoints API.
Хороший підхід вибору найменування:
Для опису базових URL використовують іменники у множині - users, contacts.
Використовують конкретні та чіткі імена - на кшталт news, videos, а не абстрактні items або elements.
Складну логіку URL описують додаванням властивостей. Параметри ховають за знаком питання ?. Наприклад як при організації пагінації: /news?limit=25&offset=50
Розглянемо приклади хороших практик найменування:
Створити дані про клієнта:
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|-birthdateLast updated