Прямо сейчас: откройте PowerShell. Выполните: Invoke-RestMethod -Uri "https://jsonplaceholder.typicode.com/todos/1". Видите таблицу с данными? Это ваш первый API-запрос. 30 секунд.
Зачем это L&D-специалисту
Все AI-модели, с которыми вы работаете (Claude, ChatGPT, OpenRouter), живут не в интерфейсе чата, а за API. API — это дверь, через которую одна программа общается с другой. AI-агент, которого вы запускаете, не «думает» сам — он отправляет запрос к модели через API и получает ответ.
Если вы понимаете, как устроен такой запрос, вы можете: прочитать документацию любой AI-модели, понять, что делает чужой код, объяснить разработчику задачу на его языке и — при желании — собрать простого AI-агента без конструктора. Это последний кирпич технического минимума перед погружением в AI.
Пример из жизни: когда вы пишете вопрос в ChatGPT, браузер отправляет API-запрос к серверу OpenAI. Текст вопроса улетает туда, модель обрабатывает его и возвращает ответ. Всё, что вы видите в интерфейсе — это красивая обёртка над API-запросами.
Что такое API
API (Application Programming Interface) — это способ, которым одна программа просит что-то у другой программы. Проще всего представить официанта в ресторане:
Вы не идёте на кухню, не знаете, как работает плита. Вы говорите официанту: «Мне пасту карбонара». Он передаёт заказ на кухню и приносит тарелку. Так же работает API: вы отправляете запрос в понятном формате, сервер обрабатывает и возвращает ответ.
HTTP-методы: GET и POST
Когда вы заходите на сайт, ваш браузер отправляет HTTP-запросы. Два основных типа:
| Метод | Что делает | Аналогия |
|---|---|---|
GET |
Запрашивает данные (чтение) | «Принесите меню, пожалуйста» |
POST |
Отправляет данные на сервер (создание) | «Я хочу заказать пасту, вот мой заказ» |
GET — вы не меняете ничего на сервере, просто читаете. POST — вы отправляете данные, и сервер что-то с ними делает (создаёт, считает, генерирует). Все запросы к AI-моделям — это POST: вы посылаете промпт, модель возвращает ответ. Есть и другие методы (PUT, DELETE, PATCH), но в 80% случаев вы встретите GET и POST.
API-ключ: ваш пропуск
Большинство AI-API требуют ключ — длинную строку символов, которую вы прикрепляете к запросу. Это как билет на концерт: без него вас не пустят, с ним — вы свой.
Ключ передаётся в заголовке запроса (headers):
Authorization: Bearer sk-or-v1-ваш-длинный-ключ
Правила безопасности:
- Никогда не публикуйте ключ в открытом коде на GitHub (их воруют боты).
- Храните ключ в переменных окружения или в файле
.env(файл, который Git игнорирует). - Если ключ «утёк» — срочно перегенерируйте его в личном кабинете сервиса.
JSON: язык API
JSON (JavaScript Object Notation) — это формат, на котором программы общаются друг с другом. Способ записать данные так, чтобы их легко читал и человек, и машина.
Пример JSON-запроса к AI-модели:
{
"model": "openai/gpt-4o",
"messages": [
{"role": "user", "content": "Привет, как дела?"}
],
"temperature": 0.7
}
Правила JSON:
- Всё в фигурных скобках
{ }— объект (как анкета) [ ]— список (массив)- Ключи — всегда в двойных кавычках:
"model", а неmodel - Значения могут быть: строка
"текст", число0.7, массив[ ], объект{ }, булевоtrue/false - Запятые между парами, но без запятой после последней
choices. Открываете choices — внутри список. Первый элемент списка — ещё объект с полем message. А внутри message — поле content с текстом ответа. Научиться читать JSON — как научиться читать квитанцию: сначала кажется китайской грамотой, через неделю — привычно.
В ответ модель тоже пришлёт JSON — с результатом внутри поля choices[0].message.content. Почти каждый API-ответ выглядит как JSON.
Статус-коды
Когда сервер отвечает на запрос, он всегда присылает код — трёхзначное число, которое говорит, что случилось:
| Код | Значение | Когда |
|---|---|---|
200 |
OK | Всё хорошо, данные в ответе |
201 |
Created | Что-то создано (обычно после POST) |
400 |
Bad Request | Вы отправили кривой запрос (опечатка в JSON) |
401 |
Unauthorized | Нет ключа или ключ неверный |
403 |
Forbidden | Ключ есть, но доступа нет (чужая модель) |
404 |
Not Found | Такого адреса нет |
429 |
Too Many Requests | Слишком много запросов, подождите |
500 |
Internal Server Error | Сервер упал, не ваша вина |
Как читать чужой код
Вы не будете писать код с нуля. Но вы будете его читать: скрипт коллеги, пример из документации, AI-сгенерированный файл. Чтение кода — это навык отличать лес от деревьев.
При встрече с незнакомым файлом задайте себе три вопроса:
- Что на входе? — Какие данные получает программа: аргументы командной строки? Файл? Запрос от пользователя? Ищите
input(),sys.argv,open(),requests.get(). - Что внутри? — Что она делает с данными: циклы, условия, вызовы других функций. Читайте сверху вниз, как рецепт.
- Что на выходе? — Что программа возвращает: печатает в консоль? Сохраняет в файл? Отправляет ответ? Ищите
print(),return,write(),requests.post().
Не надо понимать каждую строчку. Вам нужно понимать логику: что заходит, что делается, что выходит. Остальное — детали, которые вы нагуглите.
Промежуточный итог
API — универсальный язык программ. GET читает. POST отправляет. JSON — формат. Статус-коды — обратная связь.
Понимать API — как знать английский в IT
Вы не обязаны писать код, но обязаны понимать о чём говорят разработчики. API, JSON, статус-коды, эндпоинты — это базовый словарь. Без него вы слышите шум. С ним — участвуете в разговоре на равных.
Шпаргалка
API-запросы в PowerShell
| Действие | Команда |
|---|---|
| GET-запрос | Invoke-RestMethod -Uri "https://api.example.com/data" |
| GET с параметрами | Invoke-RestMethod -Uri "https://api.example.com/search?q=термин" |
| POST-запрос с JSON | Invoke-RestMethod -Method Post -Uri "..." -Body (ConvertTo-Json @{key="val"}) -ContentType "application/json" |
| POST с заголовком (ключ) | Добавить -Headers @{"Authorization"="Bearer sk-key"} |
| Сохранить ответ в переменную | $ответ = Invoke-RestMethod -Uri "..." |
| Посмотреть поле ответа | $ответ.поле или $ответ[0].поле |
| Сохранить ответ в файл | ... | ConvertTo-Json -Depth 10 | Out-File -FilePath "ответ.json" |
Статус-коды
| Диапазон | Смысл | Пример |
|---|---|---|
2xx |
Успех | 200 OK, 201 Created |
3xx |
Перенаправление | 301 Moved Permanently |
4xx |
Ошибка на вашей стороне | 400 Bad Request, 401 Unauthorized, 404 Not Found |
5xx |
Ошибка на стороне сервера | 500 Internal Server Error, 503 Service Unavailable |
Структура кода
| Элемент | Python | JavaScript | Что делает |
|---|---|---|---|
| Импорт библиотек | import requests |
const fetch = require('node-fetch') |
Подключает готовый код, чтоб не писать с нуля |
| Функция | def send_prompt(text): |
function sendPrompt(text) { } |
Блок действий, который можно вызвать по имени |
| Переменная | api_key = "sk-..." |
const apiKey = "sk-..." |
Хранит данные (строку, число, список) |
| Условие | if status == 200: |
if (status === 200) { } |
«Если это правда — делай это, иначе — то» |
| Цикл | for item in items: |
for (let item of items) { } |
Повторить действие для каждого элемента |
| Вызов API | requests.get(url, headers=...) |
fetch(url, { method: 'POST', ... }) |
Отправить HTTP-запрос к серверу |