Что такое REST API и каковы его ключевые принципы?

Ответ

REST (Representational State Transfer) — это архитектурный стиль для создания масштабируемых и надежных веб-сервисов. Он не является протоколом, а скорее набором правил и ограничений для построения взаимодействия между клиентом и сервером.

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

  1. Клиент-серверная архитектура: Четкое разделение между клиентом (интерфейс) и сервером (данные и логика), что позволяет им развиваться независимо.
  2. Отсутствие состояния (Stateless): Каждый запрос от клиента должен содержать всю необходимую информацию для его выполнения. Сервер не хранит состояние клиента между запросами, что упрощает масштабирование.
  3. Кешируемость: Ответы от сервера должны явно помечаться как кешируемые или некешируемые. Это позволяет клиентам и промежуточным узлам (прокси) кешировать данные для улучшения производительности.
  4. Единообразный интерфейс (Uniform Interface): Это фундаментальный принцип, который включает:
    • Идентификация ресурсов по URI: Каждый ресурс имеет уникальный идентификатор (например, /users/123).
    • Манипуляция ресурсами через представления: Клиент работает не с самим ресурсом, а с его представлением (например, в формате JSON).
    • Использование стандартных HTTP-методов: GET (получить), POST (создать), PUT (обновить/заменить), DELETE (удалить).

Пример простого REST-like API на Go с net/http:

package main

import (
    "encoding/json"
    "net/http"
)

type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

// Обработчик для получения списка пользователей
func usersHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method == http.MethodGet {
        users := []User{{ID: 1, Name: "Alice"}, {ID: 2, Name: "Bob"}}
        w.Header().Set("Content-Type", "application/json")
        json.NewEncoder(w).Encode(users)
    }
}

func main() {
    http.HandleFunc("/users", usersHandler)
    http.ListenAndServe(":8080", nil)
}