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 stringGET — 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) # 200DELETE — 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 dane201 Created— POST utworzyło nowy zasób204 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 pola401 Unauthorized— brak klucza API lub nieprawidłowy klucz API404 Not Found— zasób nie istnieje429 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 serwera502 Bad Gateway— awaria usługi nadrzędnej503 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 retriesNagłó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 JSONAuthorization: Bearer TOKEN— uwierzytelnia żądanieAccept: application/json— informuje serwer, że oczekuje się odpowiedzi w formacie JSONUser-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
Sessionwspół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
- Podstawy REST API dla twórców agentów
- Uwierzytelnianie: klucze API i OAuth
- Obsługa odpowiedzi i błędów API
- Ograniczanie liczby żądań i logika ponawiania