0Pricing
AI Agents · Lekcja

Podstawy REST API dla twórców agentów

Metody HTTP, kody statusu, nagłówki oraz format żądań i odpowiedzi JSON.

Podstawy REST API dla twórców agentów to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Czym jest żądanie HTTP?

Każdy agent łączący się z zewnętrzną usługą korzysta z HTTP — języka sieci WWW. Żądanie HTTP składa się z trzech kluczowych części: metody, adresu URL oraz opcjonalnych nagłówków i treści.

Metodę można traktować jak czasownik informujący serwer, co ma zrobić, a adres URL jak adres zasobu.

import requests

# A simple GET request to a public API
response = requests.get('https://api.example.com/users')
print(response.status_code)  # 200
print(response.text)          # raw JSON string

GET — pobieranie danych

GET pobiera dane z serwera. Nie powinno nigdy niczego modyfikować. Agenci używają GET do odczytywania profili użytkowników, pobierania list zadań lub pobierania danych konfiguracyjnych.

Parametry można przekazywać w adresie URL jako query string, używając argumentu params.

import requests

# Fetch users filtered by role
params = {'role': 'admin', 'page': 1, 'limit': 10}
response = requests.get(
    'https://api.example.com/users',
    params=params
)
# URL becomes: /users?role=admin&page=1&limit=10
data = response.json()
print(data['users'])

POST — tworzenie zasobów

POST wysyła dane do serwera w celu utworzenia nowego zasobu. Agenci używają POST do przesyłania zadań, wysyłania wiadomości lub uruchamiania działań. Dane umieszcza się w treści żądania w formacie JSON.

Zawsze należy ustawiać nagłówek Content-Type: application/json — większość interfejsów API tego wymaga.

import requests
import json

payload = {
    'title': 'Research competitors',
    'assignee': 'agent-001',
    'priority': 'high'
}

response = requests.post(
    'https://api.example.com/tasks',
    json=payload  # sets Content-Type automatically
)
print(response.status_code)  # 201 Created
new_task = response.json()
print('Created task ID:', new_task['id'])

PUT i PATCH — aktualizowanie danych

PUT zastępuje cały zasób nowymi danymi. PATCH aktualizuje tylko określone pola. Agenci używają PUT, gdy mają cały zaktualizowany obiekt, a PATCH do częściowych zmian, takich jak aktualizacja statusu zadania.

import requests

task_id = '42'

# PATCH: only update the status field
response = requests.patch(
    f'https://api.example.com/tasks/{task_id}',
    json={'status': 'completed'}
)
print(response.status_code)  # 200

# PUT: replace the whole task object
full_task = {
    'title': 'Research competitors',
    'assignee': 'agent-001',
    'priority': 'low',
    'status': 'completed'
}
response = requests.put(
    f'https://api.example.com/tasks/{task_id}',
    json=full_task
)
print(response.status_code)  # 200

DELETE — usuwanie zasobów

DELETE usuwa zasób z serwera. Agenci używają DELETE do usuwania danych tymczasowych, usuwania przetworzonych zadań lub anulowania zaplanowanych zadań. Większość żądań DELETE nie ma treści.

Pomyślne usunięcie zazwyczaj zwraca 204 No Content — treść odpowiedzi jest pusta.

import requests

task_id = '42'

response = requests.delete(
    f'https://api.example.com/tasks/{task_id}'
)

if response.status_code == 204:
    print('Task deleted successfully')
elif response.status_code == 404:
    print('Task not found — already deleted?')
else:
    print('Unexpected status:', response.status_code)

Kody statusu: powodzenie 2xx

Kody statusu informują agenta, czy żądanie zakończyło się powodzeniem, czy niepowodzeniem. Zakres 2xx oznacza powodzenie:

  • 200 OK — GET/PUT/PATCH zwróciło dane
  • 201 Created — POST utworzyło nowy zasób
  • 204 No Content — DELETE zakończyło się powodzeniem, nie zwrócono treści

Przed przetworzeniem treści odpowiedzi zawsze należy sprawdzić kod statusu.

import requests

response = requests.post(
    'https://api.example.com/tasks',
    json={'title': 'New task'}
)

if response.status_code == 201:
    task = response.json()
    print('Created:', task['id'])
elif response.status_code == 200:
    print('Updated existing resource')
else:
    print('Unexpected code:', response.status_code)

Kody statusu: błędy klienta 4xx

Błędy 4xx oznaczają, że agent wysłał nieprawidłowe żądanie. Typowe przykłady:

  • 400 Bad Request — nieprawidłowy JSON lub brak wymaganego pola
  • 401 Unauthorized — brak klucza API lub nieprawidłowy klucz API
  • 404 Not Found — zasób nie istnieje
  • 429 Too Many Requests — przekroczono limit zapytań

W takich sytuacjach agent powinien poprawić żądanie, a nie bezmyślnie ponawiać prób.

import requests

response = requests.get(
    'https://api.example.com/tasks/9999',
    headers={'Authorization': 'Bearer YOUR_KEY'}
)

if response.status_code == 401:
    print('AUTH ERROR: Check your API key')
elif response.status_code == 404:
    print('Task not found')
