Sobes.tech
Назад к вопросам
Junior — Middle
58

Можешь описать основные характеристики RESTful API и что отличает его от других подходов?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

RESTful API — это архитектурный стиль для построения веб-сервисов вокруг ресурсов, доступ к которым идет через стандартные HTTP-методы. Важно показать понимание stateless-подхода, единого интерфейса и использования URL как адресов ресурсов. Также обычно ожидают, что будет названо отличие от более “сильно связных” или RPC-подходов.

Определение:

RESTful API — это API, которое следует принципам REST: каждый ресурс имеет свой URL, операции над ресурсами выражаются стандартными HTTP-методами, а сервер не хранит состояние сессии между запросами. Обычно используются GET для чтения, POST для создания, PUT/PATCH для изменения и DELETE для удаления.

Ключевая идея REST — не “вызов методов”, а работа с ресурсами через унифицированный интерфейс HTTP. Это делает API проще, предсказуемее и удобнее для масштабирования.

Пример использования:

Допустим, есть сервис управления пользователями:

  • GET /users — получить список пользователей
  • GET /users/42 — получить пользователя с id 42
  • POST /users — создать нового пользователя
  • PATCH /users/42 — частично обновить пользователя
  • DELETE /users/42 — удалить пользователя

Пример на Python с Flask:

from flask import Flask, jsonify, request

app = Flask(__name__)

users = [{"id": 1, "name": "Alice"}]

@app.get("/users")
def get_users():
    return jsonify(users)

@app.get("/users/<int:user_id>")
def get_user(user_id):
    user = next((u for u in users if u["id"] == user_id), None)
    if user is None:
        return jsonify({"error": "Not found"}), 404
    return jsonify(user)

@app.post("/users")
def create_user():
    data = request.get_json()
    new_user = {"id": len(users) + 1, "name": data["name"]}
    users.append(new_user)
    return jsonify(new_user), 201

Пояснение кода:

  • GET /users возвращает коллекцию ресурсов users.
  • GET /users/<id> обращается к конкретному ресурсу по идентификатору.
  • POST /users создает новый ресурс и возвращает его с кодом 201 Created.
  • Данные передаются через HTTP и JSON, а сервер не хранит отдельную “сессию” для понимания запроса.
  • Логика маршрутов отражает REST-подход: URL описывает ресурс, а метод HTTP — действие над ним.

Ключевые моменты:

  • REST строится вокруг ресурсов, а не вокруг удаленных процедур.
  • Используются стандартные HTTP-методы и семантика кодов ответов.
  • Каждый запрос должен быть stateless: сервер не зависит от контекста предыдущих запросов.
  • URL обычно описывает сущность, а не действие: /users/42, а не /getUser.
  • REST отличается от RPC тем, что в RPC акцент на вызове функций, а в REST — на манипуляции ресурсами.
  • RESTful API обычно проще документировать, тестировать и масштабировать за счет единообразного интерфейса.