Чому ваше проектування URL таке погане?


pic

Leapcell: Платформа нового покоління для безсерверного хостингу веб-сайтів, асинхронних завдань та Redis

Специфікації URL та найкращі практики в проектуванні API

I. Основне значення проектування URL

У проектуванні API, URL є не лише засобом для пошуку ресурсів, але й візуальним представленням архітектури системи. Нерегулярний URL може призвести до наступних проблем:

  • Технічна неоднозначність: Помилки при розпізнаванні шляху, викликані чутливістю до регістру (наприклад, /systemMem проти /systemmem).
  • Досвід користувача: Довгі та громіздкі шляхи (наприклад, /servlet/.../business_temp/2/2/5/) збільшують вартість запам’ятовування.
  • Адаптація до сценаріїв: Спеціальні символи (наприклад, _, +, ~) можуть створювати проблеми при друці або скануванні.
  • Вартість обслуговування: Ризики несумісності через зміни шляху під час версійних оновлень.

II. Золоті принципи проектування URL

1. Принцип простоти

  • Обмеження довжини: Рекомендується, щоб загальна довжина не перевищувала 80 байт (включаючи протокол і доменне ім’я).
  • Оптимізація ієрархії: Замість глибоких шляхів використовуйте параметри запиту (наприклад, /animals?zoo=1&area=3 краще, ніж /zoos/1/areas/3/animals).
  • Читабельність: Використовуйте дефіси - для розділення слів (наприклад, /api/v1/blog-posts), і уникайте використання підкреслень _.

2. Принцип семантичності

  • Ідентифікація ресурсів: Використовуйте множину для позначення колекції (/users), і використовуйте ID для ідентифікації окремого елемента (/users/123).
  • Контроль версій: Явно позначайте номер версії (/api/v2/orders).
  • Незалежність від стану: Розрізняйте типи операцій за допомогою HTTP методів (GET/POST/PUT/DELETE).

3. Принцип сумісності

  • Єдність регістру: Використовуйте формат лише малими літерами (системи Unix чутливі до регістру, в той час як системи Windows — ні).
  • Кодування символів: Використовуйте UTF-8 для кодування спеціальних символів (наприклад, пробіл кодується як %20).
  • Механізм редиректу: Використовуйте статуси 301/302 для міграції між версіями.

III. Деталі реалізації специфікацій URL

1. Обов’язкові специфікації

# Рекомендуємий формат  
GET /api/v1/products/456?category=electronics  

# Заборонений формат  
GET /API/V1/Products/456 # Змішаний регістр  
GET /api/v1/products/456/orders # Занадто глибока ієрархія  
GET /api/v1/products/456_orders # Використання підкреслення

2. Рекомендуємо формат

# Колекція ресурсів  
GET /api/v1/articles?page=2&size=10  

# Один ресурс  
GET /api/v1/articles/789  

# Контроль версій  
GET /web-api/v3/users/me

IV. Схеми реалізації мапінгу URL

  1. Механізм псевдонімів: Директива Alias в Apache або віртуальний каталог в IIS.
  2. Символічні посилання: У системах Unix використовуйте ln -s для встановлення мапінгів шляхів.
  3. Мапінг за допомогою бази даних: Зберігати шлях URL та фактичний шлях файлу в реляційній базі даних.
  4. Стратегії редиректу:
  • 301 (Постійний редирект): Використовується, коли старий URL постійно недійсний.
  • 302 (Тимчасовий редирект): Використовується для тимчасових коригувань шляху.

V. Аналіз відмінних випадків

1. Stack Overflow

/questions/2423435435/creating-a-blob-from-a-base64-string-in-javascript
  • Подвійний механізм ідентифікації: :id забезпечує унікальність, а :slug підвищує читабельність.
  • Гнучка сумісність: Підтримує найпростіший варіант без використання slug (/questions/16245767).

2. GitHub

/github.com/leapcell/leapcell/compare/4.2.7...main
  • Семантизація операцій: Шлях безпосередньо відображає функцію порівняння версій у репозиторії коду.
  • Стандартизація параметрів: Використовуються ... для розділення номерів версій при порівнянні.

3.

NPM

/npmjs.com/package/react-router/v/5.3.4
  • Вертикальна структура: /package ідентифікує ресурс пакету, а /v ідентифікує версію.
  • Пряме підключення через CDN: Підтримує прямий доступ через unpkg.com/[email protected]/index.js.

VI. Розгляд можливостей для розширення дизайну

  1. Адаптація для різних терміналів:
  • Мобільні термінали: Використовуйте префікс /web-api/v2, щоб відрізнити інтерфейси.
  • Пристрої IoT: Створюйте короткі шляхи (наприклад, /device/1234/status).
  1. Оптимізація для SEO: Додавайте описові slug для статичних ресурсів (наприклад, /blog/2025-03-02/api-design-best-practices).
  2. Покращення безпеки: Використовуйте підписи параметрів запиту для чутливих операцій (наприклад, /api/v1/payment?sign=abc123).

VII. Висновок

Проектування URL є фасадом архітектури API, і важливо знайти баланс між технічним виконанням та досвідом користувача. Дотримуючись трьох принципів простоти, семантичності та сумісності, а також комбінуючи зрілі механізми мапінгу та відмінні практики випадків, можна створити систему URL, яка відповідає інженерним специфікаціям і має комерційну цінність. З розвитком економіки API в майбутньому, проектування URL нестиме більше бізнес-семантики і стане важливим мостом між системою та користувачами.

Leapcell: Платформа нового покоління для безсерверного хостингу веб-сайтів, асинхронних завдань та Redis

Нарешті, рекомендую платформу, яка найбільше підходить для розгортання сервісів: Leapell


pic

1. Підтримка кількох мов

  • Розробка з JavaScript, Python, Go або Rust.

2. Розгортання необмеженої кількості проєктів безкоштовно

  • платите лише за використання — без запитів, без оплат.

3. Неперевершена економічність

  • Оплата за використання без додаткових витрат.
  • Приклад: $25 підтримує 6.94M запитів із середнім часом відповіді 60 мс.

4. Спрощений досвід розробника

  • Інтуїтивно зрозумілий інтерфейс для безперешкодного налаштування.
  • Повністю автоматизовані CI/CD конвеєри та інтеграція GitOps.
  • В реальному часі метрики та логування для отримання корисних відомостей.

5. Легкість масштабування та висока продуктивність

  • Автоматичне масштабування для обробки високої кількості одночасних запитів.
  • Відсутність операційних витрат — просто зосередьтесь на створенні.


pic

Документація доступна тут!

Twitter Leapcell: https://x.com/LeapcellHQ

Перекладено з: Why Are Your URL Designs So Bad?