HTTP API: обмен данными между программами
Тот же сервер, тот же Flask — но получатель ответа теперь другая программа, а не браузер человека.
До сих пор Flask-приложение отвечало HTML-страницами — их читает человек через браузер.
Но у ответа сервера может быть и другой получатель: мобильное приложение, другой сервер
или JavaScript-код на той же странице (раздел 22.4 уже показал
fetch()). Такой ответ обычно приходит не в виде HTML, а в
виде данных — чаще всего JSON.
Программный интерфейс, через который одна программа получает данные от другой, называют
API (Application Programming Interface — программный интерфейс
приложения). Конкретный адрес внутри API тоже называют эндпоинтом — это
более широкое, общеупотребительное значение слова, чем эндпоинт-имя маршрута Flask из
раздела 22.11: там речь шла о внутреннем идентификаторе для url_for()
, здесь — просто о конкретном URL, который отдаёт данные, а не HTML-страницу.
| Обычный маршрут | API-эндпоинт | |
|---|---|---|
| Кто читает ответ | Человек через браузер | Программа: JavaScript, приложение, другой сервер |
| Формат ответа | HTML | Чаще всего JSON |
| Content-Type ответа | text/html | application/json |
Маленький JSON-эндпоинт на Flask
from flask import jsonify
@app.route("/api/tasks")
def api_tasks():
return jsonify([{{"id": z["id"], "title": z["title"], "done": z["done"]}} for z in zadachi])
jsonify(...) делает две вещи сразу: превращает данные
Python в текст JSON (как json.dumps() из раздела 22.15) и
выставляет заголовок ответа Content-Type: application/json,
чтобы получатель знал, как читать тело ответа.
/api/tasks), а метод определяет действие над ним — GET получает список, POST создаёт новую запись. Это популярное и полезное соглашение, но не единственно возможный способ построить API — важно понимать сам принцип «данные вместо HTML», а не заучивать REST как жёсткое правило.Раздел 22.35 добавит такой эндпоинт в итоговый проект — GET /api/tasks, возвращающий текущий список задач в формате JSON.