← Назад к вопросам

Приведи пример REST

1.0 Junior🔥 192 комментариев
#Тестирование API

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Пример RESTful API: Описание и реализация базового сервиса

REST (Representational State Transfer) — это архитектурный стиль для построения веб-сервисов, который использует стандартные методы HTTP и концепцию ресурсов. Ключевые принципы включают **клиент-серверную архитектуру**, **без состояния** (stateless), **кэширование**, **единообразие интерфейса** и **систему слоев**. Практически REST API взаимодействует через HTTP, где ресурсы идентифицируются URL, а операции выполняются методами HTTP (GET, POST, PUT, DELETE).

Пример: Сервис управления книгами (Bookstore API)

Рассмотрим простой API для управления коллекцией книг. Каждая книга представляет собой ресурс с уникальным идентификатором.

Базовые ресурсы и URL (Endpoint):

  • /books — коллекция всех книг.
  • /books/{id} — конкретная книга с идентификатором id.

HTTP методы и их семантика:

  • GET /books — получить список всех книг.
  • GET /books/{id} — получить детали книги по ID.
  • POST /books — создать новую книгу (данные в теле запроса).
  • PUT /books/{id} — полностью обновить книгу по ID.
  • DELETE /books/{id} — удалить книгу по ID.

Пример реализации на Python (Flask)

Ниже приведен минимальный пример сервиса с использованием Flask, который демонстрирует RESTful подход.

from flask import Flask, request, jsonify

app = Flask(__name__)

# Временное хранилище данных (вместо базы данных)
books = [
    {"id": 1, "title": "Clean Code", "author": "Robert C. Martin"},
    {"id": 2, "title": "Design Patterns", "author": "Erich Gamma"}
]

# GET /books — получение всех книг
@app.route('/books', methods=['GET'])
def get_books():
    return jsonify(books)

# GET /books/{id} — получение книги по ID
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
    book = next((b for b in books if b['id'] == book_id), None)
    if book:
        return jsonideal book.title и author из тела запроса в JSON.

```python
@app.route('/books', methods=['POST'])

def create_book(): new_book = request.get_json() # Проверка обязательных полей if 'title' not in new_book or 'author' not in new_book: return jsonify({"error": "Missing 'title' or 'author'"}), 400

# Генерация нового ID
new_id = max(b['id'] for b in books) + 1 if books else 1
new_book['id'] = new_id
books.append(new_book)
return jsonify(new_book), 201

Примеры HTTP запросов и ответов

1. GET /books (получение списка):

GET http://localhost:5000/books

Ответ (JSON):

[
  {"id": 1, "title": "Clean Code", "author": "Robert C. Martin"},
  {"id": 2, "title": "Design Patterns", "author": "Erich Gamma"}

]

2. POST /books (создание книги):

POST http://localhost:5000/books
Content-Type: application/json

{"title": "RESTful APIs", "author": "Leonard Richardson"}

Ответ (код 201):

{"id": 3, "title": "RESTful APIs", "author": "Leonard Richardson"}

3. PUT /books/1 (обновление книги):

PUT http://localhost:5000/books/1
Content-Type: application/json

{"title": "Clean Code: Updated", "author": "Robert C. Martin"}

Ответ (код 200):

{"id": 1, "title": "Clean Code: Updated", "author": "Robert C. Martin"}

Ключевые аспекты REST в примере

  • Ресурсы и URI: Книги представлены как ресурсы с четкими URI (/books, /books/{id}).
  • HTTP методы: Использование стандартных методов (GET, POST, PUT, DELETE) с четкой семантикой.
  • Статусы HTTP: Возвращение соответствующих кодов (200 для успеха, 201 для создания, 404 для отсутствия ресурса, 400 для ошибки в данных).
  • Без состояния: Каждый запрос содержит всю необходимую информацию; сервер не хранит состояние клиента между запросами.
  • JSON как формат представления: Данные передаются в широко поддерживаемом формате JSON.

Этот пример иллюстрирует фундаментальные принципы REST, которые обеспечивают простоту, масштабируемость и удобство интеграции для веб-сервисов. Для QA Engineer важно понимать эти основы при тестировании API: проверка корректности методов HTTP, валидации входных данных, обработки ошибок и соответствия спецификации (например, OpenAPI).