elif response.status_code == 429:
    retry_after = response.headers.get('Retry-After', 60)
    print(f'Rate limited. Wait {retry_after}s')
elif response.status_code == 400:
    print('Bad request:', response.json().get('error'))

Kody statusu: błędy serwera 5xx

Błędy 5xx oznaczają, że coś poszło nie tak po stronie serwera — agent nie zrobił niczego nieprawidłowego. Typowe przykłady:

  • 500 Internal Server Error — błąd lub awaria serwera
  • 502 Bad Gateway — awaria usługi nadrzędnej
  • 503 Service Unavailable — serwer jest przeciążony lub niedostępny

Po krótkim oczekiwaniu można bezpiecznie ponowić takie żądania.

import requests
import time

def get_with_retry(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        if response.status_code < 500:
            return response  # success or client error
        wait = 2 ** attempt
        print(f'Server error {response.status_code}, retrying in {wait}s...')
        time.sleep(wait)
    return response  # return last response after retries

Nagłówki żądania

Nagłówki przenoszą metadane wraz z każdym żądaniem. Najważniejsze z nich dla agentów to:

  • Content-Type: application/json — informuje serwer, że treść żądania jest w formacie JSON
  • Authorization: Bearer TOKEN — uwierzytelnia żądanie
  • Accept: application/json — informuje serwer, że oczekuje się odpowiedzi w formacie JSON
  • User-Agent — identyfikuje klienta (niektóre interfejsy API tego wymagają)
import requests

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-proj-abc123xyz',
    'Accept': 'application/json',
    'User-Agent': 'MyAgent/1.0'
}

response = requests.post(
    'https://api.example.com/analyze',
    headers=headers,
    json={'text': 'Analyze this document'}
)

print(response.json())

Treść żądania i odpowiedzi w formacie JSON

Większość nowoczesnych interfejsów API wymienia dane w formacie JSON. Podczas wysyłania należy użyć json=payload w requests (dane zostaną zserializowane, a nagłówki ustawione automatycznie). Podczas odbierania należy wywołać response.json(), aby przeanalizować treść i przekształcić ją w słownik Pythona.

Przed uzyskaniem dostępu do oczekiwanych kluczy zawsze należy sprawdzić, czy one istnieją.

import requests

# Send JSON body
response = requests.post(
    'https://api.example.com/summarize',
    json={
        'content': 'Long article text here...',
        'max_length': 150,
        'format': 'bullet_points'
    }
)

# Parse JSON response
result = response.json()

# Always check keys exist
summary = result.get('summary', 'No summary returned')
tokens_used = result.get('usage', {}).get('total_tokens', 0)

print('Summary:', summary)
print('Tokens used:', tokens_used)

Połączenie wszystkich elementów

Dobrze napisany agent opakowuje wywołania API w czystą funkcję pomocniczą, która dobiera metodę, ustawia właściwe nagłówki, sprawdza kod statusu i analizuje dane JSON. Dzięki temu każda interakcja z API jest spójna i łatwa do debugowania.

Należy używać obiektu Session, aby ponownie wykorzystywać połączenia i współdzielić nagłówki między wieloma żądaniami.

import requests

class APIClient:
    def __init__(self, base_url, api_key):
        self.base_url = base_url
        self.session = requests.Session()
        self.session.headers.update({
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        })

    def get(self, path, params=None):
        r = self.session.get(f'{self.base_url}{path}', params=params)
        r.raise_for_status()
        return r.json()

    def post(self, path, payload):
        r = self.session.post(f'{self.base_url}{path}', json=payload)
        r.raise_for_status()
        return r.json()

# Usage
client = APIClient('https://api.example.com', 'sk-proj-abc123')
tasks = client.get('/tasks', params={'status': 'open'})
new_task = client.post('/tasks', {'title': 'Write report'})

Szybki test: metody HTTP

Sprawdź swoje rozumienie metod HTTP i kodów statusu.

Podsumowanie podstaw HTTP

Znasz już podstawy HTTP, na których opiera się każdy agent:

  • GET pobiera, POST tworzy, PUT/PATCH aktualizuje, a DELETE usuwa
  • 2xx = powodzenie, 4xx = błąd po stronie agenta, 5xx = błąd po stronie serwera
  • Nagłówki przenoszą dane uwierzytelniające (Authorization: Bearer) i określają format (Content-Type: application/json)
  • Używaj response.json(), aby analizować treść, oraz .get(), aby bezpiecznie uzyskiwać dostęp do pól
  • Obiekt Session współdzieli nagłówki i połączenia między żądaniami

Mając solidne podstawy, można swobodnie łączyć agenta z dowolnym interfejsem REST API.

Często zadawane pytania

Czy lekcja „Podstawy REST API dla twórców agentów” jest bezpłatna?

Tak — pełny tekst „Podstawy REST API dla twórców agentów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy REST API dla twórców agentów”?

Metody HTTP, kody statusu, nagłówki oraz format żądań i odpowiedzi JSON. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Podstawy REST API dla twórców agentów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy REST API dla twórców agentów
  2. Uwierzytelnianie: klucze API i OAuth
  3. Obsługa odpowiedzi i błędów API
  4. Ograniczanie liczby żądań i logika ponawiania
← Powrót do AI Agents