На каком ключевом понятии основана архитектура REST API

Ответ

Архитектура REST (Representational State Transfer) основана на концепции ресурсов.

Ресурс — это любая сущность (например, пользователь, заказ, товар), которой можно дать уникальный идентификатор URI (Uniform Resource Identifier). Взаимодействие с ресурсами происходит через стандартные HTTP-методы, которые определяют выполняемое действие:

  • GET: Получение представления ресурса.
  • POST: Создание нового ресурса.
  • PUT: Полное обновление существующего ресурса.
  • PATCH: Частичное обновление существующего ресурса.
  • DELETE: Удаление ресурса.

Пример на Flask (Python):

from flask import Flask, jsonify, request

app = Flask(__name__)
# /users - это коллекция ресурсов "пользователи"
users = {1: {"name": "Alice"}, 2: {"name": "Bob"}}

# Получение всех пользователей (GET /users)
@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

# Создание нового пользователя (POST /users)
@app.route('/users', methods=['POST'])
def create_user():
    new_user = request.json
    user_id = max(users.keys()) + 1
    users[user_id] = new_user
    return jsonify(new_user), 201 # 201 Created

Ключевые принципы REST:

  1. Клиент-серверная архитектура: Четкое разделение между клиентом (UI) и сервером (хранение данных).
  2. Отсутствие состояния (Stateless): Каждый запрос от клиента должен содержать всю информацию, необходимую для его выполнения. Сервер не хранит сессионное состояние клиента.
  3. Кэширование (Cacheable): Ответы сервера должны явно помечаться как кэшируемые или некэшируемые.
  4. Единообразный интерфейс (Uniform Interface): Общий стандарт взаимодействия (URI для ресурсов, HTTP-методы для операций, JSON/XML для представления).

Ответ 18+ 🔞

Давай разберём эту вашу REST-архитектуру, а то некоторые думают, что это про отдых, блядь. Нет, это про то, как сервер с клиентом друг другу мозги не выносят по-нормальному.

Представь, что у тебя есть ресурс. Не нефть, конечно, а какая-нибудь сущность: пользователь, заказ, товар — любая хуйня, которой можно дать адрес, или, по-умному, URI. Весь этот цирк строится вокруг того, что ты делаешь с этим ресурсом через обычные HTTP-глаголы, которые все знают, но многие нихуя не используют правильно.

Вот смотри:

  • GET — это когда ты получаешь что-то. Как в магазин за хлебом пришёл, забрал и ушёл.
  • POST — это когда ты создаёшь что-то новое. Принёс на склад новую коробку, её там приняли и присвоили номер.
  • PUT — это полное обновление. Выкинул всю старую коробку и поставил новую, блядь.
  • PATCH — это частичное обновление. Достал из коробки только просроченные печеньки и заменил их.
  • DELETE — это, внезапно, удаление. Взял и выкинул всю коробку в мусор, ёпта.

А теперь пример на Flask, чтобы не быть голословным, как этот Герасим из рассказа:

from flask import Flask, jsonify, request

app = Flask(__name__)
# /users - это коллекция ресурсов "пользователи"
users = {1: {"name": "Alice"}, 2: {"name": "Bob"}}

# Получение всех пользователей (GET /users)
@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

# Создание нового пользователя (POST /users)
@app.route('/users', methods=['POST'])
def create_user():
    new_user = request.json
    user_id = max(users.keys()) + 1
    users[user_id] = new_user
    return jsonify(new_user), 201 # 201 Created

Видишь? Всё просто, как три копейки. А теперь главные принципы, без которых это всё — просто куча говнокода:

  1. Клиент-серверная архитектура. Это когда фронтенд (тот, кто рисует кнопочки) и бэкенд (тот, кто хранит данные) живут отдельно и не лезут друг другу в тарелки. Идеальный брак, блядь.
  2. Отсутствие состояния (Stateless). Это святое! Каждый запрос от клиента — это как письмо с полным набором инструкций. Сервер не должен помнить, кто ты такой и что ты делал пять минут назад. «А помнишь, мы с тобой в прошлый раз...» — это не про REST, это про сессии, которые тут не катят.
  3. Кэширование (Cacheable). Сервер должен чётко говорить: «Эту хуйню можно кэшировать, а эту — нет». Чтобы клиент не дергал каждый раз одно и то же, как идиот.
  4. Единообразный интерфейс (Uniform Interface). Это чтобы все играли по одним правилам: ресурсы — через URI, действия — через методы HTTP, данные — в JSON или XML. Никаких самодеятельностей вроде GET /deleteUser?id=5, а то я тебе вилкой в глаз, честно.

Вот и вся философия. Если делать по этим правилам, то система будет масштабироваться, как сумасшедшая, и жить долго. А если нет — ну, это уже твои проблемы, дружок.