|
|
|
# Отличие URL, Path, ресурс и API Endpoint
|
|
|
|
|
|
|
|
## 1. URL (Uniform Resource Locator)
|
|
|
|
|
|
|
|
### Что это?
|
|
|
|
Полный адрес для доступа к веб-ресурсу. Состоит из:
|
|
|
|
- Протокола (https://)
|
|
|
|
- Домена (example.com)
|
|
|
|
- Пути (/products)
|
|
|
|
- Параметров (?page=2)
|
|
|
|
|
|
|
|
Пример:
|
|
|
|
`https://shop.com/products?category=electronics`
|
|
|
|
|
|
|
|
### Аналогия
|
|
|
|
Как полный почтовый адрес с индексом, городом, улицей и квартирой.
|
|
|
|
|
|
|
|
### Не путать с
|
|
|
|
URI - более общее понятие, включающее URL.
|
|
|
|
|
|
|
|
### Связанные концепты
|
|
|
|
Query Parameters, Фрагменты (#anchor)
|
|
|
|
|
|
|
|
## 2. Path (Путь)
|
|
|
|
|
|
|
|
### Что это?
|
|
|
|
Часть URL, указывающая расположение ресурса на сервере.
|
|
|
|
|
|
|
|
Примеры:
|
|
|
|
```python
|
|
|
|
# Простой путь
|
|
|
|
@app.get('/users/{user_id}')
|
|
|
|
async def get_user(user_id: int):
|
|
|
|
return {'id': user_id}
|
|
|
|
|
|
|
|
# Путь с несколькими параметрами
|
|
|
|
@app.get('/users/{user_id}/posts/{post_id}')
|
|
|
|
async def get_post(user_id: int, post_id: int):
|
|
|
|
return {'user': user_id, 'post': post_id}
|
|
|
|
|
|
|
|
# Обработка query-параметров
|
|
|
|
@app.get('/items/')
|
|
|
|
async def read_items(skip: int = 0, limit: int = 10):
|
|
|
|
return {'skip': skip, 'limit': limit}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Важно:
|
|
|
|
Всегда валидируйте входные данные в путях для безопасности.
|
|
|
|
|
|
|
|
### Аналогия
|
|
|
|
Как путь к файлу в папках: /Документы/Отчеты/2023
|
|
|
|
|
|
|
|
## 3. API Endpoint
|
|
|
|
|
|
|
|
### Что это?
|
|
|
|
Комбинация пути и HTTP-метода для взаимодействия с API.
|
|
|
|
|
|
|
|
Примеры:
|
|
|
|
```python
|
|
|
|
# Разные endpoints для одного пути
|
|
|
|
@app.get('/items')
|
|
|
|
async def read_items():
|
|
|
|
return ['item1', 'item2']
|
|
|
|
|
|
|
|
@app.post('/items')
|
|
|
|
async def create_item():
|
|
|
|
return {'status': 'ok'}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Аналогия
|
|
|
|
Как меню в ресторане:
|
|
|
|
- Путь - раздел меню (горячие блюда)
|
|
|
|
- Метод - конкретное действие (заказать, уточнить)
|
|
|
|
|
|
|
|
## 4. Ресурс (Resource)
|
|
|
|
|
|
|
|
### Что это?
|
|
|
|
Данные, возвращаемые сервером (JSON, HTML, изображения) с соответствующим HTTP-статусом (200 OK, 404 Not Found и др.).
|
|
|
|
|
|
|
|
Пример:
|
|
|
|
```python
|
|
|
|
@app.get('/news')
|
|
|
|
async def get_news():
|
|
|
|
return {
|
|
|
|
'status': 200,
|
|
|
|
'data': [
|
|
|
|
{'id': 1, 'title': 'Новость 1'},
|
|
|
|
{'id': 2, 'title': 'Новость 2'}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Аналогия
|
|
|
|
Как блюдо, которое приносит официант в ответ на ваш заказ.
|
|
|
|
|
|
|
|
## 5. Ссылка (HTML Link)
|
|
|
|
|
|
|
|
### Что это?
|
|
|
|
Элемент <a> для навигации между страницами.
|
|
|
|
|
|
|
|
Примеры:
|
|
|
|
```html
|
|
|
|
<!-- Абсолютная ссылка -->
|
|
|
|
<a href="https://example.com/about">О нас</a>
|
|
|
|
|
|
|
|
<!-- Относительная ссылка -->
|
|
|
|
<a href="/contacts">Контакты</a>
|
|
|
|
```
|
|
|
|
|
|
|
|
## Сравнительная таблица
|
|
|
|
|
|
|
|
| Концепт | Пример | Основная цель | Пример использования | Составные части |
|
|
|
|
|-----------|-------------------------|-----------------------------------|-------------------------------|--------------------------|
|
|
|
|
| URL | `https://site.com/path` | Полный адрес ресурса | Переход по ссылке | Протокол+домен+путь+параметры |
|
|
|
|
| Path | `/users/42` | Указание расположения на сервере | Маршрутизация в API | Часть URL |
|
|
|
|
| Endpoint | `POST /products` | Точка взаимодействия с API | Создание новых данных | Путь + HTTP-метод |
|
|
|
|
| Ресурс | `{"name":"John"}` | Возвращаемые данные | Ответ API | Любой формат (JSON/HTML) |
|
|
|
|
| Ссылка | `<a href="/about">` | Навигация между страницами | Переход между страницами | HTML-элемент с URL |
|
|
|
|
|
|
|
|
## Заключение
|
|
|
|
|
|
|
|
- **URL** — полный адрес
|
|
|
|
- **Path** — маршрут внутри URL
|
|
|
|
- **Endpoint** — path + HTTP-метод
|
|
|
|
- **Ресурс** — то, что скрывается за endpoint
|
|
|
|
- **Ссылка** — способ сослаться на URL или path |