Ответ
API (Application Programming Interface) — это программный интерфейс, который определяет, как различные программные компоненты должны взаимодействовать друг с другом. В контексте бэкенда API выступает в роли «контракта», который сервер предоставляет клиентам (например, веб-браузерам, мобильным приложениям или другим серверам).
Этот контракт описывает:
- Какие запросы можно отправлять на сервер.
- Какой формат должны иметь эти запросы (эндпоинты, методы, параметры).
- Какой формат будет иметь ответ от сервера (например, JSON с определенной структурой).
Ключевые принципы и роли API:
- Абстракция: Клиенту не нужно знать, как реализована логика на сервере (на каком языке он написан, какую базу данных использует). Он просто отправляет запрос по правилам API и получает ответ.
- Стандартизация: API часто следуют общепринятым стандартам (REST, GraphQL, gRPC), что упрощает их интеграцию и использование.
- Независимость: Сервер и клиент могут разрабатываться, тестироваться и развертываться независимо друг от друга, пока они оба соблюдают «контракт» API.
Простой пример веб-API на Go с использованием net/http
:
Этот код создает HTTP-сервер с одной конечной точкой (endpoint) /api/greeting
, которая возвращает JSON-ответ.
package main
import (
"encoding/json"
"log"
"net/http"
)
// Структура для нашего ответа
type GreetingResponse struct {
Message string `json:"message"`
}
// Обработчик HTTP-запросов
func greetingHandler(w http.ResponseWriter, r *http.Request) {
// Устанавливаем заголовок, сообщая клиенту, что мы отправляем JSON
w.Header().Set("Content-Type", "application/json")
// Создаем ответ
response := GreetingResponse{Message: "Hello from Go backend!"}
// Кодируем ответ в JSON и отправляем его клиенту
err := json.NewEncoder(w).Encode(response)
if err != nil {
log.Printf("Error encoding JSON: %v", err)
}
}
func main() {
// Регистрируем наш обработчик для пути /api/greeting
http.HandleFunc("/api/greeting", greetingHandler)
log.Println("Starting server on :8080")
// Запускаем сервер на порту 8080
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatalf("Could not start server: %sn", err)
}
}