Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
GET vs POST - Fundamentalne razlike
GET i POST su dva najčešće korišćena HTTP metoda. Obe se koriste za slanje podataka sa klijenta na server, ali imaju različite karakteristike i upotrebe.
GET zahtjev
Karakteristike:
- Parametri se šalju u URL-u
- Vidljivi korisnicima (u URL bar-u)
- Limitirani su po veličini (obično ~2000 karaktera)
- Ne mogu se slati binarne podatke
- Idempotentni - ista poziva daje iste rezultate
- Cachiraju se u browseru
- Čuvaju se u istoriji pregledavanja
// GET zahtjev
// URL: /api/v1/users?name=John&age=30
route::get('/users', function () {
$name = request('name'); // 'John'
$age = request('age'); // '30'
return User::query()
->when($name, fn($q) => $q->where('name', $name))
->when($age, fn($q) => $q->where('age', $age))
->get();
});
POST zahtjev
Karakteristike:
- Parametri se šalju u telu zahtjeva (body)
- Nisu vidljivi korisnicima
- Praktički neograničena veličina
- Mogu se slati binarni podaci, fajlovi
- Nisu idempotentni - multiple poziva kreiraju multiple resurse
- Ne cachiraju se automatski
- Ne čuvaju se u istoriji pregledavanja
// POST zahtjev
route::post('/users', function () {
$data = request()->validate([
'name' => 'required|string',
'email' => 'required|email',
'password' => 'required|min:8'
]);
return User::create($data);
});
Direktna poređenja
| Karakteristika | GET | POST |
|---|---|---|
| Vidljivost podataka | Vidljivi u URL | Skriveni |
| Veličina | Do ~2000 char | Praktički neograničeno |
| Brzina | Brži (URL je kraća) | Malo sporiji |
| Sigurnost | Manja (podaci vidljivi) | Veća (u body) |
| Cachiranje | Da (automatski) | Ne |
| Binarne podatke | Ne | Da |
| Istorija pregledavanja | Čuva se | Ne čuva se |
| Idempotentnost | Da (safe) | Ne |
| CORS | Jednostavnije | Kompleksnije |
Primjeri - GET zahtjevi
1. Pretraga
// GET /search?q=laptop&category=electronics
route::get('/search', function () {
$query = request('q');
$category = request('category');
return Product::query()
->where('name', 'like', "%{$query}%")
->when($category, fn($q) => $q->where('category', $category))
->get();
});
2. Filtriranje i paginacija
// GET /api/v1/posts?page=2&per_page=20&sort=created_at
route::get('/posts', function () {
return Post::query()
->paginate(request('per_page', 15))
->sortBy(request('sort', 'created_at'));
});
3. Dobijanje specifičnog resursa
// GET /api/v1/users/123
route::get('/users/{id}', function ($id) {
return User::findOrFail($id);
});
Primjeri - POST zahtjevi
1. Kreiranje novog resursa
// POST /api/v1/users
// Body: {"name": "John", "email": "john@example.com"}
route::post('/users', function () {
$user = User::create(request()->validate([
'name' => 'required|string',
'email' => 'required|email|unique:users'
]));
return response()->json($user, 201);
});
2. Slanje fajla
// POST /api/v1/upload
// Multipart form data sa fajlom
route::post('/upload', function () {
if (!request()->hasFile('image')) {
return response()->json(['error' => 'No file'], 400);
}
$file = request()->file('image');
$path = $file->store('uploads');
return response()->json(['path' => $path]);
});
3. Login/Autentifikacija
// POST /api/v1/login
// Body: {"email": "user@example.com", "password": "secret"}
route::post('/login', function () {
$credentials = request()->validate([
'email' => 'required|email',
'password' => 'required'
]);
$user = User::where('email', $credentials['email'])->first();
if (!$user || !Hash::check($credentials['password'], $user->password)) {
return response()->json(['error' => 'Invalid credentials'], 401);
}
$token = $user->createToken('api_token')->plainTextToken;
return response()->json(['token' => $token]);
});
Javna pravila (REST API)
Kada koristiti GET:
- Čitanje podataka -
GET /api/v1/users - Filtriranje -
GET /api/v1/posts?category=tech - Pretraga -
GET /api/v1/search?q=term - Sortiranje/Paginacija -
GET /api/v1/items?page=2&sort=name
Kada koristiti POST:
- Kreiranje resursa -
POST /api/v1/users - Slanje kompleksnih podataka
- Upload fajlova
- Login/Autentifikacija
- Operacije sa side effects -
POST /api/v1/orders
Sigurnosne razlike
GET je MANJE bezbedan:
// LOSE - password u GET zahtjevu!
// GET /api/v1/login?email=user@example.com&password=secret123
POST je BEZBEDAN:
// DOBRO - password u body-ju
POST /api/v1/login
Body: {"email": "user@example.com", "password": "secret123"}
Caching razlike
GET se cachira:
// GET zahtjevi se mogu cachirati u browser-u
route::get('/data', function () {
return response()->json($data)
->header('Cache-Control', 'public, max-age=3600');
});
POST se obično ne cachira:
// POST zahtjevi se obično ne cachiraju
route::post('/data', function () {
return response()->json($result)
->header('Cache-Control', 'no-cache');
});
Praktični primjer - Komplatna forma
// HTML forma
<form method="GET" action="/search">
<input type="text" name="q" placeholder="Search...">
<button type="submit">Search</button>
</form>
// PHP handler - GET za pretragu
route::get('/search', function () {
$query = request('q');
$results = Product::where('name', 'like', "%{$query}%")->get();
return view('search.results', ['results' => $results]);
});
// HTML forma sa osjetljivim podacima
<form method="POST" action="/create-user">
@csrf
<input type="text" name="name" required>
<input type="email" name="email" required>
<input type="password" name="password" required>
<button type="submit">Create</button>
</form>
// PHP handler - POST za kreiranje
route::post('/create-user', function () {
$data = request()->validate([
'name' => 'required|string',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed'
]);
User::create($data);
return redirect('/users')->with('success', 'User created');
});
HTTPS razmatranja
Mada se koriste HTTP metode, HTTPS šifrira SVEEE:
- GET parametri se šifriraju u HTTPS-u
- POST body se šifrira u HTTPS-u
- Uvijek koristite HTTPS u produkciji!
// Provjera da li je HTTPS
if (!request()->secure()) {
return redirect()->secure(request()->getRequestUri());
}
Zaključak: GET je za čitanje i sigurne operacije, POST je za promene podataka, slanje osjetljivih informacija i operacije sa side effects.