Урок 01

Что такое API

Что такое API

API (Application Programming Interface) — интерфейс, через который одна программа общается с другой.

В вебе API — это HTTP-эндпоинт, который принимает запросы и возвращает данные (обычно JSON).

API vs сайт

СайтAPI
ВозвращаетHTMLJSON
КлиентБраузерЛюбой
СостояниеСессииStateless
ФорматСтраницаДанные

Сайт — готовая страница. API — данные, а клиент сам решает, как их показать.

Кто клиенты

  • SPA — React, Vue, Angular.
  • Мобильные — iOS, Android, React Native, Flutter.
  • Другие серверы — микросервисы, интеграции.
  • Скрипты — CLI, cron.
  • Партнёры — внешние компании.

REST

REST (Representational State Transfer) — стиль проектирования API.

Принципы:

  1. Ресурсы — сущности (posts, users).
  2. HTTP-методы — действия.
  3. Stateless — нет состояния между запросами.
  4. Единый интерфейс — стандартные URL.
  5. Кеширование — заголовки.

Соглашение:

МетодURLДействие
GET/api/postsСписок
POST/api/postsСоздать
GET/api/posts/5Один
PUT/PATCH/api/posts/5Обновить
DELETE/api/posts/5Удалить

Ресурс — существительное во множественном числе. Действие — HTTP-метод.

JSON

JSON — стандартный формат обмена.

{
    "id": 1,
    "title": "Hello",
    "tags": ["laravel", "php"],
    "author": { "id": 5, "name": "Иван" }
}

Laravel сам преобразует модели и массивы в JSON.

Stateless

API не хранит состояние. Каждый запрос содержит всё нужное: токен, параметры, тело.

Не используются сессии. Вместо — токены в заголовке Authorization.

Плюс: легко масштабировать — любой сервер обработает.

Статусы HTTP

КодЗначениеКогда
200OKУспешный GET/PUT
201CreatedПосле POST
204No ContentПосле DELETE
400Bad RequestНекорректный запрос
401UnauthorizedНе авторизован
403ForbiddenНет прав
404Not FoundРесурс не найден
422Unprocessable EntityОшибки валидации
429Too Many RequestsПревышен rate limit
500Internal Server ErrorОшибка сервера

Файлы роутов

routes/api.php — API-роуты. Автоматически получают:

  • Префикс /api.
  • Middleware api — throttle, без CSRF и сессий.
use Illuminate\Support\Facades\Route;

Route::get('/posts', function () {
    return Post::all();
});

URL — /api/posts.

Пример API

// GET /api/posts
Route::get('/posts', function () {
    return Post::with('user')->paginate(15);
});

// GET /api/posts/1
Route::get('/posts/{post}', function (Post $post) {
    return $post;
});

// POST /api/posts
Route::post('/posts', function (Request $request) {
    $post = Post::create($request->validated());
    return response()->json($post, 201);
});

Тот же синтаксис, что у сайта. Разница — в ответах (JSON vs HTML).

Версионирование — с самого начала

Даже если одна версия — сразу /api/v1/.... Добавить позже — сложнее.

Route::prefix('v1')->group(function () {
    Route::apiResource('posts', PostController::class);
});

Что дальше

  1. Настройка API в Laravel
  2. API-ресурсы
  3. Resource-контроллеры для API
  4. Валидация в API
  5. Пагинация в API
  6. Фильтрация и сортировка
  7. Аутентификация Sanctum
  8. Обработка ошибок API
  9. Версионирование
  10. Документация
  11. Rate limiting и CORS
  12. Практика: полный API

Практика

Ответь на вопросы:

  1. Чем API отличается от сайта?
  2. Что такое REST?
  3. Какой код для успешного создания?
  4. Для чего нужен префикс /api?

Открой в браузере:

https://api.github.com/users/torvalds
https://jsonplaceholder.typicode.com/posts/1

Что видишь: JSON. Это API.

Итог

  • API — интерфейс для программ.
  • REST — стиль с ресурсами и HTTP-методами.
  • JSON — стандартный формат.
  • Stateless — нет сессий.
  • Статусы — 200, 201, 401, 403, 404, 422, 500.
  • routes/api.php — префикс /api.
  • Версионирование — сразу с /v1.

Дальше — настройка API в Laravel.