Принципы REST
▸Что такое REST
REST (Representational State Transfer) — архитектурный стиль для проектирования веб-сервисов. Основан на HTTP-протоколе.
▸6 ограничений REST
Клиент-сервер архитектура
Stateless
Cacheable
Uniform interface
Layered system
Code on demand (опционально)
Именование ресурсов
▸Правильные URL
1GET /api/users — список пользователей2GET /api/users/123 — конкретный пользователь3POST /api/users — создание пользователя4PUT /api/users/123 — обновление пользователя5DELETE /api/users/123 — удаление пользователя
▸Плохие URL
1GET /api/getUsers2POST /api/createUser3GET /api/user/delete/123
▸Правила
HTTP методы
▸GET
▸POST
▸PUT
▸PATCH
▸DELETE
Статус-коды
▸2xx успех
▸3xx перенаправление
▸4xx клиентская ошибка
▸5xx серверная ошибка
Формат ответа
▸Успешный ответ
1{2 "status": "success",3 "data": {4 "id": 1,5 "name": "Иван Петров",6 "email": "ivan@example.com"7 }8}
▸Ошибка
1{2 "status": "error",3 "error": {4 "code": "VALIDATION_ERROR",5 "message": "Неверные данные",6 "details": [7 {8 "field": "email",9 "message": "Некорректный email"10 }11 ]12 }13}
Пагинация
▸Offset-based
1GET /api/users?page=1&limit=202GET /api/users?page=2&limit=20
▸Cursor-based
1GET /api/users?cursor=abc123&limit=20
▸Формат ответа
1{2 "data": [...],3 "pagination": {4 "page": 1,5 "limit": 20,6 "total": 100,7 "totalPages": 58 }9}
Фильтрация и сортировка
▸Фильтрация
1GET /api/users?role=admin&status=active
▸Сортировка
1GET /api/users?sort=-createdAt,name
▸Поиск
1GET /api/users?q=ivan
Версионирование
▸URL версионирование
1/api/v1/users2/api/v2/users
▸Header версионирование
1Accept: application/vnd.myapp.v1+json
Безопасность
▸Аутентификация
1Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
▸Rate limiting
1X-RateLimit-Limit: 1002X-RateLimit-Remaining: 99
▸CORS
1app.use(cors({2 origin: 'https://example.com',3 methods: ['GET', 'POST', 'PUT', 'DELETE'],4}));
Документация
▸OpenAPI/Swagger
1paths:2 /users:3 get:4 summary: Список пользователей5 parameters:6 - name: page7 in: query8 schema:9 type: integer
Логирование
1app.use((req, res, next) => {2 const start = Date.now();3 res.on('finish', () => {4 const duration = Date.now() - start;5 console.log(`${req.method} ${req.url} ${res.statusCode} ${duration}ms`);6 });7 next();8});
Заключение
Хороший REST API — это понятный, безопасный и документированный API. Следуйте принципам REST, используйте правильные статус-коды и обеспечивайте безопасность. Документируйте API с помощью OpenAPI.